Ajax経由でWordpressメニューを動的にロードすることは可能ですか?
最善の解決策は、wp_nav_menu() を使用することです。
テーマで JavaScript を使用してメニューを動的に初期化する必要がある場合、初期化コードのパターンは次のようになります。
jQuery(function($) {
function initMainNavigation( container ) {
/* set up container... */
}
initMainNavigation( $( '.main-navigation' ) );
$( document ).on( 'customize-preview-menu-refreshed', function( e, params ) {
if ( 'primary' === params.wpNavMenuArgs.theme_location ) {
initMainNavigation( params.newContainer );
/* optionally sync a previous menu state from params.oldContainer... */
}
});
});
イベント ハンドラーに渡されるパラメーターは、次のプロパティで構成されます。
newContainer: Ajax から取得した新しいメニュー コンテナー要素を含む jQuery オブジェクト。これは、初期化するために操作するものです。
oldContainer:置き換えられたメニュー コンテナーの要素を保持する以前の jQuery オブジェクト。これは、(Twenty Fifteen のように) どのサブメニューが展開されているかなど、古いメニューに新しいメニューで保持する必要がある状態がある場合に役立ちます。
wpNavMenuArgs:wp_nav_menu()
template_location など、テンプレートで渡される引数の配列。
instanceNumber:wp_nav_menu()
コールが更新されるインデックス。
テーマで ajax リクエストを処理するカスタム ファイルを作成し、HTML 出力を返し、wp_nav_menu();
そのファイルを呼び出すことができます。
wp-content/themes/your-theme/ajax.php:
<?php wp_nav_menu(); ?>
シンプルですが、効率的です。ただし、セキュリティには注意してください。入力を検証し、入力しないでくださいeval()
。