web-dev-qa-db-ja.com

メニュー構造順

私は1ページのウェブサイトを作っているように。これが私が以前に尋ねた質問です。

wp queryで特定のページを呼び出すパートII

私はすべてのページをWP_Queryで呼び出しているので、それは "order by = ASC"であり、 "menu_order"ではなく "メニュー構造による順序"と呼びたいのです。

例: screenshot

今度は私はトップに家をしたいと思いますサービスそしてそれからの声。メニュー構造によります。

どうやってそれを達成することができます..助けてください..事前にありがとう!

2
Hussy571

may WP_Queryはnav_menu_itemで使用できます。これは独自の投稿タイプであるためです。私はこれをやったことがありませんが、多分それはあなたがそれを必要とするように動作するでしょう、一撃の価値があります。他にも3つの可能性があります。

オプション1-ナビゲーションメニュー項目を取得する

wp_get_nav_menu_items() と呼ばれる関数があります。これはメニュー項目の配列を返し、ループして表示することができます。使用方法の例を次に示します。 「Gotcha!」がいくつかありますここに:

  • $item->IDは、現在のナビゲーション項目IDnotpost_idです。投稿IDは$item->object_idになりました。
  • $item->titleは現在のナビゲーション項目のタイトルであり、必ずしもpost_titleではありませんが、デフォルトでは変更および変更できます。投稿のタイトルを取得する最も信頼できる方法は、object_idを使用してget_the_title()関数に渡すことです。

$nav_items = wp_get_nav_menu_items( 'Main Menu', array(
    'order'                  => 'ASC',                  // List ASCending or DESCending
    'orderby'                => 'title',                // Order by your usual, menu_order, post_title, etc. Check WP_Query
    'post_type'              => 'nav_menu_item',        // To be honest, I'm not sure why this is an option, leave it be.
    'post_status'            => 'publish',              // If there are private / draft posts in our menu, don't show them
    'output'                 => ARRAY_A,                // Return an Array of Objects
    'output_key'             => 'menu_order',           // Not sure what this does
    'nopaging'               => true,                   // Not sure what this does
    'update_post_term_cache' => false                   // Not sure what this does
) );

if( ! empty( $nav_items ) ) {
    foreach( $nav_items as $item ) {
        echo "{$item->title} - " . get_the_title( $item->object_id );
        echo "<br />\n";
    }
}

オプション2-カスタムNav Walker

wp_nav_menu()を使用してメニューを表示し、 Custom Walker Function を渡して出力を変更できます。この例として、実際にメニューを物理メニューに追加せずに、メニュー項目の子ページを自動的にプルすることができます。 チャイルドウォーカークラス

オプション3-ページメニューの順序

通常、クライアント用のWebサイトを作成するとき、WordPressメニューがあり、ページ属性menu_orderで管理パネルのページ順序もミラーリングします。この方法では、 WP_Query およびorderby => 'menu_order'を使用してページをクエリできます

Image Found on codeholic.in


それ以外に、簡単にはorderby => 'My Menu'はありません。代わりの方法または回避策を見つける必要があります。

3
Howdy_McGee

Wp_query()の代わりに関数 wp_get_nav_menu_items() を使用して、メニュー構造順で特定のメニューからメニュー項目を取り出すことができます。それが済んだら、あなたは望むようにメニュー項目を一つずつループすることができます(タイプや他の情報でそれらをさらに絞り込むことを含みます)。これは、すべてのページがメニュー内にあることを前提としています(順序を理解するためにそれを使用している場合は、それらが必要になります)。

2
Amanda Giles