現在のメニュー項目をphp変数として取得することは可能ですか?
「私たちがサポートする博物館」というメニュー項目でカテゴリー博物館を一覧表示しています。
どんな助けにも感謝します!
これは、 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>
要素の中で?)、あなたは 最初にメニューをレンダリングし、それから後でそれを表示する とすべきです。
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;
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;
}
正確に従うかどうかはわかりません。
「サポートする博物館」は、投稿タイトル、ページタイトル、カテゴリタイトルなどによって生成されます(または、カスタムナビゲーションメニューを使用している場合は、カスタムタイトルにすることもできます)。
このテキストで何をしようとしていますか?どこで表示しようとしていますか?カテゴリインデックスページに表示しようとしていると思います(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 )のようなものを使用する必要があります。