Как получить текст записи до и после тега <!—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 |
Пример, конечно, довольно странный, но зато реальный.