Відповіді:
Це можливо, фільтруючи 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()
( Codex ref ), щоб схопити заголовок для конкретного пункту меню.
wp_get_nav_menu_items()
.