現在のメニュー項目のタイトルを変数として取得するにはどうすればよいですか?


10

current-menu-itemをphp変数として取得することは可能ですか?

「サポートしている美術館」というメニュー項目で博物館のカテゴリを一覧表示しているので、「サポートしている美術館」ビットを取得してどこかに表示しますか?

助けてくれてありがとう!

回答:


15

これはwp_nav_menu_objectsWordPressによってクラスがすでに追加されているため、現在のメニュー項目であるかどうかを確認する最も簡単な場所であるフィルタリングによって可能になります

add_filter( 'wp_nav_menu_objects', 'wpse16243_wp_nav_menu_objects' );
function wpse16243_wp_nav_menu_objects( $sorted_menu_items )
{
    foreach ( $sorted_menu_items as $menu_item ) {
        if ( $menu_item->current ) {
            $GLOBALS['wpse16243_title'] = $menu_item->title;
            break;
        }
    }
    return $sorted_menu_items;
}

これで、通常のタイトルの代わりにこの新しいグローバル変数を使用できます。簡単な例:

add_filter( 'single_cat_title', 'wpse16243_single_cat_title' );
function wpse16243_single_cat_title( $cat_title )
{
    if ( isset( $GLOBALS['wpse16243_title'] ) ) {
        return $GLOBALS['wpse16243_title'];
    }
    return $cat_title;
}

もちろん、これはタイトルを表示する前にメニューを表示する場合にのみ機能します。早い段階で(おそらく<title>要素内に?)必要な場合は、まずメニューをレンダリングしてから、後で表示する必要があります


こんにちはJan-$ menu_item->現在のアイテムの子の配列を作成する方法があるかどうか疑問に思いますか?いくつかのことを試したが、それほど遠くない。
v3nt 2011

あなたのフィルターの助けを借りてこれを管理しました-以下の答え。乾杯!
v3nt '19

Jan Fabry /を使用wpse16243_wp_nav_menu_objectsして、現在のメニューIDを取得しようとしました。しかし、それは一貫していません。ホームページとメニュー項目を切り替えると、常に正しいメニュー項目が表示されます-「遅れ」のようなものです。現在のメニューIDを取得する方法について何か提案はありますか?
スティーブン

関数名の前に付ける理由はありますwpse16243か?この奇妙な種類の名前はかなり一般的で、それが何なのか疑問に思います。免責事項:Wordpress noob。
スティーブンワトキンス

2
@Steve:一意のプレフィックス:のみWordPress Stack Exchange question number 16243。このコードを直接コピーしても、同じ関数名を共有する可能性のある他のプラグインと競合することはありません。
Jan Fabry

4

使用できますwp_get_nav_menu_items()。ここにサンプルがありますfunction

<?php
function my_get_menu_item_name( $loc ) {
    global $post;

    $locs = get_nav_menu_locations();

    $menu = wp_get_nav_menu_object( $locs[$loc] );

    if($menu) {

        $items = wp_get_nav_menu_items($menu->term_id);

        foreach ($items as $k => $v) {
            // Check if this menu item links to the current page
            if ($items[$k]->object_id == $post->ID) {
                $name = $items[$k]->title;
                break;
            }
        }

    }
    return $name;
}

次に、使用するナビゲーションメニューの場所名を指定functionしてを呼び出します。

<?php
$menu_name = my_get_menu_item_name( 'NAV_MENU_LOCATION_NAME' ); // eg. 'primary'

echo $menu_name;

2
add_filter( 'wp_nav_menu_objects', 'wpse16243_wp_nav_menu_objects' );
function wpse16243_wp_nav_menu_objects( $sorted_menu_items )
{
    foreach ( $sorted_menu_items as $menu_item ) {

        if ($menu_item->current ) {
            $GLOBALS['currentMenuTitle'] = $menu_item->title;
            $GLOBALS['currentMenuID'] = $menu_item->ID;



            break;
        }
    }


    return $sorted_menu_items;
}


function get_menu_items_children( $menu_item_id='' )
{   
    global $wpdb;

      //     AND meta_key='_menu_item_menu_item_parent'

    $myrows = $wpdb->get_results( "SELECT * FROM $wpdb->postmeta JOIN $wpdb->posts ON $wpdb->postmeta.post_id=$wpdb->posts.id WHERE meta_value = '".$menu_item_id."' AND meta_key='_menu_item_menu_item_parent' ORDER BY $wpdb->posts.menu_order ASC" );


    foreach ( $myrows as $menu_item ) {

        $sc = get_object_vars($menu_item);  

        $myrowsb = $wpdb->get_results( "SELECT * FROM $wpdb->postmeta WHERE post_id = '".$sc['post_id']."' AND meta_key='_menu_item_object_id' " );

        foreach ( $myrowsb as $menu_itemb ) {

            $scb = get_object_vars($menu_itemb);    
            $pmIDs[] = $scb['meta_value'];

        }

    }


    return $pmIDs;
}

0

正確に従うかどうかはわかりません。

「サポートしている美術館」は、投稿のタイトル、ページのタイトル、カテゴリのタイトルなどによって生成されます(または、カスタムナビゲーションメニューを使用している場合は、カスタムのタイトルである場合もあります)。

このテキストで何をしようとしていますか?どこに表示しようとしていますか?カテゴリインデックスページに表示しようとしていると思います(それがであることを示しているためcurrent-menu-item)?その場合は、呼び出し<?php single_cat_title(); ?>てカテゴリタイトルを出力します。

追加のカテゴリ情報が必要な場合は、次のようなものを使用できます。

$cat = get_the_category();
$currentcat = $cat[0];

これにより、次の変数が利用可能になります。

$currentcat=>cat_ID // Category ID
$currentcat=>cat_name // Category Name (Same as Title)
$currentcat=>category_nicename // Category Slug
$currentcat=>category_description // Category Description
$currentcat=>category_count // Category Count (# of Posts w/ this Category)

カテゴリインデックスページ以外の場所にいる場合は、これらの関数に$ catidを渡す必要があります。

編集:

「Museums We Support」はカスタムメニュータイトルであることを示したので、最も簡単な方法は、カテゴリの名前を「Museums」から「Museums We Support」museumsに変更することです(注:スラッグはそのままにしておくことができます)。ただし、そうすることで、「Museums We Support」がテンプレートのタイトルとして出力される場合は、カテゴリタイトルとして表示されます。それが許容できる場合は、心配する必要はありません。

それ以外の場合は、特定のメニュー項目のタイトルを取得するためにwp_get_nav_menu_items()Codex ref)のようなものを使用する必要があります。


ちょっとチップ-そのこのページ。bfami.modernactivity.co.uk/category/museumしたがって、基本的に猫は「博物館」ですが、メニューページで設定されたナビゲーションラベル(カスタムタイトル)である「MUSEUMS WE SUPPORT」を表示したいと思います。どういうわけかそれをつかむことが可能だと思いますか?
v3nt

それは役立ちます。私の回答の編集を参照してください。いくつかのオプションがありますwp_get_nav_menu_items()。カテゴリの名前を変更するか、を使用します。
チップベネット、

乾杯チップ-最後にカテゴリタイトルを変更しました!メニューラベルを取得する簡単な方法があると思いました...
v3nt
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.