Несколько таксономий в URL
Как добавить несколько таксономий к URL-адресу, имеющему следующее:
- Тип сообщения: продукты
- Таксономия: product_type
- Таксономия: товарный бренд
Добавление нового продукта и выбор типа и бренда для этого продукта:
При добавлении нового продукта есть два поля таксономии (product_type и product_brand). Давайте назовем этот новый пост Test Product 1 . Первое, что мы хотим сделать, это отметить, с каким типом продукта я имею дело, скажем, с мобильными телефонами . Далее я хочу отметить, к какому бренду относится продукт, скажем, samsung.
Теперь « Тестовый продукт 1 » ассоциируется с типом «сотовые телефоны» и брендом «Samsung» .
Желаемый конечный результат:
/ продукты
»Просмотреть все пользовательские сообщения/ продукты / мобильные телефоны
»Просмотреть все пользовательские сообщения с мобильными телефонами таксономии/ product / cell-phone / samsung /
»Просмотреть все пользовательские сообщения, где таксономия - мобильные телефоны и samsung/ продукты / мобильные телефоны / samsung / test-product-1
»Просмотреть товар (один пользовательский пост)
Вопрос
Как сделать это возможным? Моя первоначальная мысль заключалась в том, чтобы использовать одну таксономию, имея «мобильные телефоны» в качестве родительского термина «samsung» . На самом деле добавление таксономии и ее условий было не так сложно. Но это привело к множеству других проблем, некоторые из которых хорошо известны, некоторые не так много. В любом случае, это не работает так, как дает 404 проблемы, а WP не разрешит некоторые вещи.
WP.org »таксономия-архив-шаблон
Это привело меня к переосмыслению структуры, необходимости покинуть таксономии и ее термины, и я подумал; почему бы не создать 2-ю таксономию, связать с ней тип сообщения и добавить его к URL-адресу?
Хороший вопрос, но как?
Ответы:
Это, безусловно, возможно, если использовать некоторые собственные правила переписывания. В WP_Rewrite API подвергает функции , которые позволяют добавлять правила перезаписи (или «карты») , чтобы преобразовать запрос на запрос.
Есть предпосылки для написания хороших правил переписывания, и наиболее важным из них является базовое понимание регулярных выражений. Движок WordPress Rewrite использует регулярные выражения для перевода частей URL-адресов в запросы для получения сообщений.
Это краткое и хорошее руководство по PHP PCRE (Perl-совместимые регулярные выражения).
Итак, вы добавили две таксономии, давайте предположим, что их имена:
Мы можем использовать их в запросах так:
Запрос будет
?product_type=cell-phones&product_brand=samsung
. Если вы введете это в качестве запроса, вы получите список телефонов Samsung. Чтобы переписать/cell-phones/samsung
этот запрос, необходимо добавить правило перезаписи.add_rewrite_rule()
сделаю это для вас. Вот пример того, как может выглядеть ваше правило перезаписи для приведенного выше случая:Вам нужно будет это сделать,
flush_rewrite_rules()
как только вы добавите правило перезаписи, чтобы сохранить его в базе данных. Это делается только один раз, нет необходимости делать это с каждым запросом, как только правило сбрасывается туда. Чтобы удалить его, просто сбросьте без добавления правила перезаписи.Если вы хотите добавить нумерацию страниц, вы можете сделать это следующим образом:
источник
Конечный результат
Вот то, что я придумал, частично используя кусочки из всех ответов, которые я получил:
Некоторые мысли:
Это работает. Хотя вы «обязаны» назначать обе таксономии каждому сообщению, иначе у URL будет трейлинг
'/'
»'/products/taxonomy//postname'
. Поскольку я собираюсь назначить обе таксономии для всех моих протоколов, имеющих тип и марку, этот код, кажется, работает для моих нужд. Если у кого-то есть предложения или улучшения, не стесняйтесь отвечать!источник
flush_rewrite_rules()
наinit
? не к этому. в основном вы сбрасываете свои правила перезаписи при каждой загрузке страницы.Проверьте этот способ, все еще есть ошибки с архивом бренда
http://pastebin.com/t8SxbDJy
}
источник
Несмотря на то, что вы не имеете желаемой структуры URL, вы можете получить:
без указания пользовательских правил перезаписи.
Это требует, чтобы вы регистрировали свои таксономии и пользовательские типы записей в определенном порядке. Хитрость заключается в том, чтобы зарегистрировать любую таксономию, где слаг начинается с слага вашего пост-типа, прежде чем регистрировать этот пользовательский тип поста. Например, предположим следующие слагы:
Тогда вы можете зарегистрировать их в следующем порядке:
Если вам абсолютно необходим URL-адрес, например:
Тогда вам потребуется правило переписывания примерно так:
ОБНОВЛЕНИЕ /programming/3861291/multiple-custom-permalink-structures-in-wordpress
Вот как правильно переопределить URL-адрес одного сообщения.
Установите для перезаписи значение false для пользовательского типа записи. (Оставьте архив как есть), а затем после регистрации таксономий и сообщений также зарегистрируйте следующие правила перезаписи.
Затем отфильтруйте post_type_link, чтобы создать желаемую структуру URL - с учетом неустановленных значений таксономии. Изменив код из связанного поста, вы получите:
Теперь мне просто нужно выяснить, как переписать URL таксономии бренда без лидирующего тега бренда, и я должен точно соответствовать желаемому URL.
источник