Как php-содержимое после первого и второго абзаца

Вопрос или проблема

Вы использовали код этого вопроса (Показать контент после первого и второго абзаца), и он работает правильно для меня.

    <?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, после заданных абзацев в содержимом поста.

Пошаговая инструкция по вставке контента

  1. Определение массивов для вставки контента:
    Для начала необходимо создать массив, в котором будет храниться контент, который необходимо вставить после первого, третьего и пятого абзацев. Пример кода на 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' );";

    Здесь мы определяем, после каких абзацев будет вставлен определённый контент.

  2. Получение и обработка содержимого:
    Дальше необходимо получить содержимое поста и разделить его на абзацы для дальнейшей обработки:

    $content = apply_filters('the_content', get_the_content());
    $content = explode("</p>", $content);
  3. Цикл и вставка контента:
    После этого мы проходим по каждому абзацу и проверяем, нужно ли вставить контент:

    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() может повлечь за собой риски безопасности, если вставляемый код не под контролем.

  4. Завершение работы с контентом:
    Наконец, необходимо завершить обработку и вывести окончательный результат на экран или сохранить в базе данных.

Замечания по безопасности и производительности

  • Безопасность: При использовании функции 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 зависит от ваших целей, но всегда учитывайте факторы безопасности и производительности. Подходите к разработке ответственно, и ваш код будет как эффективным, так и безопасным.

Оцените материал
Добавить комментарий

Капча загружается...