web-dev-qa-db-fra.com

Ajout d'un post extrait dans le menu de navigation

Après chaque élément de menu, je souhaite ajouter l'extrait de page en dessous.

Donc, si j'ai un menu qui ressemble à ceci:

  • Accueil
  • Sur
  • Contact

Je veux obtenir l'extrait de page dans le menu comme ceci:

  • Accueil
    • Ceci est l'extrait de la page d'accueil
  • Sur
    • Voici l'extrait de la page à propos
  • Contact
    • Ceci est l'extrait de la page de contact

Puis-je faire cela en utilisant les paramètres de l'appel wp_nav_menu()? Ou dois-je créer un Nav Walker personnalisé?

1
mike

wp_nav_menu () appelle walk_nav_menu_tree () qui appelle le Classe Walker_Nav_Menu .

Il existe quelques filtres auxquels vous pouvez vous connecter dans ces fonctions, mais je jetterais un coup d'œil au filtre nav_menu_item_title dans la classe Walker_Nav_Menu. Voici la source:

/**
* Filter a menu item's title.
*
* @since 4.4.0
*
* @param string $title The menu item's title.
* @param object $item  The current menu item.
* @param array  $args  An array of {@see wp_nav_menu()} arguments.
* @param int    $depth Depth of menu item. Used for padding.
*/
$title = apply_filters( 'nav_menu_item_title', $title, $item, $args, $depth );

Donc, vous pouvez écrire un filtre comme ceci:

function my_nav_menu_item_title( $title, $item, $args, $depth ) {
    $title .= '<span class="excerpt">' . $item->post_excerpt . '</span>';
    return $title;
}
add_filter( 'nav_menu_item_title', 'my_nav_menu_item_title', 10, 4 );

Je n'ai pas testé cela, mais cela devrait vous conduire dans la bonne direction. Je voudrais inspecter ce qui est contenu dans $item.

1
kingkool68

Résolu grâce à kingkool68

function my_nav_menu_item_title( $title, $item, $args, $depth ) {
  $pid = $item->object_id;

  $text = get_the_excerpt($pid);

  $title .= '<span class="excerpt">' . $text . '</span>';
  return $title;

}
1
user3869231