Архив февраля 2010 г.

В одном из недавних заказов у меня была задача – вырезать определенный контент из содержимого поста при его выводе на главной. Для подобных вещей в WordPress предусмотрена функция get_the_content().

Чтобы было понятно, о чем речь, приведу пример ее использования:

$content = get_the_content();
$content = preg_replace('/вырезаем какой-то кусок текста/i', '', $content);
echo $content; // выводим отфильтрованный контент.

Однако при этом есть один минус – в выводимом таким образом контенте отсутствуют HTML-теги, которые есть в оригинале поста, т.е. к примеру, исчезают отступы между абзацами.

Задача решается применением следующей функции (ее необходимо поместить в файл functions.php):

function get_the_content_with_formatting ($more_link_text = '') {
	$content = get_the_content($more_link_text);
	$content = apply_filters('the_content', $content);
	// тут какие-то манипуляции с переменной $content
	echo $content;
}

Ну а в шаблоне вместо этого кода:

<?php the_content('Читать далее &raquo;'); ?>

использовать такой:

<?php get_the_content_with_formatting('Читать далее &raquo;'); ?>

Ранее я публиковал пост о том, как выводить список самых комментируемых записей без использования плагина. Предлагаю еще один вариант, который делает то же самое. Мне он видится более красивым.

Код выглядит следующим образом:

<?php $popular = new WP_Query('orderby=comment_count&posts_per_page=7'); ?>
<?php if ($popular->have_posts()) : ?>
	<ul>
		<?php while ($popular->have_posts()) : $popular->the_post(); ?>
	  <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
		<?php endwhile; ?>
	</ul>
<?php endif; ?>

Цифра 7 в первой строке – это количество выводимых ссылок.

3 февраля 2010 г.

Не раз сталкивался с ситуацией, когда необходимо было выводить анонс, ограничив его длину заданным количество слов.

Для этого я использую нижеследующую простенькую функцию.

В файл functions.php WordPress-темы необходимо вставить следующий код:

function do_excerpt($string, $word_limit) {
	$words = explode(' ', $string, ($word_limit + 1));
	if (count($words) > $word_limit)
	array_pop($words);
	echo implode(' ', $words).' ...';
}

После этого в то место шаблона, где нужно отобразить анонсы постов, вставить вот такой код:

<?php do_excerpt(get_the_excerpt(), 50); ?>

Здесь цифра 50 – это количество слов, которым мы хотим ограничить длину анонса.

Другой вариант

Если вы используете WordPress версии 2.9 или выше, то можно использовать следующую более упрощенную конструкцию:

function new_excerpt_length($length) {
	return 50;
}
add_filter('excerpt_length', 'new_excerpt_length');

Код также необходимо вставить в файл functions.php.

Облако тегов