Как правильно экранировать отфильтрованную переменную содержимого? - PullRequest
4 голосов
/ 02 мая 2019

Я запускаю плагин Theme Checker для моей темы Wordpress, и у меня есть следующие фрагменты кода:

1. Получите и покажите только первое встроенное видео из содержимого публикации:

<?php  $content = apply_filters( 'the_content', $post->post_content );

$embeds = get_media_embedded_in_content( $content );
$first_embedded = $embeds[0];
echo $first_embedded;
  ?>

2. Удалить любой встроенный контент из содержимого сообщения:

   <?php 
     $content = apply_filters( 'the_content', $post->post_content );
     $content = preg_replace("/(<iframe[^<]+<\/iframe>)/", '', $content);
     echo $content;
     ?>

Я получаю это предупреждение в теме проверки:

WARNING: Found echo $ in the file single.php. Possible data validation issues found. All dynamic data must be correctly escaped for the context where it is rendered.
Line 34: echo $first_embedded;
Line 76: echo $content;

Как я могу правильно избежать этих переменных? Я пробовал с:

<?php esc_html( $first_embedded); ?>

Но он просто печатает код HTML <iframe>...</iframe> моего встроенного видео, как если бы это была простая текстовая строка.

То же самое, если я сделаю это на $content:

 <?php esc_html( $content); ?>

Я новичок. Проблема в том, что мне нужны эти две переменные, потому что первая показывает видео в случае, если формат записи относится к типу видео, и заменяет миниатюру записи после первого встроенного видео.

Вторая функция также необходима для того, чтобы не показывать это видео в содержании поста.

1 Ответ

3 голосов
/ 06 мая 2019

Я нашел хороший обходной путь, который гладко работает в Theme Checker и, конечно, также на странице WordPress, используя html_entity_decode ()

Итак, я заменил:

echo $first_embedded;

С этой строкой:

echo html_entity_decode( esc_html( $first_embedded ) );

И

echo $content;

С:

echo html_entity_decode( esc_html($content) );

Функция html_entity_decode() преобразует сущности HTML в символы, что нам необходимо для отображения кода отфильтрованного содержимого публикации и отсутствия ошибок в Envato или WP Theme Checker.

...