J'utilise la fonction "Ajouter du code supplémentaire à n'importe quel menu" de Bill Erickson:
<?php
/**
* Add Extra Code to Any Menu
* @author Bill Erickson
* @link http://www.billerickson.net/customizing-wordpress-menus/
*
* @param string $menu
* @param object $args
* @return string modified menu
*/
function be_menu_extras($menu, $args) {
//$extras = '<li class="right">Your extras go here</li>';
if ('secondary' == $args->theme_location)
//return $menu . $extras;
return $menu . '<li>' . do_action('posts_logout_link') . '</li>';
else
return $menu;
}
add_filter('wp_nav_menu_items','be_menu_extras', 10, 2);
pour insérer do_action('posts_logout_link');
à partir du plug-in Logout Password Protected Posts.
Quelqu'un peut-il expliquer pourquoi do_action
apparaît en dehors du $menu
.
Si j'utilise html, il apparaît à la fin du menu entouré des balises <li>
, comme il est supposé. (L'utilisation de $ extras semblait dupliquer le lien dans d'autres domaines.)
Je pense que la raison est echo
vs return
:
La fonction posts_logout_link
de
http://plugins.svn.wordpress.org/logout-password-protected-posts/trunk/logout.php
utilise echo.
Votre code renvoie donc à la fois des valeurs et des échos.
ps: vous pouvez envisager d'utiliser la mise en mémoire tampon de sortie pour résoudre ce problème
ob_start();
do_action('posts_logout_link');
$logout_link=ob_get_clean();
return $menu . '<li>' . $logout_link . '</li>';
ou modifiez les fonctions du code du plugin selon vos besoins et placez-les dans votre fichier functions.php.