WordPress как на ладони
Наставник Трепачёв Д.П., phphtml.net wordpress jino

get_extended() WP 1.0.0

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

Хуков нет.

Возвращает

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

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

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

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

Примеры

#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 $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 4.8.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 (цитата)

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

get_extended 4 комментария
  • Яков
    @

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

    1
    • campusboy1737 cайт: wp-plus.ru
      @

      Скорее всего примеры не верные по одной причине. Что возвращает 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.

  • Слава

    а есть ли возможность разделить контент на много частей ?

    Ответитьмесяц назад #

Здравствуйте, !

Ваш комментарий