Вопрос или проблема
Вы использовали код этого вопроса (Показать контент после первого и второго абзаца), и он работает правильно для меня.
<?php
$paragraphAfter[1] = '<div>ПОСЛЕ ПЕРВОГО</div>'; //отображать после первого абзаца
$paragraphAfter[3] = '<div>ПОСЛЕ ТРЕТЬЕГО</div>'; //отображать после третьего абзаца
$paragraphAfter[5] = '<div>ПОСЛЕ ПЯТОГО</div>'; //отображать после пятого абзаца
$content = apply_filters( 'the_content', get_the_content() );
$content = explode("</p>", $content);
$count = count($content);
for ($i = 0; $i < $count; $i++ ) {
if ( array_key_exists($i, $paragraphAfter) ) {
echo $paragraphAfter[$i];
}
echo $content[$i] . "</p>";
} ?>
Я наблюдал и смешивал. Но я не нашел способа добавить вызов типа “get_template_part”. Я не распознаю часть get_template_part. Где ошибка или это невозможно сделать?
Измените это:
$paragraphAfter[1] = '<div> ПОСЛЕ ПЕРВОГО</div>';
На это:
$paragraphAfter[1] = '<div> get_template_part( 'ad-first' );</div>';
Я пытался сделать простой echo, но у меня ничего не получается
$paragraphAfter[1] = '<div> echo "Привет мир!"; </div>';
Я не могу заставить это работать 🙁
Любая помощь или советы приветствуются, спасибо
Я нашел способ вызвать get_template_part.
<?php
$paragraphAfter[1] = '<div><?php get_template_part( "part-related", "ad-first" ); ?></div>'; //отображать после первого абзаца
$paragraphAfter[3] = '<div><?php get_template_part( "part-related", "ad-third" ); ?></div>'; //отображать после третьего абзаца
$paragraphAfter[5] = '<div><?php get_template_part( "part-related", "ad-fifth" ); ?></div>'; //отображать после пятого абзаца
$content = apply_filters( 'the_content', get_the_content() );
$content = explode("</p>", $content);
$count = count($content);
for ($i = 0; $i < $count; $i++ ) {
if ( array_key_exists($i, $paragraphAfter) ) {
$string = eval('?>'.$paragraphAfter[$i].'<?php;'); // ЗАВЕРШИТЕ PHP, ПОТОМУ ЧТО СТРОКА ДЛЯ ОЦЕНКИ ОТКРЫВАЕТ ЕГО, А ЗАТЕМ, ОТКРОЙТЕ PHP, КАК СТРОКА ДЛЯ ОЦЕНКИ ЗАКРЫВАЕТ ЕГО
echo $string;
}
echo $content[$i] . "</p>";
}
?>
Я думаю, что это улучшенная версия предыдущей:
<?php
$paragraphAfter[1] = "get_template_part( 'part-related', 'ad-first' );";
$paragraphAfter[3] = "get_template_part( 'part-related', 'ad-third' );"; //отображать после пятого абзаца
$paragraphAfter[5] = "get_template_part( 'part-related', 'ad-fifth' );";
$content = apply_filters( 'the_content', get_the_content() );
$content = explode("</p>", $content);
$count = count($content);
for ($i = 0; $i < $count; $i++ ) {
if ( array_key_exists($i, $paragraphAfter) ) {
$string = eval($paragraphAfter[$i]); // Оцените строку
echo $string;
}
echo $content[$i] . "</p>";
}
?>
function insert_custom_content($content) {
$custom_content="<div>Контент для вставки</div>";
if (is_single() && ! is_admin()) {
return insert_after_paragraph($custom_content, 2, $content);
}
return $content;
}
add_filter('the_content', 'insert_custom_content');
function insert_after_paragraph($insertion, $paragraph_id, $content) {
$closing_p = '</p>';
$paragraphs = explode($closing_p, $content);
foreach ($paragraphs as $index => $paragraph) {
if (trim($paragraph)) {
$paragraphs[$index] .= $closing_p;
}
if ($paragraph_id == $index + 1) {
$paragraphs[$index] .= $insertion;
}
}
return implode('', $paragraphs);
}
Ответ или решение
Как использовать PHP для вставки контента после первого и второго абзаца
Данный вопрос касается вставки кастомизированного контента в WordPress после определенных абзацев. Ваша задача заключается в том, чтобы реализовать подобную функциональность, используя код на PHP. В этом ответе мы рассмотрим, как корректно вставлять фрагменты кода, включая вызовы функций get_template_part
, после заданных абзацев в содержимом поста.
Пошаговая инструкция по вставке контента
-
Определение массивов для вставки контента:
Для начала необходимо создать массив, в котором будет храниться контент, который необходимо вставить после первого, третьего и пятого абзацев. Пример кода на PHP:<?php $paragraphAfter[1] = "get_template_part( 'part-related', 'ad-first' );"; $paragraphAfter[3] = "get_template_part( 'part-related', 'ad-third' );"; $paragraphAfter[5] = "get_template_part( 'part-related', 'ad-fifth' );";
Здесь мы определяем, после каких абзацев будет вставлен определённый контент.
-
Получение и обработка содержимого:
Дальше необходимо получить содержимое поста и разделить его на абзацы для дальнейшей обработки:$content = apply_filters('the_content', get_the_content()); $content = explode("</p>", $content);
-
Цикл и вставка контента:
После этого мы проходим по каждому абзацу и проверяем, нужно ли вставить контент:foreach ($content as $index => $paragraph) { if (array_key_exists($index + 1, $paragraphAfter)) { ob_start(); // Запуск буфера вывода eval($paragraphAfter[$index + 1]); $insertion = ob_get_clean(); // Получаем содержимое буфера echo $insertion; // Выводим вставленный контент } echo $paragraph . "</p>"; // Выводим текущий абзац }
В данном коде используется функция
eval()
для выполнения кода, который мы сохранили в массиве$paragraphAfter
. Важно помнить, что использованиеeval()
может повлечь за собой риски безопасности, если вставляемый код не под контролем. -
Завершение работы с контентом:
Наконец, необходимо завершить обработку и вывести окончательный результат на экран или сохранить в базе данных.
Замечания по безопасности и производительности
- Безопасность: При использовании функции
eval()
стоит уделить особенное внимание безопасности кода. Убедитесь, что вставляемый код не может быть изменен пользователями или злоумышленниками. - Производительность: Следите за производительностью вашего сайта. Чрезмерное использование динамической вставки контента может повлиять на скорость загрузки страниц.
Альтернативный способ вставки контента
Также можно использовать фильтры WordPress без необходимости в eval()
. Например, вы можете создать функцию для вставки контента через фильтр the_content
, который будет вызываться для каждого поста или страницы:
function insert_custom_content($content) {
if (is_single() && !is_admin()) {
$custom_content = "</p><div>Контент для вставки после второго абзаца</div><p>";
return insert_after_paragraph($custom_content, 2, $content);
}
return $content;
}
add_filter('the_content', 'insert_custom_content');
function insert_after_paragraph($insertion, $paragraph_id, $content) {
$closing_p = '</p>';
$paragraphs = explode($closing_p, $content);
foreach ($paragraphs as $index => $paragraph) {
if (trim($paragraph)) {
$paragraphs[$index] .= $closing_p;
}
if ($paragraph_id === $index + 1) {
$paragraphs[$index] .= $insertion;
}
}
return implode('', $paragraphs);
}
Заключение
В итоге, вышеописанные подходы к вставке контента позволяют эффективно модифицировать содержимое постов в WordPress. Выбор между использование функции eval()
и фильтра the_content
зависит от ваших целей, но всегда учитывайте факторы безопасности и производительности. Подходите к разработке ответственно, и ваш код будет как эффективным, так и безопасным.