Вопрос или проблема
Похоже, мне не хватает важной информации, чтобы заголовок типа постов работал правильно. Всё остальное работает нормально.
Моя текущая – простая – ситуация такова:
wordpress 3.8,
тема twentytwelve,
плагин wpizza (я его автор, так что этот вопрос действительно к нему относится), больше ничего
Я зарегистрировал пользовательский тип постов и таксономии wppizza следующим образом:
/*******************************************************
[регистрация пользовательского типа постов]
******************************************************/
public function wppizza_register_custom_posttypes(){
$labels = array(
'name' => __( 'Меню', $this->pluginLocale),
'singular_name' => __( 'Пункт меню WPPizza', $this->pluginLocale ),
'add_new' => __( 'Добавить новый', $this->pluginLocale ),
'add_new_item' => __( 'Добавить новый пункт меню',$this->pluginLocale ),
'edit' => __( 'Редактировать', $this->pluginLocale ),
'edit_item' => __( 'Редактировать пункт меню',$this->pluginLocale ),
'new_item' => __( 'Новый пункт меню',$this->pluginLocale ),
'all_items' => __( 'Все пункты меню',$this->pluginLocale ),
'view' => __( 'Просмотреть', $this->pluginLocale ),
'view_item' => __( 'Просмотреть пункты меню',$this->pluginLocale ),
'search_items' => __( 'Искать пункты меню',$this->pluginLocale ),
'not_found' => __( 'Пункты не найдены',$this->pluginLocale ),
'not_found_in_trash' => __( 'В корзине нет найденных пунктов',$this->pluginLocale ),
'parent_item_colon' => '',
'menu_name' => ''.$this->pluginName.''
);
/**добавить фильтр к меткам, если необходимо...**/
$labels = apply_filters('wppizza_cpt_lbls', $labels);
$args = array(
'labels' => $labels,
'description' => sprintf( __( 'Содержит данные пунктов меню %1$s', $this->pluginLocale ), $this->pluginName ),
'show_ui' => true,
'public' => true,
'menu_position' => 100,
'menu_icon' => defined('WPPIZZA_MENU_ICON') ? WPPIZZA_MENU_ICON : plugins_url( 'img/pizza_16.png', $this->pluginPath ),
'has_archive' => false,
'hierarchical' => false,
'supports' => array( 'title', 'editor', 'author','thumbnail','page-attributes','comments'),
'taxonomies' => array('') /* 'post_tag' например*/
);
/**добавить фильтр к аргументам, если необходимо**/
$args = apply_filters('wppizza_cpt_args', $args);
register_post_type( $this->pluginSlug, $args );
}
/*******************************************************
[регистрация таксономии + связанные функции таксономии]
******************************************************/
public function wppizza_register_custom_taxonomies(){
$options = $this->pluginOptions;
/**********************
при использовании постоянных ссылок, мы можем установить
родителя на выделенную страницу (админ->настройки)
.........
***********************/
$sel_category_parent=get_post($options['plugin_data']['category_parent_page'],ARRAY_A);
/**********************
........или использовать/установить значение по умолчанию
(необходимо, так как другие страницы не будут работать без этого, когда ссылку переопределят
**********************/
if($sel_category_parent['post_name']==''){
$sel_category_parent['post_name']=$this->pluginSlugCategoryTaxonomy;
}
// Добавьте новую таксономию, сделайте её иерархической (как категории)
$labels = array(
'name' => _x( 'Категории WPPizza', 'общее название таксономии' ),
'singular_name' => _x( 'Категория', 'единичное название таксономии' ),
'search_items' => __( 'Искать категории' ),
'all_items' => __( 'Все категории' ),
'parent_item' => __( 'Родительская категория' ),
'parent_item_colon' => __( 'Родительская категория:' ),
'edit_item' => __( 'Редактировать категорию' ),
'update_item' => __( 'Обновить категорию' ),
'add_new_item' => __( 'Добавить новую категорию' ),
'new_item_name' => __( 'Название новой категории' ),
'menu_name' => __( 'Категории' )
);
register_taxonomy($this->pluginSlugCategoryTaxonomy,array($this->pluginSlug), array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array( 'slug' => ''.$sel_category_parent['post_name'].'','hierarchical'=>true )
));
}
что всё работает нормально и в свою очередь выводит “Категории WPPizza” в админке в качестве заголовка при редактировании/добавлении категорий, связанных с cpt wppizza. Пока всё хорошо.
Проблема заключается в следующем:
Когда я перехожу к “нормальной категории” (т.е. http://www.domain.com/category/uncategorized/), заголовок выглядит так (что нормально)
Несортированное | sitetitle
Однако, когда я перехожу к пользовательскому типу постов/таксономии следующим образом http://www.domain.com/wppizza_menu/desserts/ (постоянная ссылка) или просто http://www.domain.com/?wppizza_menu=desserts, заголовок выглядит следующим образом
Десерты | Категории WPPizza | sitetitle
Что я хотел бы увидеть вместо этого:
Десерты | sitetitle
В общем, как мне убрать “Категории WPPizza” из заголовка в интерфейсе?
Надеюсь, вышеописанное имеет смысл. Готов предоставить больше кода, если это потребуется, конечно.
Я полагаю, что “Категории WPPizza” появляется из-за
'name' => _x( 'Категории WPPizza', 'общее название таксономии' )
А ваша проблема с URL возникает из-за того, что вы не установили слаг. Например:
'rewrite' => array( 'slug' => 'pizza_categories', 'with_front' => false ),
Вам нужно заменить слаг на что-то другое, так как вам нужно что-то вместо ‘wppizza_menu’ в URL. Вы можете изменить заголовок в шаблоне страницы, если просто хотите убрать “Категории WPPizza”, в противном случае измените общее название, и оно должно отразиться в заголовке.
Я бы рекомендовал использовать регулярное выражение и get_the_title();, если хотите полностью убрать название таксономии.
Ответ или решение
Для того чтобы убрать название таксономии "WPPizza Categories" из тега заголовка в вашем кастомном типе поста WPPizza, вам необходимо внести изменения в способ, которым WordPress генерирует заголовки для этой таксономии.
Решение
Вам нужно добавить фильтр для изменения заголовка страницы, когда пользователь просматривает записи вашего пользовательского типа, чтобы исключить название таксономии. Вот шаги, которые вам нужно выполнить:
-
Добавьте фильтр в вашу тему или плагин. Откройте файл вашего плагина или
functions.php
вашей темы и добавьте следующий код:add_filter('pre_get_document_title', 'custom_replace_taxonomy_title'); function custom_replace_taxonomy_title($title) { if (is_tax('slug_вашей_таксономии')) { // Замените 'slug_вашей_таксономии' на фактический слаг вашей таксономии $term = get_queried_object(); $title = $term->name . ' | ' . get_bloginfo('name'); // Здесь составляете заголовок как вам нужно } return $title; }
-
Замените ‘slug_вашей_таксономии’ на фактический слаг вашей таксономии, который вы указали при регистрации. Если вы использовали
$this->pluginSlugCategoryTaxonomy
, используйте этот слаг. -
Обновите ваш сайт. После внесения этих изменений перезагрузите ваш сайт и проверьте, изменился ли заголовок страницы для ваших записей WPPizza. Он должен теперь выглядеть аналогично:
<title>Desserts | sitetitle</title>
Объяснение
Функция custom_replace_taxonomy_title
проверяет, находится ли пользователь на странице вашей таксономии. Если это так, она получает объект текущей таксономии, которое содержит информацию о термине, и переопределяет заголовок с помощью названия термина и имени сайта.
Дополнительно
Если вы по-прежнему видите часть "WPPizza Categories", возможно, это связано с тем, что ваш плагин или тема имеют встроенные настройки, которые также управляют заголовками. В этом случае рекомендуется проверить их наличие в документации или обратиться к поддержке плагина.
Вы также можете использовать такие плагины, как Yoast SEO или All in One SEO, которые позволяют более гибко управлять мета-тегами заголовков для ваших страниц и постов.
Если у вас есть еще вопросы или сложности, не стесняйтесь обращаться за помощью!