Показать контент после первого и второго абзаца

28 нояб. 2012 г., 20:52:01
Просмотры: 14.5K
Голосов: 3

Функция ниже используется для отображения определенного контента после первого абзаца. Мне нужно показывать 'контент X' после 1-го абзаца и 'контент Y' после 2-го абзаца.

<?php
$paragraphAfter = 1; //отобразить после первого абзаца
$content = apply_filters('the_content', get_the_content());
$content = explode("</p>", $content);
for ($i = 0; $i <count($content); $i++ ) {
if ($i == $paragraphAfter) { ?>

<div>Вставьте контент здесь</div>

<?php }
echo $content[$i] . "</p>";
} ?>

Буду благодарен за любую помощь.

0
Все ответы на вопрос 4
7

Мой способ сделать это (см. обновление ниже):

function addParagraphs($content) {
    // можно добавить столько, сколько нужно:
    $additions = array(
        '<p>После первого абзаца</p>',
        '<p>После второго абзаца</p>'
    );

    $content = get_the_content();

    $output = ''; // определяем переменную, чтобы избежать предупреждений PHP

    $parts = explode("</p>", $content);

    $count = count($parts); // вызываем count() только один раз, это быстрее

    for($i=0; $i<$count; $i++) {
        $output .= $parts[$i] . '</p>' . $additions[$i]; // отсутствующие дополнения не добавляются
    }
    return $output;

}
add_filter('the_content','addParagraphs');

Ответ обновлён согласно последующим комментариям:

$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>";
}
28 нояб. 2012 г. 21:56:42
Комментарии

Спасибо @Max Yudin, но, к сожалению, мне это не подходит. Я хотел бы показывать, например, после 1-го и 5-го параграфа, а не обязательно после 1-го и 2-го.

BobGCA2 BobGCA2
28 нояб. 2012 г. 22:14:13

@Michael, ты хочешь использовать это для каждого поста отдельно?

Max Yudin Max Yudin
28 нояб. 2012 г. 22:24:53

Да, @Max Yudin, я хочу выводить контент после определенных постов в цикле на главной странице.

BobGCA2 BobGCA2
28 нояб. 2012 г. 22:29:33

@Michael, должно ли содержимое быть одинаковым после одного абзаца и таким же после других?
И ты используешь это в functions.php или в шаблоне?

Max Yudin Max Yudin
28 нояб. 2012 г. 22:43:52

Может быть одинаковым, @Max Yudin. Я сейчас использую шаблон.

BobGCA2 BobGCA2
28 нояб. 2012 г. 22:49:57

@Michael, добавлена ещё одна версия решения на основе твоего кода для использования в шаблоне.

Max Yudin Max Yudin
28 нояб. 2012 г. 23:18:12

Отлично, @Max Yudin. Прекрасно, у меня нет слов, чтобы поблагодарить за помощь... Спасибо, лол.

BobGCA2 BobGCA2
28 нояб. 2012 г. 23:34:14
Показать остальные 2 комментариев
0
// Добавляем фильтр для вставки рекламы в контент
add_filter( 'the_content', 'prefix_insert_post_ads' );

function prefix_insert_post_ads( $content ) {

    $ad_code = '<div>Код рекламы здесь</div>';

    // Вставляем рекламу только в одиночных записях и не в админке
    if ( is_single() && ! is_admin() ) {
        return prefix_insert_after_paragraph( $ad_code, 2, $content );
    }

    return $content;
}

// Основная функция для вставки контента после указанного абзаца

function prefix_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 );
}
5 дек. 2019 г. 12:36:19
0

Я знаю, что это старый вопрос, но этот ответ должен помочь тем, кто все еще ищет решение.

Этот плагин отлично работает с любой темой.

https://wordpress.org/plugins/insert-post-ads

Вы можете выбрать первое/второе или любое другое место для отображения вашей рекламы.

2 авг. 2015 г. 20:39:34
0

Я искал способ использовать get_template и делюсь им здесь, вдруг кому-то пригодится

<?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>";
            }
     ?>
29 янв. 2019 г. 14:34:30