it-swarm.com.de

Einschließlich Javascript für einen Shortcode

Ich erstelle ein Plugin, mit dem ein Benutzer einen Shortcode verwenden kann. Dieser Shortcode hängt von einer Reihe von Javascript ab, die beim Laden des Shortcodes vorhanden sein müssen.

Ich habe Probleme bei der Entscheidung, wann und wo das Javascript geladen werden soll. Teile des Codes, die der Shortcode ausspuckt, müssen vorhanden sein, sind aber für jQuery nicht verfügbar.

Gibt es eine spezielle Methode zum Laden und Anhängen von Skripten, auf die sich ein Shortcode stützt?

function build_total_search_method( $atts ) {

    $shorcode_php_function = include( dirname(__FILE__) . "/includes/total_search.php" );

    return $shorcode_php_function;

}
add_shortcode( 'total_search', 'build_total_search_method' );

Dies scheint zu funktionieren, druckt aber auch einen 1 auf die Seite. Ist diese Methode in Ordnung?

2
dcolumbus

Verwenden Sie wp_enqueue_script in Ihrem Shortcode-Handler. In WordPress> = 3.3 wird es der Seite in der Aktion wp_footer hinzugefügt. Übergeben Sie alle benötigten Daten von PHP an JavaScript über wp_localize_script .

4
Milo

Das wp_enqueue_script() include the wp_localize_script() ist die richtige Lösung. Analysieren Sie die Argumente des Shortcodes oder stellen Sie immer das Skript in die Warteschlange.

Wenn Sie viele Daten haben und diese in einem Json-Objekt verwenden. Einige Hinweise, die helfen sollen, wenn es zu Problemen kommt oder die direkt über JSON auf Lösungen verlinken. Die Funktion wp_localize_script() decodiert HTML-Entities, was wichtig ist, aber nicht immer die perfekte Lösung. Die Funktion verwendet json_encode(), was zu Problemen bei mehrdimensionalen Arrays im Zusammenhang mit der Dekodierung von Entitäten führen kann. Die alternative Lösung besteht darin, Daten wie im folgenden Beispiel als JSON-Objekt zu senden.

add_action( 'admin_enqueue_scripts', 'fb_print_scripts' );
function fb_print_scripts() {
    global $current_screen;

    if ( isset( $current_screen -> id ) && ! in_array( $current_screen -> id, array( 'post', 'page' ) ) )
        return;

    if ( is_plugin_active_for_network( plugin_basename( __FILE__ ) ) )
        $options = get_site_option( 'my_options_id' );
    else
        $options = get_option( 'my_options_id' );

    if ( ! $options )
        return;
    ?>
    <script type="text/javascript">
        var my_json_object = <?php echo json_encode( $options ); ?>;
    </script>
    <?php
}
0
bueltge