私は現在、親ページのタイトルに基づいてナビゲーションメニューを取得しています。ページに親がない場合は、自分のタイトルになります。
global $post;
$page_title;
if ($post->post_parent) {
$page_title = get_the_title($post->post_parent);
} else {
$page_title = get_the_title($post);
}
$sidebar_title = 'Sidebar - '.$page_title;
wp_nav_menu(array( 'menu' => $sidebar_title));
最初に親をチェックするのではなく、最初にページに固有のメニューがあるかどうかをチェックしたいと思います。これは私が書いたものですが、うまくいきません。
global $post;
$page_title = get_the_title($post);
$sidebar_title = 'Sidebar - '.$page_title;
if ( !wp_nav_menu(array( 'menu' => $sidebar_title, 'echo' => false )) ) {
$page_title = get_the_title($post->post_parent);
$sidebar_title = 'Sidebar - '.$page_title;
}
wp_nav_menu(array( 'menu' => $sidebar_title ));
TLDR:メニューが存在するかどうかをどうやって確認しますか?
カスタムNavメニューが正しく実装されていると仮定します。
ナビゲーションメニューテーマ位置の登録:
register_nav_menus( array(
'parent_page' => "Parent Page",
'page_a' => "Page A",
'page_b' => "Page B", //etc
) );
wp_nav_menu()
を正しく呼び出す:
wp_nav_menu( array(
'theme_location' => 'page_a'
);
...次に、 has_nav_menu()
条件式 を使用して、テーマロケーションにメニューが割り当てられているかどうかを判断できます。
if ( has_nav_menu( 'page_a' ) ) {
// do something
}
あなたの特定のケースでは、あなたはそのようなことをすることができます:
if ( has_nav_menu( 'page_a' ) ) {
wp_nav_menu( array( 'theme_location' => 'page_a' ) );
} else {
wp_nav_menu( array( 'theme_location' => 'parent_page' ) );
}
私はOPと同じようなことをしていると思います。クライアント(wp adminユーザー)にMenus(WP-Admin> Appearance> Menus)を作成させます。一対一の関係。
代わりに、これらのメニューは現在のページの上位の祖先の名前に基づいて(カスタムウィジェットによって)動的に表示されます。その名前が既存のメニューの名前と一致する場合は、(htmlの前後に標準ウィジェットでラップされた)メニューを表示します。しかし、一致するものがなければ、何も出力しません。
そのため、ウィジェットの出力を開始する前に、メニューが存在するかどうかを確認する必要がありました。
$args = array(
'menu' => $menu_name, // from top-ancestor of current page
'echo' => 0, // true or 0
'theme_location' => '__fake', // fake value, to prevent display of 1st real menu
'fallback_cb' => false // prevent display of 1st real menu
);
$menu = wp_nav_menu( $args );
if ($menu){
# output
echo $before_widget; // Before
echo $before_title . $title . $after_title; // Title
echo $menu;
echo $after_widget; // After
}