Ответы:
Это возможно с помощью фильтрации wp_nav_menu_objects
, которая является самым простым местом для проверки того, какой элемент является текущим элементом меню, потому что WordPress уже добавил классы для вас .
add_filter( 'wp_nav_menu_objects', 'wpse16243_wp_nav_menu_objects' );
function wpse16243_wp_nav_menu_objects( $sorted_menu_items )
{
foreach ( $sorted_menu_items as $menu_item ) {
if ( $menu_item->current ) {
$GLOBALS['wpse16243_title'] = $menu_item->title;
break;
}
}
return $sorted_menu_items;
}
Теперь вы можете использовать эту новую глобальную переменную вместо обычного заголовка. Простой пример:
add_filter( 'single_cat_title', 'wpse16243_single_cat_title' );
function wpse16243_single_cat_title( $cat_title )
{
if ( isset( $GLOBALS['wpse16243_title'] ) ) {
return $GLOBALS['wpse16243_title'];
}
return $cat_title;
}
Конечно, это работает, только если вы отображаете меню до отображения заголовка. Если вам это нужно раньше (возможно, в <title>
элементе?), Вы должны сначала отобразить меню, а затем отобразить его позже .
wpse16243_wp_nav_menu_objects
чтобы получить текущий идентификатор меню. Но это не соответствует. Переключение между домашней страницей и пунктом меню не всегда дает мне правильный пункт меню - это своего рода «лаги». Любое предложение о том, как я могу получить текущий идентификатор меню?
wpse16243
? Я вижу этот странный тип имени довольно распространенным и удивляюсь, что это такое. Отказ от ответственности: Wordpress Noob.
WordPress Stack Exchange question number 16243
. Если люди напрямую копируют этот код, он не будет конфликтовать с другими плагинами, которые могут иметь те же имена функций.
Вы можете использовать wp_get_nav_menu_items()
. Вот пример function
:
<?php
function my_get_menu_item_name( $loc ) {
global $post;
$locs = get_nav_menu_locations();
$menu = wp_get_nav_menu_object( $locs[$loc] );
if($menu) {
$items = wp_get_nav_menu_items($menu->term_id);
foreach ($items as $k => $v) {
// Check if this menu item links to the current page
if ($items[$k]->object_id == $post->ID) {
$name = $items[$k]->title;
break;
}
}
}
return $name;
}
Затем вызовите function
с названием места в меню нав вы хотите использовать:
<?php
$menu_name = my_get_menu_item_name( 'NAV_MENU_LOCATION_NAME' ); // eg. 'primary'
echo $menu_name;
add_filter( 'wp_nav_menu_objects', 'wpse16243_wp_nav_menu_objects' );
function wpse16243_wp_nav_menu_objects( $sorted_menu_items )
{
foreach ( $sorted_menu_items as $menu_item ) {
if ($menu_item->current ) {
$GLOBALS['currentMenuTitle'] = $menu_item->title;
$GLOBALS['currentMenuID'] = $menu_item->ID;
break;
}
}
return $sorted_menu_items;
}
function get_menu_items_children( $menu_item_id='' )
{
global $wpdb;
// AND meta_key='_menu_item_menu_item_parent'
$myrows = $wpdb->get_results( "SELECT * FROM $wpdb->postmeta JOIN $wpdb->posts ON $wpdb->postmeta.post_id=$wpdb->posts.id WHERE meta_value = '".$menu_item_id."' AND meta_key='_menu_item_menu_item_parent' ORDER BY $wpdb->posts.menu_order ASC" );
foreach ( $myrows as $menu_item ) {
$sc = get_object_vars($menu_item);
$myrowsb = $wpdb->get_results( "SELECT * FROM $wpdb->postmeta WHERE post_id = '".$sc['post_id']."' AND meta_key='_menu_item_object_id' " );
foreach ( $myrowsb as $menu_itemb ) {
$scb = get_object_vars($menu_itemb);
$pmIDs[] = $scb['meta_value'];
}
}
return $pmIDs;
}
Я не уверен, что точно следую.
«Музеи, которые мы поддерживаем» генерируется заголовком поста, заголовком страницы, заголовком категории и т. Д. (Или, если вы используете пользовательское меню навигации, это может быть пользовательский заголовок).
Что вы пытаетесь сделать с этим текстом? Где вы пытаетесь это отобразить? Я предполагаю, что вы пытаетесь отобразить его на странице указателя категорий (поскольку вы указываете, что это так current-menu-item
)? Если это так, просто позвоните, <?php single_cat_title(); ?>
чтобы вывести название категории.
Если вам нужна дополнительная информация о категории, вы можете использовать что-то вроде:
$cat = get_the_category();
$currentcat = $cat[0];
Что делает доступными следующие переменные:
$currentcat=>cat_ID // Category ID
$currentcat=>cat_name // Category Name (Same as Title)
$currentcat=>category_nicename // Category Slug
$currentcat=>category_description // Category Description
$currentcat=>category_count // Category Count (# of Posts w/ this Category)
Если вы где - то другое , чем Категория Index Page, вам необходимо пройти $ CATID к этим функциям.
РЕДАКТИРОВАТЬ:
Поскольку вы указали, что «Музеи, которые мы поддерживаем» - это пользовательский заголовок меню, самым простым способом было бы переименовать категорию из «Музеев» в «Музеи, которые мы поддерживаем» (примечание: вы можете оставить слаг museums
, без изменений). Однако это будет означать, что «Музеи, которые мы поддерживаем» будет отображаться в качестве заголовка категории, где бы он ни выводился в вашем шаблоне. Если это приемлемо, то не беспокойтесь.
В противном случае вам нужно будет использовать что-то вроде wp_get_nav_menu_items()
( ссылка на Кодекс ), чтобы получить заголовок для определенного пункта меню.
wp_get_nav_menu_items()
.