以前は、PHPでオプションを取得するためにget_option()
関数を使用していました。
$width = get_option('my_width');
これはショートコード関数の中です。
今、私はJavaScriptのオプションが欲しいです。それは可能ですか?
ショートコード関数から、JSはwp_enqueue_script
で追加されます。
スクリプトに注入するパラメータの配列を定義します。
$script_params = array(
'myWidth' => get_option('my_width')
);
wp_localize_script
でスクリプトをローカライズします。
wp_localize_script( 'your-script-handle', 'scriptParams', $script_params );
scriptParams
はスクリプト内からアクセスできるjsオブジェクトです。
alert( scriptParams.myWidth ); // the value from the PHP get_option call in the js
受け入れられた答えを基にしていくつかの詳細を記入する...
wp_localize script
の直後にwp_enqueue_script
を呼び出す必要があります。だから、このようなもの:
function my_enqueue_scripts() {
wp_enqueue_script(
'myjs',
plugins_url( 'js/my.js', __FILE__)
);
$options = get_option( 'my_settings' );
$scriptData = array(
'width' => $options['my_width'],
);
wp_localize_script('myjs', 'my_options', $scriptData);
}
add_action( 'wp_enqueue_scripts', 'my_enqueue_scripts' );
それから、accept answerが示すように、my_optionsはJavaScriptオブジェクトになりました。
alert( my_options.width );
これが機能する方法は、wp_localise_script
がスクリプトを含める直前に、ページのHTMLにJavaScriptを埋め込むことです。
<script type='text/javascript'>
/* <![CDATA[ */
var my_options = {"width":"42"};
/* ]]> */
</script>
<script type='text/javascript' src='http://localhost/wp-content/plugins/my_plugin/js/myjs.js?ver=1.0'></script>
そのため、WordPressを使用して、サーバー上のPHPからHTML経由でブラウザ内のJavaScriptにデータを送信する方法があります。賢いでしょ?
(余談:$ optionsが定義されていないという問題がありました。$ optionsが定義される前にキューイングが行われていたためであると考えました WPドキュメントに記載のとおり 。 wp_enqueue_scriptのin_footer引数を使用してフッターにロードする(これはローカライゼーションデータも存在することを意味します)その後、それが本当に問題であるかどうかを確認するためにヘッダーに戻し、すべてがまだ機能していたので注意してください。 ).
wp_localize_script
と呼ばれるものを使うことがハックのように思えるならば、 WordPress docs は私たちがしていることは完全に許容できると言っていることに注意してください。
ローカライゼーションは主な用途ですが、通常はWordPressのサーバーサイドからしか取得できないデータをスクリプトで利用できるようにするために使用できます。