WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

get_extended() WP 1.0.0

Разделяет контент на 2 части до тега <!--more--> и после него. Возвращает массив с полученными частями.

После второго тире и перед словом "more" не должно быть пробела. После слова "more" может быть текст или пробелы (использование ссылок запрещается).

Хуков нет.

Возвращает

Массив с данными:

Array
(
	[main] => текст до more
	[extended] => текст после more
	[more_text] => (далее…) // если more указан так: <!‐‐more подробнее‐‐>, то тут будет "подробнее" а не "(далее…)"
)

Использование

$parts = get_extended( $post_content );
$post_content(строка) (обязательный)
Контент поста, в котором есть <!--more--> и который нужно разделить.

Примеры

#1 Выведем цитату из последних постов

Если нужно вывести последние записи на блоге, но вывести нужно только часть текста до тега <!--more-->, используйте такой код:

<ul>
	<?php
	global $post;

	$myposts = get_posts( array( 'numberposts'=>5 ) );

	foreach( $myposts as $post ){
		setup_postdata( $post );  
		$parts = get_extended( $post->post_content ); ?>
		<li>
		   <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
		   </br>
		   <?php echo apply_filters('the_content', $parts['main'] ); // часть до тега more ?>   
		</li>
	<?php
	}
	wp_reset_postdata();
	?>
</ul>

#2 Выведем рекламу сразу после тега <!--more-->

Допустим нам нужно вывести рекламный блок после тега <!--more-->, на отдельной странице (файл single.php). Для этого заменим the_content() на такой код:

<?php 
global $post;
$content_parts = get_extended( $post->post_content );

echo apply_filters('the_content', $content_parts['main']);

echo "Рекламный код здесь";

echo apply_filters('the_content', $content_parts['extended']);
?>

Код get extended: wp-includes/post.php WP 5.2.1

<?php
function get_extended( $post ) {
	//Match the new style more links.
	if ( preg_match( '/<!--more(.*?)?-->/', $post, $matches ) ) {
		list($main, $extended) = explode( $matches[0], $post, 2 );
		$more_text             = $matches[1];
	} else {
		$main      = $post;
		$extended  = '';
		$more_text = '';
	}

	//  leading and trailing whitespace.
	$main      = preg_replace( '/^[\s]*(.*)[\s]*$/', '\\1', $main );
	$extended  = preg_replace( '/^[\s]*(.*)[\s]*$/', '\\1', $extended );
	$more_text = preg_replace( '/^[\s]*(.*)[\s]*$/', '\\1', $more_text );

	return array(
		'main'      => $main,
		'extended'  => $extended,
		'more_text' => $more_text,
	);
}

Cвязанные функции

Из метки: excerpt (цитата отрывок фрагмент)

Еще из раздела: Остальное

3 коммента
  • @ Яков

    Не понимаю почему, но не работает эта функция. Точнее она работает, но всё равно весь текст (до more и после) лишь в ['main']. Вторая часть (['extended'])просто пустая, хотя в самой записи тег есть. Что это может быть?

    1
    Ответить2.4 года назад #
    • campusboy3315 cайт: www.youtube.com/c/wpplus

      Скорее всего примеры не верные по одной причине. Что возвращает get_the_content()? Смотрим:

      Добро пожаловать в WordPress. Это ваша первая запись. <span id="more-1"></span>Отредактируйте или удалите её, затем пишите!

      Что возвращает $post->post_content? Смотрим:

      Добро пожаловать в WordPress. Это ваша первая запись. <!--more-->Отредактируйте или удалите её, затем пишите!

      Как работает функция get_extended? Судя по её коду она ищет комметарий more:

      preg_match('/<!--more(.*?)?-->/', $post, $matches)

      Отсюда вывод, что функция get_extended не будет работать с функцией get_the_content.

      Ответить2.4 года назад #
Здравствуйте, !     Войти . Зарегистрироваться