Шорткод возвращает экранированные HTML-теги
Чтобы представить ситуацию в контексте, я использую портал на WordPress, который поставляется в комплекте с древесиной и ветками.
У меня есть этот код, базовый, make-your-text-bold
короткий код
// Add Shortcode
function bold_text_shortcode( $atts , $content = null ) {
return '<strong>' . $content . '</strong>';
}
add_shortcode( 'b', 'bold_text_shortcode' );
А затем в моей частице веточки
{% filter shortcodes %}
[b] bold text [/b]
{% endfilter %}
Ожидаемым результатом будет жирный текст , верно?
Или в терминах HTML
<strong>bold text</strong>
Но то, что я получаю, это
<strong> bold text </strong>
Я прочитал короткие коды в кодексе wordpress, инструкции по шорткодированию древесины, Веточка экранируя, использовал функции php
html_entity_decode("<code>foo and bar@!</code>");
htmlentities("<code>foo and bar@!</code>");
И комбинация обоих , но без костей.
Я в тупике. Я не могу понять, где происходит побег. Сделал для этого учетную запись. Любая помощь будет очень признательна.
1 answers
Я бы рекомендовал использовать одинарные кавычки, если вы хотите включить какой-то HTML, также вам нужно что-то вернуть, иначе ничего не произойдет.
// 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');
Ваш шорткод WordPress будет следующим:
[bold-text]
Редактировать: Вам не нужны html_entity_decode
или htmlentities
только тогда, когда вы делаете что-то очень сложное или когда вы хотите вывести какой-то HTML.
Веточка-Удлинитель для Побега
Вы используете Twig, поэтому вам нужно проверить, включен ли у вас режим побега где-то.
Расширение побега
Расширение escaper добавляет автоматическое выходное экранирование в Twig. Он определяет тег, автоэскейп и фильтр raw.
При создании расширения escaper вы можете включить или выключить глобальную стратегию экранирования выходных данных:$escaper = new Twig_Extension_Escaper('html'); $twig->addExtension($escaper);
Если задано значение html, все переменные в шаблонах экранируются (с использованием стратегии экранирования html), за исключением тех, которые используют фильтр raw:
{{ article.to_html|raw }}
Вы также можно локально изменить режим экранирования с помощью тега autoescape:{% autoescape 'html' %} {{ var }} {{ var|raw }} {# var won't be escaped #} {{ var|escape }} {# var won't be double-escaped #} {% endautoescape %}
Пожалуйста, потерпите меня, я не использую Прутик, поэтому я мог бы только направлять вас в этом. Итак, в вашем случае вам нужно было бы сделать что-то вроде этого:
{% 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 %}
Редактировать 2:
Также смотрите цитату из стандартов кодирования WP PHP ниже и смотрите ссылку: https://make.wordpress.org/core/handbook/best-practices/coding-standards/php/
Одинарные и двойные кавычки #
Одинарные и двойные кавычки Используйте одинарные и двойные кавычки, когда это необходимо. Если вы ничего не оцениваете в строке, используйте одинарные кавычки. Вам почти никогда не придется убегать кавычки в строке, потому что вы можете просто чередовать свой стиль цитирования, например:
echo '<a href="/static/link" title="Yeah yeah!">Link name</a>'; echo "<a href='$link' title='$linktitle'>$linkname</a>";
Текст, который входит в атрибуты, должен быть пропущен через
esc_attr()
, чтобы одинарные или двойные кавычки не заканчивали значение атрибута , не делали HTML недействительным и не вызывали проблемы с безопасностью. См. Раздел Проверка данных в Кодекс для получения более подробной информации.