web-dev-qa-db-ja.com

カスタムメニューにカテゴリと作者を自動的に追加する

私は数日かけてグーグルを回しながら、カテゴリや作者が作成されたらすぐに私のカスタムメニューに自動的に追加する方法を探しました(ページが自動的に追加されるのと同じ方法ですが)。

私は、新しいメニューが作成されるたびに、クライアントがメニューに移動して手動でカテゴリまたは作成者をメニューに追加する必要がないようにしたいと思っています。

何か案は?

1
Eric Mitjans

WP Navメニューに新しい項目を追加するには、フィルタフックwp_get_nav_menu_itemsを使用します。次の例では、ナビゲーションメニューに最後の投稿を追加します。

特定のIDを持つ投稿者からの各投稿を追加するのと同じように、カスタムフィルタにこのフィルタを追加することができます。投稿を追加するロジックは、以下のreplace_placeholder_nav_menu_item_with_latest_postの例のように、カスタム関数内にあります。

// Front end only, don't hack on the settings page
if ( ! is_admin() ) {
    // Hook in early to modify the menu
    // This is before the CSS "selected" classes are calculated
    add_filter( 'wp_get_nav_menu_items', 'replace_placeholder_nav_menu_item_with_latest_post', 10, 3 );
}

// Replaces a custom URL placeholder with the URL to the latest post
function replace_placeholder_nav_menu_item_with_latest_post( $items, $menu, $args ) {

    // Loop through the menu items looking for placeholder(s)
    foreach ( $items as $item ) {

        // Is this the placeholder we're looking for?
        if ( '#latestpost' != $item->url )
            continue;

        // Get the latest post
        $latestpost = get_posts( array(
            'numberposts' => 1,
        ) );

        if ( empty( $latestpost ) )
            continue;

        // Replace the placeholder with the real URL
        $item->url = get_permalink( $latestpost[0]->ID );
    }

    // Return the modified (or maybe unmodified) menu items array
    return $items;
}

ソースの例はViper007Bondからです。コードの詳細については 投稿 を参照してください。

1
bueltge