web-dev-qa-db-fra.com

est-ce que l'action apparaît en dehors du menu?

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.)

1
Ina

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.

1
birgire