Shortcodes und Javascript-Einbindung

Lesezeit: 3 Minuten

Benutzer-Avatar
Matthias Ducorps

Ich habe ein Problem, bei dem der Shortcode nur wiedergegeben und nicht ausgeführt wird, dh hier ist, was ich tatsächlich auf meiner Webseite sehe:

[ajax_filter_posts per_page=”10″]

Hier ist meine function.php-Datei http://termbin.com/v6v5

//enqueue and localizing the Javascript.

function assets() {
    wp_enqueue_script('ajax_filter_post_mdu', get_template_directory_uri() . '/js/ajax-filter-posts.js', ['jquery'], null, true);
    wp_localize_script( 'ajax_filter_post_mdu', 'bobz', array(
        'nonce'    => wp_create_nonce( 'bobz' ),
        'ajax_url' => admin_url( 'admin-ajax.php' )
    ));
}
add_action('wp_enqueue_scripts', 'assets', 100);

So rufe ich den Shortcode in meiner persönlichen category-template.php auf http://termbin.com/8r3x

<?php echo do_shortcode('[ajax_filter_posts per_page="10"]'); ?>

Soweit ich weiß, mache ich etwas falsch, vielleicht im Zusammenhang mit der Enqueue und / oder der Lokalisierung, aber ich verstehe nicht, wo der Fehler liegt. Außerdem wird das Javascript ordnungsgemäß geladen, da sich der Browser nicht darüber beschwert, dass die Datei nicht gefunden wurde.

Auch in meiner Template-category.php-Datei rufe ich die Funktion zum Beispiel direkt so auf:

<?php   $a = array('post_tag', false, false);
        $pub_tag = vb_filter_posts_sc( $a );
        echo $pub_tag;
?>

Es funktioniert richtig…

Ich habe das 2016 WordPress eingebaute Theme gegabelt und von hier aus gehackt, habe ich irgendwo einen Konflikt?

Ich habe so viel wie möglich gesucht, aber ich kann es nicht klären.

  • Kann ich den Code sehen, in dem Sie den Shortcode verwendet haben, möglicherweise in Ihrer Vorlagendatei?

    – Jamu

    22. Dezember 2016 um 3:14 Uhr

  • Können Sie die wesentlichen Teile Ihres Codes in der Frage posten?

    – Panda

    22. Dezember 2016 um 3:25 Uhr

  • Ich habe meinen Beitrag mit dem richtigen Link für die Kategorievorlagendatei bearbeitet.

    – Matthieu Ducorps

    22. Dezember 2016 um 3:29 Uhr

  • @Panda Die Sache ist, ich bin mir nicht sicher, ob nur mein Code das Problem ist oder ein potenzieller Konflikt mit dem anderen Teil der Codes, deshalb habe ich den Teil übernommen, um alles zu posten. Aber hier ist der Stripdown, den ich Enqueue geben und lokalisieren kann pastebin.com/xRD0Janv

    – Matthieu Ducorps

    22. Dezember 2016 um 3:38 Uhr

  • @MatthieuDucorps Ja, es ist besser, es direkt in der Frage zu posten

    – Panda

    22. Dezember 2016 um 3:39 Uhr

Sie haben den Code nicht dort gepostet, wo Ihr Shortcode definiert ist.

Es würde in etwa so aussehen add_shortcode('ajax_filter_post', ...). Sie haben nicht angegeben, ob Sie den Shortcode bereitstellen oder ob er in einem Plugin enthalten ist, für das Sie nicht verantwortlich sind.

Sie können sehen, welche Shortcodes wie folgt definiert sind:

global $shortcode_tags;
print_r($shortcode_tags);

Das wird (sollte) Ihnen ein Array mit allen definierten Shortcodes geben. Wenn ajax_filter_post nicht auf dieser Liste erscheint, ist Ihr Shortcode nicht definiert.

Je nachdem, wo dieser Inhalt liegt, haben Sie möglicherweise ein Problem mit der Reihenfolge der Filter. Das heißt, was auch immer diesen Shortcode erweitert, kann nachlaufen wp_enqueue_scripts schon gelaufen. In diesem Fall gelangt Ihr JS-Code niemals zum Browser. Die Problemumgehung dafür wäre, das JS auf jeder Seite einzureihen und es nur zu verwenden, wenn etwas mit Ihrem Shortcode auftaucht. Der Shortcode könnte beispielsweise diesen HTML-Code ausgeben:

<div class="my-shortcode-target"></div>

Und jQuery etwa so:

jQuery(() => { (($) => {
    $('.my-shortcode-target').each(() => {
        var $target = $(this);
        $.ajax({'url': bobz.ajax_url, 'data': { 'nonce': bobz.nonce } }).done((data) => {
            // Here's where you can do stuff using what was returned from your AJAX call.
            target.append($('<span>').text(data.answer));
        });
    });
})(jQuery); });

Ihr Shortcode scheint etwas zu filtern, also würden Sie die DOM-Manipulation dort durch das Ding ersetzen, das entscheidet, was angezeigt wird und was nicht.

  • Perfekte Antwort! Jetzt habe ich es nicht “add_shortcode”!

    – Matthieu Ducorps

    20. November 2017 um 22:57 Uhr

1333590cookie-checkShortcodes und Javascript-Einbindung

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy