Flector

Как получить текст записи до и после тега <!—more—>?

Иногда вебмастерам надо не только определить наличие тега <!--more--> в записи, но и произвести какие-либо действия именно с определенной частью записи - вводной или основной. Для решения подобной задачи можно воспользоваться функцией get_extended, которая при использовании возвращает массив из двух частей записи (до тега <!--more--> и после него). Использовать функцию просто:

<?php 
$content = get_post_field('post_content', get_the_ID());
$content_parts = get_extended($content);
echo $content_parts['main'];                //вывод записи до тега more
echo '<p>реклама</p>';                      //вывод рекламы (просто пример)
echo $content_parts['extended'];            //вывод остальной части записи 
?>

Это немного надуманный пример, поэтому рассмотрим более реальную задачу.

Допустим, что нам необходимо заменить только в вводной части записи все картинки на рекламные баннеры. Причем сделать это надо только на странице с полным текстом записи. Решить эту задачу можно таким кодом в functions.php вашей темы:

//замена картинок на баннер до тега more start
function wph_add_ads_content($content) {
   if (!is_single()) return $content;
   $ads = '<p>тут ссылка на рекламный баннер</p>';
   $content = get_post_field('post_content', get_the_ID());
   $content_parts = get_extended($content);
   $main = preg_replace("/<img .*>/mU", $ads, $content_parts['main']);
   return $main . $content_parts['extended'];
}
add_filter('the_content','wph_add_ads_content');
//замена картинок на баннер до тега more end

Пример, конечно, довольно странный, но зато реальный.


Написать комментарий

Для вставки кода воспользуйтесь кнопкой "Код". Используйте предпросмотр!