ショートコード出力にスクリプトを含めたいので、これを試しています。
function my_shortcode( $atts, $content = null ) {
extract(shortcode_atts(array(
'title' => '',
), $atts));
wp_enqueue_script('custom-script');
}
私はすでにスクリプトを登録しており、上記のショートコードが使用されていればそれをエンキューします。ただし、ショートコードが複数回使用されている場合でも、ファイルを1回だけインクルードしたいと思います。現在、ショートコードが複数回使用されている場合は、その都度スクリプトが含まれます。出来ますか?
WordPressのエンキューシステムは、同じスクリプトが何度も含まれないようにする必要があります。また、テストするときにも行います。たとえば、次の例ではコアスクリプトをキューに入れ、echo
sにカウンタを入れます。このショートコードを4回投稿すると、「0123」と表示されますが、メディアスクリプトは1回だけロードされます。私が試した他のいくつかのスクリプトでも同じテストが機能します。
function my_shortcode( $atts, $content = null ) {
extract(shortcode_atts(array(
'title' => '',
), $atts));
static $counter = 0;
echo $counter++;
wp_enqueue_script('wp-mediaelement');
}
add_shortcode('enq','my_shortcode');
同じスクリプトを何度もロードしている場合は、サイトに問題がありますが、どこから何が推測されるのかわかりません。
wp_script_is()
を使用して、スクリプトがキューに登録されているかどうかを判断し、次のように条件で使用できます。
if( ! wp_script_is( 'custom-script', 'enqueued' ) ) {
// your code here
}
wp_script_is()
は2つのパラメーターを取ります-$handle
および$list
-registered
、enqueued
/queue
、done
、またはto_do
; true
またはfalse
を返します。