Позволяет использовать классический пример пользовательского типа записи, называемого "movies", со своей собственной таксономией, называемой "genre".
Регистрируя пользовательский тип записи (со слагом «movie»), постоянные ссылки уже настроены на
<domain>/movie/action/
... для просмотра всех фильмов в жанре экшн. < /p>
Но, архивы по дате, например,
<domain>/2010/09/
... не знаю о пользовательском типе записи.
Ближайший архив на основе даты, я можно приступить к работе:
<domain>/2010/?post_type=movies
... в котором перечислены все пользовательские типы сообщений, опубликованные в текущем году (2010). По какой-то причине месяц, таксономия и термин не могут быть добавлены к URL-адресу, чтобы получить ожидаемый результат.
Что нужно сделать, чтобы включить URL-адреса, подобные этим ...
<domain>/2010/09/movie/action/
... работать так, как ожидалось, чтобы перечислить все боевики, опубликованные в сентябре 2010 года?
Ответы и комментарии:
Это не создаст архивы на основе дат, которые вы ищете, но даст вам виртуальный архив для пользовательских типов записей. Добавление даты должно быть просто вопросом настройки правил перезаписи (фактически, постоянные ссылки на основе даты могут работать как есть) ...
ПРИМЕР: у вас есть пользовательский тип «фильмов» и отдельный пост фильма «Унесенные ветром». Этот код предоставит вам структуру URL веб-сайта website.com/movies/gone-with-the-wind. Кроме того, зайдя на сайт website.com/movies, вы увидите список только фильмов (точно так же, как архив категорий, хотя он не будет вызывать шаблон archive.php для вывода, но будет форматировать вывод, как стандартный шаблон цикла index.php).
функция register_post_type_archives ($ post_type, $ base_path = '') {
global $ wp_rewrite;
if (! $ base_path) {
$ base_path = $ post_type;
}
$ rules = $ wp_rewrite-> generate_rewrite_rules ($ base_path);
$ rules [$ base_path. '/? $'] = 'index.php? paged = 1';
foreach ($ rules as $ regex => $ redirect) {
if (strpos ($ redirect, 'attachment =') == FALSE) {
$ redirect. = '& post_type ='. $ post_type;
if (0 for ($ i = 0; $ i $ redirect = str_replace ($ соответствует [0] [$ i], '$ соответствует ['. $ соответствует [1] [$ i]. ']', $ redirect);
}
}
}
add_rewrite_rule ($ regex, $ redirect, 'top');
}
}
вызовите эту функцию сразу после того, как вы сгенерировали свой тип записи:
register_post_type ('movies', $ args);
register_post_type_archives ( 'кино');
Затем, если вы хотите иметь возможность использовать пользовательские шаблоны для управления выводом этих квазиархивных списков, вы можете использовать это:
add_action ('template_redirect', 'post_type_templates');
function post_type_templates () {
$ post_type = get_query_var ('post_type');
if (! empty ($ post_type)) {
locate_template (array ("{$ post_type} .php", "index.php"), true);
умереть;
}
}
Теперь вы можете создать шаблон «movies.php» в своей теме и настроить вывод цикла по своему вкусу.
ОБНОВЛЕНИЕ: наличие архивных функций для пользовательских типов - это здорово, но я понял, что мне нужен способ доступа к ним. Очевидно, вы можете жестко кодировать кнопки где-нибудь, указывающие на слагов, но я сделал функцию для генерации навигационной панели wp3.0 со всеми моими пользовательскими типами. Прямо сейчас он порождает новую панель навигации и делает ее основной, но вы можете изменить ее на дополнительную или просто добавить элементы в существующую панель навигации. Примечание: навигационные ссылки будут работать только в том случае, если вы используете правила переписывания сверху.
function register_typenav () {
$ mainnav = wp_get_nav_menu_object ('Types Nav');
if (! $ mainnav) {
$ menu_id = wp_create_nav_menu ('Types Nav');
// элемент vav для каждого типа записи
$ types = get_post_types (array ('exclude_from_search' => false), 'objects');
foreach ($ types как $ type) {
if (! $ type -> _ builtin) {
wp_update_nav_menu_item ($ menu_id, 0, массив (
'menu-item-type' => 'custom',
'menu-item-title' => $ type-> label-> name,
'menu-item-url' => get_bloginfo ('url'). '/'. $ type-> rewrite ['slug']. '/',
'menu-item-status' => 'Опубликовать'
)
);
}
}
if ($ mainnav &&! has_nav_menu ('primary-menu')) {
$ theme = get_current_theme ();
$ mods = get_option ("mods_ $ theme");
$ key = key ($ mods ['nav_menu_locations']);
$ mods ['nav_menu_locations'] [$ key] = $ mainnav-> term_id;
update_option ("mods_ $ theme", $ mods);
}
}
add_action ('init', 'register_typenav');
Это отсутствующая ссылка: Усовершенствования пользовательских типов записей (CPT), которые заслуживают рассмотрения в 3.1.
http://wordpress.org/extend/plugins/custom-post-type-archives/
Сайт автора: http://ratvars.com/custom-post-type-archives/