Respostas:
Isso é possível com a filtragem wp_nav_menu_objects
, que é o local mais fácil para verificar qual item é o item de menu atual, porque o WordPress já adicionou as classes para você .
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;
}
Agora você pode usar essa nova variável global em vez do título normal. Exemplo simples:
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;
}
Obviamente, isso só funciona se você exibir o menu antes de exibir o título. Se você precisar mais cedo (talvez no <title>
elemento?), Primeiro renderize o menu e depois exiba-o mais tarde .
wpse16243_wp_nav_menu_objects
para recuperar o ID do menu atual. Mas não é consistente. Alternar entre a página inicial e um item de menu nem sempre me fornece o item de menu correto - é um tipo de "atraso". Alguma sugestão sobre como recuperar o ID do menu atual?
wpse16243
? Eu vejo esse tipo estranho de nome bastante comum e me perguntando o que é isso tudo. Isenção de responsabilidade: Wordpress noob.
WordPress Stack Exchange question number 16243
. Se as pessoas copiarem diretamente esse código, ele não entrará em conflito com outros plugins que podem compartilhar os mesmos nomes de função.
Você pode usar wp_get_nav_menu_items()
. Aqui está uma amostra 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;
}
Em seguida, chamar o function
com o nome do local do menu de navegação que você deseja usar:
<?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;
}
Não tenho certeza se sigo exatamente.
Os "Museus que apoiamos" são gerados por um título da postagem, título da página, título da categoria etc. (ou, se você estiver usando um menu de navegação personalizado, pode ser um título personalizado).
O que você está tentando fazer com este texto? Onde você está tentando exibi-lo? Suponho que você esteja tentando exibi-lo na página de índice de categoria (já que você indica current-menu-item
). Nesse caso, basta ligar <?php single_cat_title(); ?>
para gerar o título da categoria.
Se você precisar de informações adicionais sobre a categoria, poderá usar algo como:
$cat = get_the_category();
$currentcat = $cat[0];
O que disponibiliza as seguintes variáveis:
$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)
Se você estiver em outro lugar que não seja a página de índice de categoria, precisará passar o $ catid para essas funções.
EDITAR:
Como você indicou que "Museus que apoiamos" é um título de menu personalizado, a abordagem mais fácil seria renomear a categoria de "Museus" para "Museus que apoiamos" (nota: você pode deixar a lesma museums
inalterada). No entanto, isso significaria que "Museus que apoiamos" seria exibido como o título da categoria em qualquer outro lugar em que possa ser exibido no seu modelo. Se isso é aceitável, então não se preocupe.
Caso contrário, você precisará usar algo como wp_get_nav_menu_items()
( ref do Codex ) para obter o título do item de menu específico.
wp_get_nav_menu_items()
.