web-dev-qa-db-de.com

Der Shortcode gibt mit Escapezeichen versehene HTML-Tags zurück

Um die Dinge in einen Zusammenhang zu bringen, verwende ich Gantry für WordPress, das mit Timber und Twig gebündelt ist.

Ich habe diesen Code, Basic, make-your-text-bold shortcode

// Add Shortcode
function bold_text_shortcode( $atts , $content = null ) {
    return '<strong>' . $content . '</strong>';
}
add_shortcode( 'b', 'bold_text_shortcode' );

und dann in meinem Zweig Teilchen,

  {% filter shortcodes %}
  [b] bold text [/b]
  {% endfilter %}

das erwartete Ergebnis wäre fetter Text , richtig?

oder in HTML-Begriffen

<strong>bold text</strong>

aber was ich bekomme ist

&lt;strong&gt; bold text &lt;/strong&gt;

Ich habe gelesen Shortcodes auf dem WordPress-Codex , Holz Shortcode How-tos , Zweig entkommen , die PHP-Funktionen verwendet

html_entity_decode("<code>foo and [email protected]!</code>");
htmlentities("<code>foo and [email protected]!</code>");

und eine Kombination von beiden , aber keine Würfel.

Ich bin mit meinem Latein am Ende. Ich kann nicht herausfinden, wo die Flucht geschieht. Erstellte einen Account dafür. Jede Hilfe wird sehr geschätzt.

1
Kevin

Ich würde die Verwendung von einfachen Anführungszeichen empfehlen, wenn Sie HTML-Code einfügen möchten. Außerdem müssen Sie etwas zurückgeben, da sonst nichts passiert.

// WP Shortcode
function text_shortcode() {
    return '<strong>bold text:</strong> <a href="https://wordpress.stackexchange.com/questions/318934/shortcode-returns-escaped-html-tags">See wordpress.stackexchange.com</a>';
}
add_shortcode('bold-text', 'text_shortcode');

Ihr WordPress-Shortcode wäre:

[bold-text]

Edit: Sie brauchen html_entity_decode oder htmlentities nur dann nicht, wenn Sie etwas sehr Komplexes tun oder wenn Sie HTML ausgeben möchten.

The Escaper Extension Twig
Sie verwenden Twig, also müssen Sie überprüfen, ob Sie irgendwo den Escape-Modus aktiviert haben.

Escaper-Erweiterung

Die Escaper-Erweiterung fügt Twig eine automatische Ausgabe hinzu. Es definiert ein Tag, eine automatische Flucht und einen Filter, RAW.
Beim Erstellen der Escaper-Erweiterung können Sie die globale Ausgabe-Escape-Strategie ein- oder ausschalten:

$escaper = new Twig_Extension_Escaper('html');
$twig->addExtension($escaper);


Wenn auf html gesetzt, werden alle Variablen in Vorlagen mit Ausnahme derjenigen, die den Rohfilter verwenden, mit Escapezeichen versehen (unter Verwendung der HTML-Escapezeichen-Strategie):

{{ article.to_html|raw }}


Sie können den Escape-Modus auch lokal ändern, indem Sie das AutoScape-Tag verwenden:

{% autoescape 'html' %}
    {{ var }}
    {{ var|raw }}      {# var won't be escaped #}
    {{ var|escape }}   {# var won't be double-escaped #}
{% endautoescape %}

Bitte tragen Sie mit mir, ich benutze Twig nicht, also könnte ich Sie nur auf diesem führen. In Ihrem Fall müssten Sie also Folgendes tun:

{% autoescape %}
    {% set hello = '<strong>Hello</strong>' %}
    {% set hola = '<strong>Hola</strong>' %}

    {{ false ? '<strong>Hola</strong>' : hello|raw }}
    does not render the same as
    {{ false ? hola : hello|raw }}
    but renders the same as
    {{ (false ? hola : hello)|raw }}
{% endautoescape %}

Edit 2:
Siehe auch Zitat WP PHP Codierungsstandards unten und Link: https://make.wordpress.org/core/handbook/best-practices/coding -standards/php/

Einzelne und doppelte Anführungszeichen #

Einfache und doppelte Anführungszeichen Verwenden Sie gegebenenfalls einfache und doppelte Anführungszeichen. Wenn Sie nichts in der Zeichenfolge auswerten, verwenden Sie einfache Anführungszeichen. Sie sollten Anführungszeichen in einer Zeichenfolge so gut wie nie umgehen müssen, da Sie einfach Ihren Anführungszeichenstil wie folgt ändern können:

echo '<a href="/static/link" title="Yeah yeah!">Link name</a>';
echo "<a href='$link' title='$linktitle'>$linkname</a>";

Text, der in Attribute eingeht, sollte esc_attr() durchlaufen werden, damit einfache oder doppelte Anführungszeichen den Attributwert nicht beenden und den HTML-Code ungültig machen und ein Sicherheitsproblem verursachen. Weitere Informationen finden Sie unter Datenüberprüfung im Codex.

0
Remzi Cavdar