Intereting Posts
Лучший способ реализовать галерею на основе миниатюр в WordPress? Ошибка Weird Parse для загруженного файла Пользовательский тип сообщения Постоянная ссылка не совпадает с постоянной позицией Код, позволяющий форматирование html в выдержках Переменные в URL. Как интегрировать пользовательский шаблон в 404.php Невозможно выбрать signup_meta при активации нескольких пользователей HTML в настройках WooCommerce SQL QUERY необходимо для получения категории POST (таксономия)? – ДОЛЖНО быть оператором SQL используя короткий код формы (si или cf7) для всех многосайтовых сайтов Записать функцию вне файла functions.php в WordPress Json api не возвращает все метаданные Как изменить формат ссылки на файл (<a url="file_link"> Имя </a>) при вставке из медиаплеера Обработка коротких кодов в группах (разделенных разрывами строк)? Получить список предыдущих сообщений Как удалить вкладку на странице «Загрузка мультимедиа» в WordPress

Объединение нескольких таксономий в один URL-адрес

Я создаю сложный сайт с каталогом продуктов с двумя пользовательскими таксономиями. Это бренды и типы.

Бренды – Canon – Toshiba – HP

Типы – Принтеры – Сканеры – Многофункциональные устройства

Мне нужна страница, на которой найдены все продукты, которые представляют собой комбинацию одной марки и одного типа. Бренд является более важным из двух, поэтому его следует отфильтровать как Brand -> Type (хотя было бы идеально, если бы это было взаимозаменяемо).

Я могу сделать это, изменив запрос на основе параметра, который я добавляю в конец URL-адреса. Например, этот URL-адрес может быть одним из следующих:

  • http://www.example.com/brand/canon/?type=printers
  • http://www.example.com/brand/canon/?type=scanners
  • http://www.example.com/brand/canon/?type=multifunction
  • http://www.example.com/brand/toshiba/?type=printers
  • http://www.example.com/brand/toshiba/?type=scanners
  • http://www.example.com/brand/toshiba/?type=multifunction
  • http://www.example.com/brand/hp/?type=printers
  • http://www.example.com/brand/hp/?type=scanners
  • http://www.example.com/brand/hp/?type=multifunction

Но мне сказали, что это не очень удобно для SEO-целей. В идеале, я бы хотел, чтобы URL-адрес был структурирован как http://www.example.com/brand/type/ . Это приведет к URL-адресам, таким как:

  • http://www.example.com/canon/printers
  • http://www.example.com/canon/scanners
  • http://www.example.com/canon/multifunction
  • http://www.example.com/toshiba/printers
  • http://www.example.com/toshiba/scanners
  • http://www.example.com/toshiba/multifunction
  • http://www.example.com/hp/printers
  • http://www.example.com/hp/scanners
  • http://www.example.com/hp/multifunction

Да, я знаю, что я могу настроить субкатегории для каждого типа продукта под каждым брендом, но мне также нужно иметь возможность просматривать все продукты под каждым типом продукта, не имеющим отношения к бренду.

Кстати, если URL-адрес должен быть немного сложнее (т. Е. / Brand / hp / type / multifunction /), это лучше, чем ничего.

Есть ли какие-то хитрости с постоянными отношениями, которые я мог бы сделать, чтобы заставить ссылки структурироваться так, как они мне нужны?

ОБНОВЛЕНИЕ 10/23/15: я просто потратил час, пытаясь диагностировать, почему это перестало работать на сайте, который я построил. Оказывается, я переопределял запрос по умолчанию с помощью настраиваемого в одном из шаблонов архива таксономии. Для борьбы с этим вы можете сделать следующее:

<?php $tax_query = $wp_query->query_vars; ?> <?php if ($tax_query["types"] && $tax_query["brands"]) { // default query stuff here } else { // custom query stuff here } ?> 

Это правило перезаписи должно работать (при условии, что «бренд» и «тип» являются зарегистрированными названиями таксономии):

 function custom_rewrite_rules() { add_rewrite_rule('^brand/(.*)/type/(.*)?', 'index.php?brand=$matches[1]&type=$matches[2]', 'top'); } add_action('init', 'custom_rewrite_rules'); 

Не забудьте очистить правила rewirte после сохранения этого кода на вашем сайте.

Тогда вам нужно будет зацепить несколько мест, чтобы исправить ситуацию. Например, вам может понадобиться зацепить wp_title чтобы создать правильный заголовок для документа, например «Принтеры HP», или просто «HP», так как это не будет автоматически обрабатываться WordPress. Я не могу дать исчерпывающий список вещей, которые вам нужно исправить .

Вырываясь, чтобы ответить на этот вопрос, я нашел здесь следующую функцию перезаписи:

 function eg_add_rewrite_rules() { global $wp_rewrite; $new_rules = array( 'user/(profession|city)/(.+?)/(profession|city)/(.+?)/?$' => 'index.php?post_type=eg_event&' . $wp_rewrite->preg_index(1) . '=' . $wp_rewrite->preg_index(2) . '&' . $wp_rewrite->preg_index(3) . '=' . $wp_rewrite->preg_index(4), 'user/(profession|city)/(.+)/?$' => 'index.php?post_type=eg_event&' . $wp_rewrite->preg_index(1) . '=' . $wp_rewrite->preg_index(2) ); $wp_rewrite->rules = $new_rules + $wp_rewrite->rules; } add_action( 'generate_rewrite_rules', 'eg_add_rewrite_rules' ); 

эта функция принимает URL-адрес, например: example.com/user/profession/designer,knight/city/athens,gotham/, и преобразует его в переменные:

 $proffession = "designer,knight"; $city = "athens,gotham"; 

которые могут использоваться в taxonomy.php

Дополнительная информация: https://stackoverflow.com/a/34624138/5594521

Рабочая демонстрация: http://playground.georgemanousarides.com/

Надеюсь, поможет!