Intereting Posts
ACF + Visual Composer, выбор значения настраиваемого поля Функциональность управления файлами на панели управления Замените число разбиения на страницы бесконечным прокруткой Таблица 'wp_signups' не существует Замена определенного пункта меню Правильное место для регистрации и запуска очереди Удаление и изменение страницы WordPress вручную и заголовка Довольно URL-адреса для пользовательского типа сообщения и пользовательской таксономии с дублирующимися слизнями на WPML Добавьте несколько идентификаторов сообщений в wp_query Использование цикла для отображения терминов, связанных с сообщением Как показывать только первые слова X (с каждого сообщения) на главной странице? Stream Video Player не работает с do_shortcode ()? Загружать классы, используя spl_autoload_register множественный порядок в действии pre_get_posts Требовать логин для определенных шаблонов

Хорошие URL-адреса для списка настраиваемых типов сообщений с общей пользовательской таксономией?

( Примечание модератора: Заголовок был «Преобразовать в хороший URL-адрес общий пользовательский URL-адрес таксономии с значением строки запроса»)

У меня есть шаблон пользовательской таксономии: taxonomy-country.php используемый двумя (2) типами пользовательских сообщений: 'event' и 'contact' . Я хотел бы настроить страницы для отображения, например:

  • «Все контакты в Коста-Рике» и

  • «Все события в Соединенных Штатах»

Эти текущие URL-адреса дают мне эти списки:

  • http://mytestsite.com/country/costa-rica?post_type=contact

  • http://mytestsite.com/country/united-states?post_type=event

Но я хотел бы реализовать эти URL как хорошие URL-адреса, например:

  • http://mytestsite.com/country/costa-rica/contacts/

  • http://mytestsite.com/country/united-states/events/

Или еще лучше, что-то вроде:

  • http://mytestsite.com/contacts/country/costa-rica/

  • http://mytestsite.com/events/country/united-states/

Для первого предпочтения вам нужно будет фильтровать дополнительные правила перезаписи;

 function __extra_country_rewrite_rules( $rules ) { global $wp_rewrite; if ( !isset( $wp_rewrite ) ) $wp_rewrite = new WP_Rewrite; $m1 = $wp_rewrite->preg_index(1); // preg match backreferences $m2 = $wp_rewrite->preg_index(2); $m3 = $wp_rewrite->preg_index(3); $rules['country/([^/]+)/([^/]+)s/feed/(feed|rdf|rss|rss2|atom)/?$'] = "index.php?country=$m1&post_type=$m2&feed=$m3"; $rules['country/([^/]+)/([^/]+)s/(feed|rdf|rss|rss2|atom)/?$'] = "index.php?country=$m1&post_type=$m2&feed=$m3"; $rules['country/([^/]+)/([^/]+)s/page/?([0-9]{1,})/?$'] = "index.php?country=$m1&post_type=$m2&paged=$m3"; $rules['country/([^/]+)/([^/]+)s/?$'] = "index.php?country=$m1&post_type=$m2"; return $rules; } add_filter( 'country_rewrite_rules', '__extra_country_rewrite_rules' ); 

Второй из них менее динамичен, так как вам придется жестко кодировать типы сообщений в своих переписываниях (в URL-адресе нет первоначального «indentifier», в отличие от «страны» в первом).

 function __extra_country_rewrite_rules( $rules ) { global $wp_rewrite; if ( !isset( $wp_rewrite ) ) $wp_rewrite = new WP_Rewrite; $m1 = $wp_rewrite->preg_index(1); // preg match backreferences $m2 = $wp_rewrite->preg_index(2); $m3 = $wp_rewrite->preg_index(3); $rules["(event|contact)s/country/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$"] = "index.php?post_type=$m1&country=$m2&feed=$m3"; $rules["(event|contact)s/country/([^/]+)/(feed|rdf|rss|rss2|atom)/?$"] = "index.php?post_type=$m1&country=$m2&feed=$m3"; $rules["(event|contact)s/country/([^/]+)/page/?([0-9]{1,})/?$"] = "index.php?post_type=$m1&country=$m2&paged=$m3"; $rules["(event|contact)s/country/([^/]+)/?$"] = "index.php?post_type=$m1&country=$m2"; return $rules; } add_filter( 'rewrite_rules_array', '__extra_country_rewrite_rules' ); 

Чтобы изменения вступили в силу, вам необходимо очистить свои постоянные ссылки (просто зайдите в страницу настроек Permalinks после добавления кода).

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