Должен ли я избежать функций WordPress, таких как the_title, the_excerpt, the_content

15

Я посмотрел на код, но я не мог увидеть какие-либо экранирующие функции, например, the_title the_content the_excerptи т. Д. Я, возможно, не правильно его читал. Нужно ли мне избежать этих функций в разработке темы, как:

esc_html ( the_title () )

Изменить: как указано в ответах ниже, приведенный выше код неверен независимо - код должен был прочитать esc_html ( get_the_title () )

byronyasgur
источник
Нет, эти функции уже санированы, поэтому делать это не обязательно. За исключением случаев, the_contentкогда вывод HTML из редактора TinyMCE, в который вы вводите. Это в большей степени зарезервировано для входных данных формы или данных, созданных на внешнем интерфейсе, например, вашими пользователями.
Адам

Ответы:

15

Экранирование полностью зависит от контекста, в котором вы используете функции. То, что безопасно для отображения внутри <h1>тегов, не обязательно безопасно для valueатрибута поля ввода, и даже это не обязательно будет безопасно в качестве hrefзначения атрибута ....

Короче - выполняйте дезинфекцию самостоятельно, когда вы ее выводите. Хотя в случае the_title ()или get_the_title (), esc_htmlэто не обязательно, поскольку WordPress применяет следующие функции:

Примечание: the_title печатает заголовок - поэтому esc_html ( the_title () )не будет работать. Точно так же the_contentпечатает контент (в любом случае вы ожидаете, что контент будет отображать HTML).

Стивен Харрис
источник
упс глупо меня ... да конечно esc_html (the_title ()) не будет работать. Спасибо за Ваш ответ.
byronyasgur
4
Связанный: выводить сообщение Название в HTML атрибут , использованиеthe_title_attribute()
Chip Bennett
6

Да и нет - зависит от того, хотите ли вы выводить html в этих функциях или нет. Если вы the_content(), например, экранируете , и он содержит <div>тег, этот тег будет фактически выводиться на страницу как &lt;div&gt;взамен.

Между прочим, если вы избежите вывода этих функций, вы захотите использовать их эквиваленты "get_" (например get_the_content()), так как эти функции напрямую отражают их вывод.

Джозеф Лиди
источник
0

Вы можете просто написать такую ​​функцию и подключить ее к фильтру the_title :

function my_escape_title( $title ){
    return esc_html( $title );
}
add_filter( 'the_title', 'my_escape_title' );
Vilius
источник