it-swarm.com.de

skript nur in die Warteschlange stellen, wenn es noch nicht in die Warteschlange gestellt wurde

Ich möchte ein Skript in eine Shortcode-Ausgabe einbinden, also versuche ich Folgendes:

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

    wp_enqueue_script('custom-script'); 

}

Ich habe das Skript bereits registriert und stelle es in eine Warteschlange, wenn der obige Shortcode verwendet wird. Ich möchte die Datei jedoch nur einmal einfügen, auch wenn der Shortcode mehrmals verwendet wird. Wenn der Shortcode derzeit mehrmals verwendet wird, enthält er das Skript für jedes Mal. Ist es möglich?

4
enam

Das WordPress-Enqueue-System sollte verhindern, dass dasselbe Skript mehrmals eingefügt wird, und dies geschieht, wenn ich es teste. Im Folgenden wird beispielsweise ein Core-Skript und echos ein Zähler in die Warteschlange gestellt. Wenn ich diesen Shortcode viermal in einen Post stecke, erhalte ich "0123", aber das Medienskript wird nur einmal geladen. Der gleiche Test funktioniert mit mehreren anderen Skripten, die ich ausprobiert habe.

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');

Wenn Sie immer wieder dasselbe Skript laden, liegt ein Problem mit Ihrer Site vor, aber ich bin mir nicht sicher, wo Sie anfangen sollen, zu raten, was.

10
s_ha_dum

Mit wp_script_is() können Sie feststellen, ob sich ein Skript in der Warteschlange befindet, und es unter folgenden Bedingungen verwenden:

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

wp_script_is() takes two parameters - $handle und $list - Letzterer kann sein: registered, enqueued/queue, done oder to_do; und es gibt true oder false zurück.

4
Nicolai