Intereting Posts
Как увидеть в Редактирование комментариев, если комментарий от пользователя и ее роли Новый идентификатор пользователя, не работающий в пользовательской функции с помощью user_register hook Запрос запроса Изменение woocommerce по умолчанию переключает масштаб для мобильных устройств в галерее продуктов Есть ли версия WordPress, которая несовместима с PHP 5.3? Просмотр редактируемого текста над списками документов CPT WordPress продолжает запрашивать информацию о подключении в локальном хосте После переименования базы данных MySQL я больше не могу получить доступ к моей странице в блоге Повторно сортировать результаты запроса get_posts Перенаправление на домашнюю страницу, если страница не существует Есть ли способ изменить миниатюрное изображение (ы) сообщения? Как получить сообщения, где изображение больше, чем …? Разрешения в локальной среде Dev (OS X) Категории мультимедиа как классы в WordPress Gallery Shortcode Как ограничить функциональность в одной версии плагина?

Архив категорий по годам с поддержкой permalink / category / YYYY

В настоящее время я рассматриваю создание нового типа архива сайта в WordPress, который позволяет пользователям фильтровать по категориям И по годам, а не по умолчанию по категории ИЛИ год.

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

/ Категория / год /

/ Категория-1 / год /

и т.п.

У меня нет требования фильтровать глубже года. Я обнаружил этот фрагмент кода, но он не работает должным образом.

благодаря

То, что вы ищете, является конечной точкой . Уже есть несколько из них: /feed/some-feed/ for feeds или /trackback/ on posts. Это и конечные точки.

К счастью, WordPress обеспечивает удобную функцию, что делает ваши собственные endpionts очень легкими. add_rewrite_endpoint

Это весь код, необходимый для создания ваших годовых архивов категорий:

 <?php add_action( 'init', 'wpse31422_init' ); function wpse31422_init() { add_rewrite_endpoint( 'year', EP_CATEGORIES ); } 

В качестве плагина: https://gist.github.com/1296860

Он работает точно так же, как ответ Стивена Харриса, и вы можете получить годовой архив категорий, посетив сайт yoursite.com/category/some-cat-slug/year/2011/ .

Добавление конечной точки создает переменную запроса с тем же именем, что и первый аргумент функции add_rewrite_endpoint . В этом случае, year . Поскольку этот запрос var уже существует в WP (чтобы заботиться о архивах на основе данных), нам действительно не нужно ничего делать здесь.

Это не проверено, но попробуйте (после того, как вы добавили код, вам нужно перейти к настройкам> Permalink и нажмите «Сохранить», чтобы он вступил в силу):

 add_action('generate_rewrite_rules', 'my_rewrite_rules'); function my_rewrite_rules( $wp_rewrite ) { $new_rules = array( '(.+)/year/(.+)' => '?category_name='.$wp_rewrite->preg_index(1).'&year='.$wp_rewrite->preg_index(2), ); // Add the new rewrite rule into the top of the global rules array $wp_rewrite->rules = $new_rules + $wp_rewrite->rules; } 

Это должно принять: http://yourwebsite.com/foobar/year/2011 и вернуть результаты в категорию foobar, в 2011 году.

Я не уверен, что структура – лучший способ сделать это. Чтобы избежать нежелательных проблем, я бы предложил использовать: http://yourwebsite.com/category/foobar/year/2011 и использовать вместо этого:

 'category/(.+)/year/(.+)' => '?category_name='.$wp_rewrite->preg_index(1).'&year='.$wp_rewrite->preg_index(2) 

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

Следуя советам @StephenHarris, я разработал код немного дальше и придумал следующее:

 add_action('generate_rewrite_rules', 'my_rewrite_rules'); function my_rewrite_rules( $wp_rewrite ) { // handles paged/pagination requests $new_rules = array('news/(.+)/year/(.+)/page/?([2-9][0-9]*)' => '?category_name='.$wp_rewrite->preg_index(1).'&year='.$wp_rewrite->preg_index(2).'&paged='.$wp_rewrite->preg_index(3)); // handles standard requests $new_rules1 = array('news/(.+)/year/(.+)' => '?category_name='.$wp_rewrite->preg_index(1).'&year='.$wp_rewrite->preg_index(2)); // Add the new rewrite rule into the top of the global rules array $wp_rewrite->rules = $new_rules + $new_rules1 + $wp_rewrite->rules; } 

Это позволяет сайту поддерживать URLS, которые выглядят так:

/ Новости / мой-категория / год / 2011 / страницы / 2

так же как

/ Новости / моя-категория / год / 2011

Часть сообщений / блога моего сайта имеет префикс «новости», поэтому вы можете настроить первую часть регулярных выражений и удалить слово «новости».

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

Мне удалось заставить его работать, используя решение StephenHarris и Scott с небольшой модификацией:

 function add_events_by_year_rewrite_rules($wp_rewrite){ // handles paged/pagination requests $new_rules_with_pagination = array('c/(.+)/year/(.+)/page/?([2-9][0-9]*)' => 'index.php?category_name='.$wp_rewrite->preg_index(1).'&year='.$wp_rewrite->preg_index(2).'&paged='.$wp_rewrite->preg_index(3)); // handles standard requests $new_rules_without_pagination = array('c/(.+)/year/(.+)' => 'index.php?category_name='.$wp_rewrite->preg_index(1).'&year='.$wp_rewrite->preg_index(2)); // Add the new rewrite rule into the top of the global rules array $wp_rewrite->rules = $new_rules_with_pagination + $new_rules_without_pagination + $wp_rewrite->rules; return $wp_rewrite->rules; } add_filter('generate_rewrite_rules', 'add_events_by_year_rewrite_rules'); 

Обратите внимание, что index.php добавлен в определение правил перезаписи.