WordPress как на ладони

get_extended()WP 1.0.0

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

После второго тире и перед словом "more" не должно быть пробела:

  • Верно: <!--more-->
  • НЕ верно: <!-- more-->

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

  • <!‐‐more подробнее‐‐>

Текст станет анкором ссылки. Заменит "(далее…)".

Хуков нет.

Возвращает

Строку[]. Массив с данными:

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

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

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

Примеры

0

#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>
0

#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']);
?>

Список изменений

С версии 1.0.0 Введена.

Код get_extended() WP 6.4.3

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,
	);
}
7 комментариев
    Войти