Предположим вы хотите вставить информацию в каждую запись (статью) сайта на WordPress, начиная со второго или третьего абзаца.
Приведу два способа, как это сделать. Они работают одинаково, но один способ подойдёт для размещения кода в файл single.php, а другой в functions.php. Кому что удобнее.
Вставка в файл Functions.php
if( !is_single() )
return $content;
$paragraphAfter = 1; // Номер абзаца, после которого нужно вставить данные
$content = explode ( "</p>", $content );
for ( $i = 0; $i < count ($content)-1; $i ++ ) {
if ( $i == $paragraphAfter ) {
?>
<?php get_template_part( 'content/ploshadka.net' ); ?>
<?php
}
echo $content[ $i ] . "</p>";
}
}
add_filter( 'the_content', 'wpse_ad_content' );
Данные выводятся в этом участке кода:
Вместо него сюда можно занести любую другую информацию. В данном случае после первого абзаца вставляется содержимое файла info.php, который находится в папке content.
Вставка в файл Single.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 ) {
?>
<?php get_template_part( 'content/ploshadka.net' ); ?>
<?php
}
echo $content[ $i ] . "</p>";
}
// Конец функции
Как вставить сразу два блока с информацией
На примере кода для записей (статей).
// Вставка любой информации после второго абзаца
$paragraphAfter = 1; // После какого абзаца нужно вставить в первом блоке
$paragraphAfter2 = 3; // После какого абзаца нужно вставить во втором блоке
$content = apply_filters( 'the_content', get_the_content() );
$content = explode( "</p>", $content );
for ( $i = 0; $i < count( $content ); $i++ ) {
if ( $i == $paragraphAfter ) {
?>
<?php get_template_part( 'content/ploshadka.net' ); ?>
<?php
} else {
if ( $i == $paragraphAfter2 ) {
?>
<?php get_template_part( 'content/ploshadka.net' ); ?>
<?php
}}
echo $content[ $i ] . "</p>";
}
Из php кода выше видно, что мы добавили вторую переменную paragraphAfter2, которую можем приравнять к любому абзацу с текстом. Далее мы добавили второй участок для вставки информации. В конце кода добавили недостающую скобку }.
По аналогии можно добавить ещё несколько других блоков. И каждый раз внедряя новый участок кода:
if ( $i == $paragraphAfter3 ) {
?>
Обязательно в конце добавляем ещё одну скобку }.
Добрый день! Спасибо за статью.
А как прописать условие вставки (например после второго абзаца) нужного html-кода (текста), но не во всех статьях, а только в тех, в которых встречается нужное упоминание (например один или 2 раза).
Поясню. У меня новости о строительстве объектов строительной компании. Каждая новость — о своем объекте, периодически они повторяются. Основных объектов немного — штук 5. Вот хотелось бы сделать так: 5 php-файлов с кусками о каждом из объектов (ну или просто 5 кусков html в файле functions.php). Скрипт смотрит на новость — если название объекта (в тексте) встречается, ну например 1-2 раза (2 для достоверности) — то: вставляется (или подключается файл) НУЖНЫЙ кусок кода о соответствующем объекте строительства.
Буду очень признателен за помощь!
Это можно сделать через произвольные поля. Если существует произвольное поле с определенным значением, то выводить блок. Если не знаете что это, погуглите get_post_meta.