Вопрос или проблема
Мне нужно выполнить короткий код на тысячи публикаций, которые еще не содержат этот короткий код, так как я добавил некоторые вручную.
Я использую другую функцию для добавления открывающего короткого кода после второго абзаца, что работает.
Я написал этот код, который выводит закрывающий короткий код после содержимого, но он не выполняется.
add_filter( 'the_content', 'closing_shortcode' );
function closing_shortcode( $content ) {
if( !has_shortcode( $content, 'members') )
return $content;
$close_shortcode = do_shortcode('[/member]');
return $content . $close_shortcode;
}
Может быть, мне нужно использовать echo do_shortcode.
Может быть, я неправильно понимаю, что вы делаете, и прошу прощения, если это так, но…
- Похоже, вы возвращаете содержимое, если пост уже НЕ имеет одного, что кажется неправильным в соответствии с моим пониманием вашей проблемы.
- Судя по всему, вы пытаетесь выполнить сломанный (незаконченнный) короткий код.
Я неправильно понял оригинальный вопрос, но исходя из комментариев ниже, вам нужно выполнить do_shortcode()
на всем блоке содержимого, а не только на закрывающем разделе.
Я думаю, ваш код должен выглядеть так:
add_filter( 'the_content', 'closing_shortcode' );
function closing_shortcode( $content ) {
// возвращаем, если короткий код уже был добавлен
// Примечание: ! был удален
if( has_shortcode( $content, 'members') )
return $content;
// Добавляем закрывающий тег короткого кода
$close_shortcode="[/member]";
// и выполняем do_shortcode() на всем блоке содержимого
return do_shortcode($content . $close_shortcode);
}
Если это не сработает, потребуется немного манипуляций с основными системами содержимого и выполнения коротких кодов, и я займусь этим позже, когда у меня будет больше времени.
Ответ или решение
Для решения вашей задачи по добавлению закрывающего шорткода в контент тысяч постов, можно воспользоваться функционалом WordPress. Давайте рассмотрим правильный способ реализации этой задачи.
Ваше исходное решение имеет несколько недочетов. Основная ошибка заключается в условии проверки наличия шорткода и в том, как вы собираетесь добавлять и обрабатывать шорткоды в контенте. Вот пошаговое руководство по исправлению вашей функции.
1. Проверка наличия шорткода
В вашем первоначальном коде вы возвращали контент, если он не содержит нужный шорткод. Это ошибочное условие. Вам нужно добавлять закрывающий шорткод только тогда, когда шорткод открывающего элемента уже присутствует.
2. Правильная реализация функции
Вот исправленный код, который вы можете использовать для добавления закрывающего шорткода:
add_filter('the_content', 'closing_shortcode');
function closing_shortcode($content) {
// Проверяем, есть ли уже открывающий шорткод
if (!has_shortcode($content, 'members')) {
return $content; // Если нет открывающего шорткода, возвращаем оригинальный контент
}
// Добавляем закрывающий шорткод
$close_shortcode = "[/member]";
// Обрабатываем контент с помощью do_shortcode() и добавляем закрывающий шорткод
return do_shortcode($content . $close_shortcode);
}
3. Как работает код
- Фильтр: Функция добавляется к фильтру
the_content
, который позволяет изменять контент поста перед его выводом на экран. - Проверка шорткода:
has_shortcode($content, 'members')
проверяет, существует ли открывающий шорткодmembers
в контенте. - Добавление закрывающего шорткода: Если проверка подтверждает наличие шорткода, к контенту добавляется закрывающий шорткод
[/member]
. - Выполнение шорткода: Использование
do_shortcode()
позволяет выполнить все шорткоды в контенте, включая добавленный закрывающий шорткод.
4. Альтернативные пути
Если ваш контент включает в себя динамически генерируемые данные или вы хотите более изысканный контроль над порядком исполнения шорткодов, вы можете рассмотреть возможность написания отдельной функции, которая будет обрабатывать полный контент и работать с различными шорткодами поочередно. Это может потребовать больше кода, но даст больше гибкости.
5. Рекомендации по оптимизации
Не забудьте протестировать изменения на тестовой среде, чтобы убедиться в корректности их работы без риска повреждения живой версии вашего сайта. Если вы работаете с большим количеством постов, возможно использование WP-CLI для пакетной обработки может сэкономить ваше время и ресурсы.
Заключение
Используя предложенный код, вы сможете успешно добавлять закрывающий шорткод в ваши посты, при этом гарантируя, что он будет добавлен только к тем постам, где есть соответствующий открывающий шорткод. Это обеспечит корректность работы всей системы шорткодов в вашем контенте.