Intereting Posts
Я создал новую домашнюю страницу и установил ее как домашнюю страницу в разделе чтения, но я получаю сообщение об ошибке при вводе URL-адреса главной страницы Word 403.php WordPress не найден, сервер по умолчанию использует собственную страницу 404 Apache Пользовательские поля пользователя + существующая таксономия – интеграция двух динамически? Опубликованный сайт возвращается без изменений в тему Подменю в шаблоне пользовательской страницы боковой панели Пользовательский запрос базы данных для проверки данных Как отключить wp-фильтр на определенной странице панели администратора Отменить регистрацию jQuery WordPress на определенной странице Избегайте дублирования при слиянии двух запросов Оптимизация запроса элементов заказа Woocommerce Как я могу разместить простой html-файл через WordPress? (см. подробности) Скрыть боковую панель и изменить макет страницы блога с помощью функции is_page () PHP-класс для добавления страниц и полей в панель администратора WordPress Предотвращение 404 пропущенных пользовательских сообщений Как официальный репозиторий WordPress оценивает «Активные установки» плагина?

Многие для многих таксономий или переписывают правила?

Я разрабатываю тему для каталога статей, и я хотел бы связать некоторые таксономии с таксономиями. У меня был специальный тип сообщения, называемый « компания » с 2 налоговыми маклерами

Taxonomy #1 is category with terms(shops,workshops,churchs,shoppings,etc) Taxonomy #2 is location with terms(New York, New jersey,Miami, etc) 

С таксономией № 1 я могу

 local.dev/category/shops/ to list all shops 

С таксономией №2 я могу

 local.dev/location/miami/ to list all companies in miami 

В настоящее время я получил от этого ответа MikeSchinkel следующее:

  local.dev/shops/ 

Который я могу использовать также, как эти, чтобы получить мои желаемые результаты:

 local.dev/shops/?location=miami 

НО я хотел бы сделать

 local.dev/shops/miami or local.dev/shops/new-york to list shops in different locations 

Создание всех URL-адресов выглядит лучше. Это возможно? Мои условия будут уникальными, поэтому я уверен, что они не будут сталкиваться с тегами сообщений или слизнями или чем-либо еще

Наверное, лучше всего правильно создать правило перезаписи? Пожалуйста, дайте мне немного света, я немного потерял.

С резервированием, конечно, вы можете делать то, что хотите, с помощью этого кода:

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

Затем перейдите в «Настройки» → «Постоянная ссылка» в wp-admin и нажмите «Сохранить изменения», чтобы очистить ваши перезаписи и активировать это правило.

Бронирование

Проблема отсутствия префикса заключается в том, что любая постоянная ссылка с двумя разделами (site.com/section-1/section-2/) будет зависеть от этой постоянной ссылки, и вы в конечном итоге окажетесь нежелательным поведением. Например, запись с двумя страницами, site.com/about/2 или фид комментариев для страницы, site.com/page/feed/. Короче говоря, это не рекомендуется.

Предлагаемое решение

Если бы это был я, я бы добавил статическую базу для безопасности. Вы сказали, что это для каталога, так что это хорошая база:

 add_action('init', 'wpse_61376_rewrites'); function wpse_61376_rewrites() { add_rewrite_rule('^directory/([^/]*)/([^/]*)/?$','index.php?category=$matches[1]&location=$matches[2]','top'); } 

Тогда ваши URL-адреса были бы, site.com/directory/shops/miami/, что было бы столь же интуитивно понятным, насколько это безопасно.

Начиная с WordPress 3.1 вы можете запросить множественную таксономию в URL-адрес из коробки без каких-либо разработок. Это работает только с строками запросов по умолчанию, и пользовательские правила перезаписи должны быть добавлены, чтобы сделать эту работу довольно красивой.

Из коробки

local.dev/company/?category=shops&location=new-york

Это отлично работает и будет захватывать любую должность типа «компания», которая имеет категорию shops и местоположение в new-york . Очевидно, однако, похоже, что вы хотите, чтобы это работало с довольно постоянными ссылками, поэтому нам нужно создать некоторые пользовательские правила перезаписи.

Довольно постоянные

Первое, что нам нужно сделать, – это четко указать, какой шаблон мы хотим для этой множественной таксономии. В вашем вопросе вы использовали /shop/new-york . Это может сработать, но с ним много проблем.

База таксономии

Важно понимать, что все URL-адреса переднего конца WordPress получают «переписанные» и заканчиваются как запросы к index.php . Не index.php в вашей теме, а не в основном приложении. Такие вещи, как столбцы, имена категорий, теги и т. Д. – все они отправляются, чтобы получить GET-запросы. Правила перезаписи – это шаблоны регулярных выражений, которые превращают /foo/bar в index.php?foo=bar или независимо от того, какая строка запроса должна быть построена.

Поскольку в ваших примерах нет «базы таксономии», /shops будут сталкиваться с любым сообщением любого типа сообщения, которое разделяет слизню. Кроме того, поскольку мы вообще не используем какую-либо базовую категорию, было бы сложно, если правила перезаписи будут знать, когда определенный URL-адрес /<cat-term>/<location-term> или должен быть /<cat-term>/<post-slug> . Подумайте о основах таксономии в качестве межстрочного интервала – если мы вместо этого используем /category/shops/location/new-york , тогда можно было бы написать регулярное выражение для поиска шаблона /category/<cat-term>/location/<location-term> и делать это однозначно.

С учетом сказанного, даже если вы попросили /<cat-term>/<location-term> , я рассмотрю это объяснение, используя /category/<cat-term>/location/<location-term> .

Post Type Base Base

Как и в случае базы таксономии, мои примеры предполагают, что у вас есть company установленная в качестве пули для вашего настраиваемого типа сообщений «компании» – и, безусловно, необязательна, вы можете не использовать ее. Просто имейте в виду, что если эта база типа post отсутствует, запрос не будет фильтроваться компанией post type, и в полученном архиве будут отображаться сообщения любого типа сообщений, соответствующие критериям таксономии.

Переписать правила

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

 function multiple_taxonomy_rewrite_rules( $rules ){ /** * This is very strict. Only allows category first, * and location must be second. * * This is also an example of how to make this rule * only work for the "company" post type. * Notice the hard-coded "post_type=company" string * at the end. * * This will only work with the following structure... * * /company/category/<term>/location/<term> */ $newrules['company/category/(.+)/location/(.+)/?$'] = 'index.php?=category=$matches[1]&location=$matches[2]&post_type=company'; /** * This is a very flexible version. Allowing for * almost any permutation of the structure. * * This will work with... * * /<any-post-type>/category/<term>/location/<term> * * /<any-post-type>/location/<term>/category/<term> * * /category/<term>/location/<term> (no post type base - meaning query doesnt filter by post type) * * /location/<term>/category/<term> (no post type base - meaning query doesnt filter by post type) */ $newrules['(.+)?/?(category|location)/(.+)/(category|location)/(.+)/?$'] = 'index.php?=post_type=$matches[1]&$matches[2]=$matches[3]&$matches[4]=$matches[5]'; return $newrules + $rules; } add_action('rewrite_rules_array', 'multiple_taxonomy_rewrite_rules'); 

Надеюсь, это полезно.

РЕДАКТИРОВАТЬ:

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

В комментариях я объяснил, что также можно использовать уникальный слизень в качестве префикса для этого конкретного шаблона. Вы можете использовать …

 'company/(.+)/(.+)/?$' = 'index.php?category=$matches[1]&location=$matches[2]&post_type=company'; 

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

основы

Просто используйте get_terms() в сочетании с get_site_url() .

Многоузловое

Чтобы добавить поддержку MU, просто get_current_blog_id() чтобы получить идентификатор текущего блога. Это дает вам $blog_id , который является единственным блогом в одной установке сайта и поэтому также работает для установок, отличных от MU.

пример

Теперь давайте создадим список.

 echo '<ul>'; foreach ( get_terms( "shops" ) ) as $shop ) { $site_url = get_site_url( get_current_blog_id() ); echo "<li><a href='{$site_url}shops/{$shop->slug}' title='{$shop->description}'>{$shop->name}</a></li>"; } echo '</ul>'; 

В этом примере предполагается, что у вас есть только URL-адрес вашего сайта, и ваши слова таксономии добавляются.

 http://example.com/shops/miami