ページ上部のナビゲーションメニュー用とは別に、固定ページのサイドバー用のメニューを作成して、ウィジェットに設定してあることが前提条件になります。
テーマの「functions.php」に次の記述を追加してください。
function replace_to_own_menu($menu) { if( is_page( 'ページ名1' ) ) { preg_match('!<li[^>]+><a[^>]+>ページ名1</a>\s*<ul[^>]+>\r*\n\s*(?:.+?\r*\n\s*)+?</ul>\r*\n</li>\r*\n!u', $menu, $matches); return $matches[0]; } // 目的の固定ページが2つ以上ある場合は、目的のページ用に次の記述を追加します。 elseif( is_page( 'ページ名2' ) ) { preg_match('!<li[^>]+><a[^>]+>ページ名2</a>\s*<ul[^>]+>\r*\n\s*(?:.+?\r*\n\s*)+?</ul>\r*\n</li>\r*\n!u', $menu, $matches); return $matches[0]; } // ここまでで1つのページ用 // 任意のページ以外ではすべてのメニューを表示する場合に次の行のコメントアウトを解除します。(※メニューを表示しない場合はこのまま。) // return $menu; } add_filter('wp_nav_menu_メニュースラッグ_items', 'replace_to_own_menu');
※「メニュースラッグ」の箇所は、固定ページ用のウィジェットで指定したメニューのスラッグに置き換えます。
※メニュースラッグは、半角スペースがハイフン「-」に、大文字は小文字になります。(日本語だとエンコードされて長くなりますので、英数字のメニュー名に変更してから試してみてください。)
例えばメニューの名前が「Pages Menu」の場合、「pages-menu」になります。
add_filter('wp_nav_menu_pages-menu_items', 'replace_to_own_menu');