J'ai besoin d'ajouter quelque chose après chaque titre d'un menu spécifique appelé par wp_nav_menu ()
J'ai essayé
add_filter('wp_nav_title', 'testing_stuff');
avec
function testing_stuff() {
$item->title = $item->title . ' testing';
return $item->title;
}
sans succès, je ne suis pas assez familiarisé avec le hooking.
Mon but :
Donc, chaque élément du menu aura une donnée spécifique ajoutée à son contenu, des données que je pourrais manipuler depuis un champ personnalisé.
J'apprécierais tout indice qui me permettrait d'être sur la bonne voie.
Je vous remercie.
Ce qui suit fonctionne, mais avec les mises en garde suivantes. Il sera exécuté pour chaque menu} _, mais il sera ne sera pas exécuté pour wp_page_menu
, un rappel par défaut si un menu est introuvable.
Enfin, les éléments de menu ne sont pas des pages nécessaires - vous pouvez donc choisir une logique pour vérifier que l'élément de menu que vous traitez est une page/publication à partir de laquelle vous souhaitez obtenir les métadonnées.
Voici le code:
add_filter( 'wp_setup_nav_menu_item','my_item_setup' );
function my_item_setup($item) {
//Use the following to conduct logic;
$object_id = (int) $item->object_id; //object ID.
$object_type = $item->type; //E.g. 'post_type'
$object_type_label = $item->type_label; //E.g. 'post' or 'page';
//You could, optionally add classes to the menu item.
$item_class = $item->classes;
//Make sure $item_class is an array.
//Alter the class:
$item->classes= $item_class;
//Alter the title:
$pack_meta_value = get_post_meta($object_id, 'test', true );
if($pack_meta_value ){
$item->title = $item->title.'<span>' . $pack_meta_value . '</span>';
}
return $item;
}
Je serais intéressé de voir s'il existe un meilleur moyen de le faire, de préférence une méthode qui vous permet de vérifier à quel menu ces éléments sont destinés ...
J'ai déplacé ceci des commentaires. Si vous souhaitez limiter cette fonction à un menu particulier, vous pouvez essayer ce qui suit. Ceci n'a pas été testé .
Commencez par supprimer le add_filter
du code ci-dessus. Au lieu de cela, insérez dans une fonction qui est ajoutée à un hook précédent et ajoute conditionnellement le filtre (par exemple, lorsque le menu est 'primaire'):
add_filter( 'wp_nav_menu_args','add_my_setup_function' );
function add_my_setup_function($args) {
if( $args['theme_location'] == 'primary' ):
add_filter( 'wp_setup_nav_menu_item','my_item_setup' );
endif;
return $args;
}
Enfin, supprimez le filtre, une fois les éléments chargés, afin qu'il ne soit pas appelé pour les menus secondaires:
add_filter('wp_nav_menu_items','remove_my_setup_function', 10, 2);
function remove_my_setup_function( $nav, $args ) {
remove_filter( 'wp_setup_nav_menu_item', 'my_item_setup' );
return $nav;
}
Merci à Stephen: c’est la forme de travail du code (j’ai supprimé les options que je n’utilise pas dans la proposition originale). Je viens de tester s'il existe une valeur non vide à une valeur méta afin que je ne me répande pas vide au format HTML.
function packaging_setup($item) {
//Alter the title:
$ala_page = get_page_by_title( $item->title ); // getting the page itself
$ala_page_id = $ala_page->ID; // the page ID the item is refering to
$pack_meta_key = 'box_packaging_meta'; // my meta key
$pack_meta_value = get_post_meta($ala_page_id, $pack_meta_key, true ); // getting data
if (!empty($pack_meta_value)) { //so I do not add empty spans
$item->title = $item->title.'<span>' . $pack_meta_value . '</span>'; //altering
}
return $item;
}
add_filter('wp_setup_nav_menu_item', 'packaging_setup');