web-dev-qa-db-ja.com

まだエンキューされていない場合のみ、スクリプトをエンキューします。

ショートコード出力にスクリプトを含めたいので、これを試しています。

function my_shortcode( $atts, $content = null ) {
    extract(shortcode_atts(array(
            'title'  => '',
           ), $atts));

    wp_enqueue_script('custom-script'); 

}

私はすでにスクリプトを登録しており、上記のショートコードが使用されていればそれをエンキューします。ただし、ショートコードが複数回使用されている場合でも、ファイルを1回だけインクルードしたいと思います。現在、ショートコードが複数回使用されている場合は、その都度スクリプトが含まれます。出来ますか?

4
enam

WordPressのエンキューシステムは、同じスクリプトが何度も含まれないようにする必要があります。また、テストするときにも行います。たとえば、次の例ではコアスクリプトをキューに入れ、echosにカウンタを入れます。このショートコードを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');

同じスクリプトを何度もロードしている場合は、サイトに問題がありますが、どこから何が推測されるのかわかりません。

10
s_ha_dum

wp_script_is() を使用して、スクリプトがキューに登録されているかどうかを判断し、次のように条件で使用できます。

if( ! wp_script_is( 'custom-script', 'enqueued' ) ) {
    // your code here
}

wp_script_is()2つのパラメーターを取ります-$handleおよび$list-registeredenqueued/queuedone、またはto_do; trueまたはfalseを返します。

4
Nicolai