web-dev-qa-db-ja.com

抜粋をナビゲーションメニューに追加する

各メニュー項目の後に、その下に抜粋ページを追加します。

だから私はこのように見えるメニューがあるなら:

  • ホーム
  • 接触

このようにページを抜粋してメニューに入れたいと思います。

  • ホーム
    • これはホームページの抜粋です
    • これはaboutページの抜粋です
  • 接触
    • これは連絡先ページの抜粋です

wp_nav_menu()呼び出しのパラメータを使ってこれを行うことができますか?それともカスタムのNav Walkerを作る必要がありますか?

1
mike

wp_nav_menu() を呼び出す walk_nav_menu_tree() を呼び出す Walker_Nav_Menuクラス

これらの関数にフックできるフィルターはいくつかありますが、nav_menu_item_titleクラスのWalker_Nav_Menuフィルターを見てみましょう。ここに源があります:

/**
* 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 );

だからあなたはそのようなフィルタを書くことができます:

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

私はこれをテストしていませんが、正しい方向に導くはずです。 $itemに含まれているものを調べます。

1
kingkool68

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