Comment obtenir le titre de l'élément de menu actuel en tant que variable?
4 réponses
- votes
-
- 2011-05-04
Ceciestpossibleen filtrant
wp_nav_menu_objects
,quiest l’endroit leplus simplepour vérifier quel élémentest l’élément demenu actuel,car WordPress a déjà ajouté les classespour 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; }
Vouspouvezmaintenant utiliser cettenouvelle variableglobale au lieu dutitrenormal. 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,celane fonctionne que si vous affichez lemenu avant d'afficher letitre. Si vousen avezbesoinplustôt (peut-être dans l'élément
<title>
?),Vous devriez affichez d'abord lemenu,puis affichez-leplustard .This is possible by filtering
wp_nav_menu_objects
, which is the easiest place to check which item is the current menu item, because WordPress already added the classes for you.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; }
You can now use this new global variable instead of the normal title. Simple example:
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; }
Of course, this only works if you display the menu before you display the title. If you need it earlier (maybe in the
<title>
element?), you should first render the menu and then display it later.-
bonjour Jan - vous vous demandez simplement s'ilexiste unmoyen de créer untableau desenfants des éléments actuels de $menu_item->?J'aiessayéplusieurs chosesmaispastrès loin ..!hello Jan - just wondering if there's a way to create an array of the $menu_item->current items' children? Tried several things but not getting very far..!
- 0
- 2011-07-19
- v3nt
-
géré cela avec l'aide de votrefiltre - réponse ci-dessous.À votre santé!managed this with the help of your filter - answer below. Cheers!
- 0
- 2011-07-19
- v3nt
-
Jan Fabry/J'aiessayé d'utiliser `wpse16243_wp_nav_menu_objects`pour récupérer l'ID demenu actuel.Mais cen'estpas cohérent.Basculerentre lapage d'accueilet un élément demenune me donnepastoujours un élément demenu correct - c'est une sorte de "décalage".Une suggestion sur lafaçon dontje peux récupérer l'ID demenu actuel?Jan Fabry / I tried using `wpse16243_wp_nav_menu_objects` to retrieve current menu ID. But it's not consistant. Switching between home page and a menu item does nto always give me correct menu item - it kind of "lags". Any suggestion on how I can retrieve current menu ID?
- 0
- 2011-08-15
- Steven
-
Y a-t-il une raisonpour laquelle vousfaitesprécéder lenom de lafonctionpar `wpse16243`?Je vois cetype denom étrange assez communet jeme demande de quoiil s'agit.* Avertissement: Wordpressnoob. *Is there a reason why you preface the function name with `wpse16243`? I see this strange type of name fairly common and wondering what it's all about. *Disclaimer: Wordpress noob.*
- 0
- 2012-01-28
- Stephen Watkins
-
@Steve: Juste unpréfixe unique: `Numéro de question 16243 de WordPress Stack Exchange`.Si lesgens copient directement ce code,ilne serapasen conflit avec d'autresplugins quipourraientpartager lesmêmesnoms defonction.@Steve: Just a unique prefix: `WordPress Stack Exchange question number 16243`. If people directly copy this code, it won't conflict with other plugins that might share the same function names.
- 2
- 2012-01-29
- Jan Fabry
-
- 2014-07-26
Vouspouvez utiliser
wp_get_nav_menu_items()
. Voici unexemple defunction
:<?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; }
Appelezensuite la
function
avec le nom de l'emplacement du menu denavigation que vous souhaitez utiliser:<?php $menu_name = my_get_menu_item_name( 'NAV_MENU_LOCATION_NAME' ); // eg. 'primary' echo $menu_name;
You can use
wp_get_nav_menu_items()
. Here's a samplefunction
:<?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; }
Then call the
function
with the location name of the nav menu you wish to use:<?php $menu_name = my_get_menu_item_name( 'NAV_MENU_LOCATION_NAME' ); // eg. 'primary' echo $menu_name;
-
- 2011-07-19
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; }
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; }
-
- 2011-05-03
Jene suispas sûr de suivreexactement.
Les "Musées quenous soutenons" sontgénéréspar untitre d'article,untitre depage,untitre de catégorie,etc. (ou,si vous utilisez unmenu denavigationpersonnalisé,ilpeut s'agir d'untitrepersonnalisé).
Qu'essayez-vous defaire avec cetexte? Oùessayez-vous de l'afficher? Je suppose que vousessayez de l'afficher sur lapage d'index des catégories (puisque vousindiquez qu'il s'agit de
current-menu-item
)? Sitelest le cas,appelez simplement<?php single_cat_title(); ?>
pour afficher letitre de la catégorie.Si vous avezbesoin d'informations supplémentaires sur la catégorie,vouspouvez utiliser quelque chose comme:
$cat = get_the_category(); $currentcat = $cat[0];
Ce qui rend disponibles 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 quelquepart autre que lapage d'index des catégories,vous devrezpasser le $ catid à cesfonctions.
MODIFIER:
Puisque vous avezindiqué que "Musées quenous soutenons"est untitre demenupersonnalisé,l'approche laplus simple consisterait à renommer la catégorie de "Musées" à "Musées quenous soutenons "(note: vouspouvez laisser le slug,
museums
,inchangé). Cependant,cela signifierait que "Musées quenous soutenons" serait affiché commetitre de catégoriepartout oùilpourrait être affiché dans votremodèle. Si celaest acceptable,alorsne vousinquiétezpas.Sinon,vous devrez utiliser quelque chose comme
wp_get_nav_menu_items()
( Réf Codex ) afin de saisir letitre de l'élément demenu spécifique.I'm not sure I exactly follow.
The "Museums We Support" is generated by a Post Title, Page Title, Category Title, etc. (or, if you're using a Custom Navigation Menu, it could be a custom Title).
What are you trying to do with this text? Where are you trying to display it? I assume you're trying to display it on the Category Index Page (since you indicate it is
current-menu-item
)? If so, simply call<?php single_cat_title(); ?>
to output the Category Title.If you need additional category information, you can use something like:
$cat = get_the_category(); $currentcat = $cat[0];
Which makes available the following 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)
If you're somewhere other than the Category Index Page, you'll need to pass the $catid to these functions.
EDIT:
Since you indicated that "Museums We Support" is a custom Menu Title, the easiest approach would be to rename the Category from "Museums" to "Museums We Support" (note: you can leave the slug,
museums
, unchanged). However, doing so would mean that "Museums We Support" would be displayed as the Category Title wherever else it might be output in your template. If that is acceptable, then no worries.Otherwise, you will have to use something like
wp_get_nav_menu_items()
(Codex ref) in order to grab the Title for the specific menu item.-
hépuce - c'est cettepage;http://bfami.modernactivity.co.uk/category/museum/doncfondamentalement,le chatest «musée»maisje veuxmontrer le «MUSÉES NOUS SOUTENONS» quiest l'étiquette denavigation (titrepersonnalisé) définie dans lapage desmenus.Vouspensez qu'ilestpossible de saisir cela d'unemanière ou d'une autre?hey chip - its this page ; http://bfami.modernactivity.co.uk/category/museum/ so basically the cat is 'museum' but i want to show the 'MUSEUMS WE SUPPORT' which is the navigation label (custom title) set in the menus page. Think its possible to grab that somehow?
- 0
- 2011-05-03
- v3nt
-
Qui aide.Voirma réponsemodifier.Vous avez quelques options: renommer la catégorie ou utiliser `wp_get_nav_menu_items ()`.That helps. See my answer edit. You have a couple options: rename the Category, or use `wp_get_nav_menu_items()`.
- 0
- 2011-05-03
- Chip Bennett
-
cheers chip - vient de changer letitre de la catégorie à lafin!Jepensaisjuste qu'il y aurait unmoyenfacile de saisir l'étiquette dumenu ...cheers chip - just changed the category title in the end! Just thought there would be an easy way to grab the menu label...
- 0
- 2011-05-03
- v3nt
Est-ilpossible d'obtenir l'élément demenu couranten tant que variablephp?
Je répertorie la catégoriemusées via l'élément demenu "musées quenous soutenons",alorsj'aimerais obtenir lebit "musées quenous soutenons"et l'afficher quelquepart?
Toute aide appréciée!