Отображение необработанных коротких кодов на странице WordPress

#php #wordpress

#php #wordpress

Вопрос:

Я использую тему WordPress Flatsome, которая использует скобки [] в визуальном редакторе для вывода содержимого. Я хотел бы вставить функцию в тему functions.php который отключил бы вывод содержимого и отображал бы шорткоды только в виде необработанного текста заключил бы его в предварительные теги, точно так же, как это:

конечный результат

В настоящее время я использую эту функцию для достижения результата, но это портит поток другого контента:

 function fv_render_raw_content($atts, $content = null)
{
    echo '<pre>' . htmlspecialchars($content) . '</pre>';
}
add_shortcode('render_raw_content', 'fv_render_raw_content');
 

Это приводит к тому, что заголовки внутри страницы (не обернутые функцией) меняют порядок без причины:

проблема

Я был бы очень признателен за любые идеи о том, что изменить, чтобы другой контент отображался в соответствии с визуальным редактором WordPress и не зависел от функции. Спасибо!

Комментарии:

1. Можете ли вы попробовать и посмотреть, что произойдет, если вы используете <code> вместо <pre> ?

2. Пробовал использовать <code> , не сработало. Заголовок все еще внизу : (

3. Трудно угадать решение, не видя ваш css и html, но вы можете попробовать это в своем css pre {display: inline}

4. Конечно, никаких проблем. Вот ссылка на страницу: ссылка

5. Я проверил вашу страницу, и заголовок h2 на самом деле находится под тегом pre, который заключен в тег span. Итак, это ожидаемый результат сгенерированного html.

Ответ №1:

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

Вы также можете подумать о том, чтобы обернуть вашу переменную $content вокруг какого-либо метода очистки содержимого, такого как sanitize_text_field, чтобы убедиться, что на страницу не добавляется дополнительная разметка с того места, где используется короткий код, и что пробелы также удаляются.

https://developer.wordpress.org/reference/functions/sanitize_text_field/

Еще одна вещь, которую вы можете сделать, это переработать свой короткий код таким образом, чтобы у вас был атрибут, который является текстом заголовка короткого кода. Затем это может быть отправлено в качестве параметра вашей функции шорткода, и если вы повторяете содержимое на странице, вы сначала должны сделать это, выведя заголовок, за которым следует содержимое, которое переносит эти <pre> теги.

Комментарии:

1. Спасибо за ваш совет! Однако я ничего не знаю о php, функция была создана кем-то другим. Не могли бы вы показать мне, как будет выглядеть скорректированная функция с возвратом вместо echo sanitize? Я не знаю, что заменить. Большое вам спасибо