Respuestas:
Esto es posible mediante el filtrado wp_nav_menu_objects
, que es el lugar más fácil para verificar qué elemento es el elemento del menú actual, porque WordPress ya agregó las clases por usted .
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 puede 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 visualiza el menú antes de mostrar el título. Si lo necesita antes (¿tal vez en el <title>
elemento?), Primero debe renderizar el menú y luego mostrarlo más tarde .
wpse16243_wp_nav_menu_objects
para recuperar la ID del menú actual. Pero no es consistente. Cambiar entre la página de inicio y un elemento de menú no siempre me da el elemento de menú correcto, es como "retrasos". ¿Alguna sugerencia sobre cómo puedo recuperar la ID del menú actual?
wpse16243
? Veo este extraño tipo de nombre bastante común y me pregunto de qué se trata. Descargo de responsabilidad: Wordpress noob.
WordPress Stack Exchange question number 16243
. Si las personas copian directamente este código, no entrará en conflicto con otros complementos que puedan compartir los mismos nombres de funciones.
Puedes usar wp_get_nav_menu_items()
. Aquí hay una muestra 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;
}
Luego llame al function
con el nombre de la ubicación del menú de navegación que desea utilizar:
<?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;
}
No estoy seguro de seguir exactamente.
Los "Museos que respaldamos" se generan mediante un Título de publicación, Título de página, Título de categoría, etc. (o, si está utilizando un Menú de navegación personalizado, podría ser un Título personalizado).
¿Qué intentas hacer con este texto? ¿Dónde intentas mostrarlo? ¿Supongo que está tratando de mostrarlo en la página de índice de categoría (ya que indica que es current-menu-item
)? Si es así, simplemente llame <?php single_cat_title(); ?>
para generar el Título de categoría.
Si necesita información de categoría adicional, puede usar algo como:
$cat = get_the_category();
$currentcat = $cat[0];
Lo que pone a disposición las siguientes variables:
$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)
Si estás en un lugar otro que la categoría Índice de Página, que tendrá que pasar el $ catid a estas funciones.
EDITAR:
Dado que indicó que "Museos que respaldamos" es un título de menú personalizado, el enfoque más sencillo sería cambiar el nombre de la categoría de "Museos" a "Museos que respaldamos" (nota: puede dejar la babosa museums
, sin cambios). Sin embargo, hacerlo significaría que los "Museos que apoyamos" se mostrarán como el Título de la categoría en cualquier otro lugar en el que pueda aparecer en su plantilla. Si eso es aceptable, entonces no se preocupe.
De lo contrario, tendrá que usar algo como wp_get_nav_menu_items()
( Ref. Codex ) para obtener el Título del elemento de menú específico.
wp_get_nav_menu_items()
.