¿Cómo obtener el título del current-menu-item como variable?
Esto es posible filtrando wp_nav_menu_objects
, que es el lugar más fácil para verificar qué elemento es el elemento actual del menú, porque WordPress ya ha agregado las clases por ti.
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;
}
Ahora puedes usar esta nueva variable global en lugar del título normal. Ejemplo simple:
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;
}
Por supuesto, esto solo funciona si muestras el menú antes de mostrar el título. Si lo necesitas antes (tal vez en el elemento <title>
?), deberías primero renderizar el menú y luego mostrarlo más tarde.

hola Jan - me pregunto si hay alguna manera de crear un array de los elementos hijos de $menu_item->current. Intenté varias cosas pero no logro avanzar mucho..!

Jan Fabry / Intenté usar wpse16243_wp_nav_menu_objects
para recuperar el ID del menú actual. Pero no es consistente. Cambiar entre la página de inicio y un elemento del menú no siempre me da el elemento correcto - como que "se retrasa". ¿Alguna sugerencia sobre cómo puedo recuperar el ID del menú actual?

¿Hay alguna razón por la que antepongas el nombre de la función con wpse16243
? Veo este tipo de nombre extraño bastante común y me pregunto de qué se trata. Aviso: novato en WordPress.

Puedes usar wp_get_nav_menu_items()
. Aquí tienes un ejemplo de 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) {
// Verifica si este elemento del menú enlaza a la página actual
if ($items[$k]->object_id == $post->ID) {
$name = $items[$k]->title;
break;
}
}
}
return $name;
}
Luego llama a la function
con el nombre de la ubicación del menú de navegación que deseas usar:
<?php
$menu_name = my_get_menu_item_name( 'NAV_MENU_LOCATION_NAME' ); // ej. 'primary'
echo $menu_name;

add_filter( 'wp_nav_menu_objects', 'wpse16243_wp_nav_menu_objects' );
function wpse16243_wp_nav_menu_objects( $sorted_menu_items )
{
// Recorre los elementos del menú ordenados
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;
// Y 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" );
// Recorre los resultados del menú
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' " );
// Recorre los elementos secundarios del menú
foreach ( $myrowsb as $menu_itemb ) {
$scb = get_object_vars($menu_itemb);
$pmIDs[] = $scb['meta_value'];
}
}
return $pmIDs;
}

No estoy seguro de entender exactamente.
El texto "Museos que Apoyamos" se genera a partir de un Título de Entrada, Título de Página, Título de Categoría, etc. (o, si estás usando un Menú de Navegación Personalizado, podría ser un Título personalizado).
¿Qué estás intentando hacer con este texto? ¿Dónde intentas mostrarlo? Asumo que estás intentando mostrarlo en la Página de Índice de Categoría (ya que indicas que es current-menu-item
)? Si es así, simplemente llama a <?php single_cat_title(); ?>
para mostrar el Título de la Categoría.
Si necesitas información adicional de la categoría, puedes usar algo como:
$cat = get_the_category();
$currentcat = $cat[0];
Lo cual hace disponibles las siguientes variables:
$currentcat=>cat_ID // ID de la Categoría
$currentcat=>cat_name // Nombre de la Categoría (Igual que el Título)
$currentcat=>category_nicename // Slug de la Categoría
$currentcat=>category_description // Descripción de la Categoría
$currentcat=>category_count // Conteo de la Categoría (# de Entradas con esta Categoría)
Si estás en algún lugar diferente a la Página de Índice de Categoría, necesitarás pasar el $catid a estas funciones.
EDITADO:
Como indicaste que "Museos que Apoyamos" es un Título de Menú personalizado, el enfoque más fácil sería renombrar la Categoría de "Museos" a "Museos que Apoyamos" (nota: puedes dejar el slug, museums
, sin cambios). Sin embargo, hacer esto significaría que "Museos que Apoyamos" se mostraría como el Título de Categoría dondequiera que se muestre en tu plantilla. Si eso es aceptable, entonces no hay problema.
De lo contrario, tendrás que usar algo como wp_get_nav_menu_items()
(Referencia del Codex) para obtener el Título del elemento específico del menú.

oye chip - es esta página ; http://bfami.modernactivity.co.uk/category/museum/ básicamente la categoría es 'museum' pero quiero mostrar 'MUSEUMS WE SUPPORT' que es la etiqueta de navegación (título personalizado) configurada en la página de menús. ¿Crees que es posible obtener eso de alguna manera?

Eso ayuda. Mira mi edición de la respuesta. Tienes un par de opciones: renombrar la Categoría, o usar wp_get_nav_menu_items()
.
