Réponses:
Cela est possible en filtrant wp_nav_menu_objects
, qui est l'endroit le plus simple pour vérifier quel élément est l'élément de menu actuel, car WordPress a déjà ajouté les classes pour vous .
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;
}
Vous pouvez maintenant utiliser cette nouvelle variable globale au lieu du titre normal. Exemple 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;
}
Bien sûr, cela ne fonctionne que si vous affichez le menu avant d'afficher le titre. Si vous en avez besoin plus tôt (peut-être dans l' <title>
élément?), Vous devez d' abord rendre le menu, puis l'afficher plus tard .
wpse16243_wp_nav_menu_objects
pour récupérer l'ID de menu actuel. Mais ce n'est pas cohérent. Basculer entre la page d'accueil et un élément de menu ne me donne pas toujours un élément de menu correct - c'est une sorte de "retard". Une suggestion sur la façon de récupérer l'ID de menu actuel?
wpse16243
? Je vois ce type de nom étrange assez commun et je me demande de quoi il s'agit. Avis de non-responsabilité: Wordpress noob.
WordPress Stack Exchange question number 16243
. Si les gens copient directement ce code, il n'entrera pas en conflit avec d'autres plugins qui pourraient partager les mêmes noms de fonction.
Vous pouvez utiliser wp_get_nav_menu_items()
. Voici un exemple 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;
}
Appelez ensuite le function
avec le nom d'emplacement du menu de navigation que vous souhaitez utiliser:
<?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;
}
Je ne suis pas sûr de suivre exactement.
Les «musées que nous soutenons» sont générés par un titre de publication, un titre de page, un titre de catégorie, etc. (ou, si vous utilisez un menu de navigation personnalisé, il peut s'agir d'un titre personnalisé).
Qu'essayez-vous de faire avec ce texte? Où essayez-vous de l'afficher? Je suppose que vous essayez de l'afficher sur la page d'index des catégories (puisque vous l'indiquez current-menu-item
)? Si oui, appelez simplement <?php single_cat_title(); ?>
pour afficher le titre de la catégorie.
Si vous avez besoin d'informations supplémentaires sur les catégories, vous pouvez utiliser quelque chose comme:
$cat = get_the_category();
$currentcat = $cat[0];
Ce qui met à disposition les variables suivantes:
$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 vous êtes dans un endroit autre que la catégorie Index page, vous devez passer la catId $ à ces fonctions.
ÉDITER:
Puisque vous avez indiqué que "Museums We Support" est un titre de menu personnalisé, l' approche la plus simple serait de renommer la catégorie de "Museums" en "Museums We Support" (remarque: vous pouvez laisser le slug museums
inchangé). Cependant, cela signifierait que "Museums We Support" serait affiché comme titre de catégorie partout où il pourrait être affiché dans votre modèle. Si cela est acceptable, alors ne vous inquiétez pas.
Sinon, vous devrez utiliser quelque chose comme wp_get_nav_menu_items()
( référence Codex ) afin de saisir le titre de l'élément de menu spécifique.
wp_get_nav_menu_items()
.