web-dev-qa-db-ja.com

現在のメニュー項目のタイトルを変数として取得する方法

現在のメニュー項目をphp変数として取得することは可能ですか?

「私たちがサポートする博物館」というメニュー項目でカテゴリー博物館を一覧表示しています。

どんな助けにも感謝します!

10
v3nt

これは、 WordPressが既にあなたに代わってクラスを追加した なので、どの項目が現在のメニュー項目であるかを確認する最も簡単な場所であるwp_nav_menu_objectsをフィルタリングすることによって可能です。

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>要素の中で?)、あなたは 最初にメニューをレンダリングし、それから後でそれを表示する とすべきです。

15
Jan Fabry

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;
4
Giraldi
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;
}
2
v3nt

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

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

このテキストで何をしようとしていますか?どこで表示しようとしていますか?カテゴリインデックスページに表示しようとしていると思います(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)

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

編集:

「Museums We Support」はカスタムメニュータイトルであることを示したため、easiestアプローチは 「Museums」から「Museums We Support」へのカテゴリ(注:スラッグmuseums、変更しないままにすることができます)。ただし、そうすることは、テンプレートで出力される可能性のある他の場所で、「Museums We Support」がカテゴリタイトルとして表示されることを意味します。それが許容できる場合、心配はありません。

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

0
Chip Bennett