Обратите внимание, что вместо WordPress
лучше использовать современную и качественную
систему управления сайтом - MaxSite CMS!

Вывод последних записей

7 октября 2007 г. Просмотров: 9450 RSS 23
WordPress » Статьи

Для вывода последних записей можно использовать виджет, а можно воспользоваться вот такой функцией. В ней можно указывать рубрики, формат ввода, количество записей. Сама функция использует кэширование.

Делаем файл main-functions.php. Кидаем в каталог текущего шаблона. Сам код:

<?php
# дополнительные функции
function maxsite_explode($s = '' ) {
	$s = trim( str_replace(',', ' ', $s) );
	$s = trim( str_replace(';', ' ', $s) );
	$s = trim( str_replace('     ', ' ', $s) );
	$s = trim( str_replace('    ', ' ', $s) );
	$s = trim( str_replace('   ', ' ', $s) );
	$s = trim( str_replace('  ', ' ', $s) );
	$s = array_unique( explode(' ', trim($s) ) );
	$out = array();
	foreach ( $s as $val_key => $val_val )
		if ( ( (int) $val_val) > 0 )
			array_push( $out, $val_val);
	return $out;
}
function maxsite_last_post_cat(
		$num_cat = '',
		$format = '[DATE] [A][TITLE][/A]',
		$datef = 'j.m.Y',
		$count = 5
		)
{
	$options = '-' . $num_cat . $format . $datef . $count;
	$cache_key = (string) (md5(__FUNCTION__ . serialize($options)));
	if ( $output = wp_cache_get($cache_key) ) return print($output);
	ob_start();
	$count = (int) $count;
	echo '<ul class="is_link last_post">';
	$arr_num_cat = maxsite_explode($num_cat);
	$num_cat = '';
	foreach ($arr_num_cat as $num) {
		$num = (int) $num;
		if ( $num > 0) $num_cat .= $num . ' ';
	}
	$num_cat = str_replace(' ', ',', trim($num_cat));
	global $wp_version, $wpdb;
	$ver = (float) $wp_version;
	if ($ver < 2.3) { // только для 2.2
		if ( $num_cat ) $num_cat = "AND category_id IN($num_cat)";
			else $num_cat = '';
		if ( $count == 0 ) $count = '';
			else $count = 'LIMIT '. $count;
		$sortby = 'post_date DESC';
		$request = "SELECT DISTINCT ID, post_title, post_date
				FROM $wpdb->posts, $wpdb->post2cat
				WHERE post_status = 'publish'
				AND post_type = 'post'
				AND ID = post_id
				{$num_cat}
				ORDER BY {$sortby} {$count}";
	}
	else
	{ // запрос для 2.3
		if ( $num_cat ) $num_cat = "AND tx.term_id IN ($num_cat)";
			else $num_cat = '';
		if ( $count == 0 ) $count = '';
			else $count = 'LIMIT '. $count;
		$sortby = 'p.post_date DESC';
		$request = "SELECT DISTINCT p.ID, p.post_title, p.post_date
				FROM $wpdb->term_taxonomy tx,
					$wpdb->term_relationships tr,
					$wpdb->posts p
				WHERE
					tx.taxonomy='category'
					{$num_cat}
				AND tx.term_taxonomy_id = tr.term_taxonomy_id
					AND tr.object_id = p.ID
					AND p.post_status = 'publish'
					AND p.post_type = 'post'
				ORDER BY {$sortby} {$count}";
	}
	$posts_new = $wpdb->get_results($request);
	if ( $posts_new )
		foreach ($posts_new as $post_new) {
			//[DATE]
			$DATE = mysql2date($datef, $post_new->post_date);
			$TITLE = $post_new->post_title; // [TITLE]
			$A1 = '<a href="'
				. get_permalink($post_new->ID)
				. '" title="'
				. $TITLE
				. '">'; //[A]
			$A2 = '</a>'; //[/A]
			$out = str_replace('[DATE]', $DATE, $format);
			$out = str_replace('[TITLE]', $TITLE, $out);
			$out = str_replace('[A]', $A1, $out);
			$out = str_replace('[/A]', $A2, $out);
			echo '<li>' . $out . '</li>';
		}
	echo '</ul>';
	wp_cache_add($cache_key, ob_get_flush());
}
?>

Использование, например в сайдбаре:

<?php
	require_once('main-functions.php');
	echo '<div class="last_post">';
		maxsite_last_post_cat();
	echo '</div>';
?>

Описание maxsite_last_post_cat:

  • $num_cat = '' - номера рубрик через запятую, пробел или точку с запятой
  • $format = '[DATE] [A][TITLE][/A]' - формат вывода
  • $datef = 'j.m.Y' - формат даты (стандарт PHP)
  • $count = 5 - кол-во записей

Если рубрики не указывать, то берутся все. Функция использует кэширование.


twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru friendfeed.com google.com yandex.ru
Комментариев: 23
  1. 2007-10-07 в 22:16:10 | Павел Воронин

    Есть небольшая проблема. SQL-запрос несколько некорректно составлен. Если статья принадлежит более, чем одной категории, то она выведется в список несколько раз (сколько категорий, столько и выводов). Поправите?

    За скрипт спасибо! Поправил и разместил у себя, можно полюбоваться. =)

  2. 2007-10-08 в 00:29:57 | Максим

    Ваша правда smile. Добавил DISTINCT. Теперь будет выводить без дублей.

  3. Максим, функция написана специально для кеширования? Ведь можно ж выводить последние записи проще...

  4. 2007-10-08 в 09:57:45 | Максим

    А конкретнее?

  5. Я к примеру так вывожу

  6. А конкретнее?

    Пожалуйста,

    cat_ID);
    foreach($posts as $post) :?>
    ">
  7. блин кода нету...

  8. Как в комментах правильно код писать?

  9. сорри, прибей каммент, код порезало. Тема про вывод последних записей была в Дневнике самоучки

  10. Maksus, научи лучше как например на стороннюю php-страницу выводить n последних записей. :cool:

  11. 2007-10-08 в 21:18:44 | Максим

    Код нужно оформлять как html со спецсимволами. В общем как обычно.

    Перерыл весь сайт Яны. Дайте ссылку хотя бы?

  12. А можно подробоно для начинающих?

    А то птаюсь разобраться и никак:shock:

  13. Спасибо Максим.

    Сделал у себя в блоге вывод последних новостей

  14. суть: я желаю использовать плагин wp-polls не в сайдбаре, т.е. не использовать виджет.

    вопрос: можно ли код данного плагина WP-Polls вызывать строкой инклюда? пример

  15. Вот - обещанная статья. Если код не порежет :wink: .

  16. 2007-10-22 в 21:49:43 | Максим

    Всё ясно. Мой способ лучше.

  17. Вывод последних Записей можно сделать так:

    <?php wp_get_archives('type=postbypost&limit=5'); ?>

    где '5' - число выводимых Записей, начиная с последней на Блоге. Число ес-но можно менять. У себя на Блоге я так и вывожу последние 5 записей grin

  18. А можно добавить к нему параметры offset и чтобы после названия выводил ещё и анонс. Было бы круто!

    Но и на этом РЕСПЕКТ!

  19. 2008-03-11 в 03:53:44 | юлия сонник

    Ustanovila sebe na glavnuyu stranitsu, vse rabotaet, ochen udobno, a to ranshe vse delala ruchkami, MAXU bolshoe spasibo...

  20. 2008-03-12 в 19:41:51 | Надюшка

    Спасибо большое за код. Установила себе, все работает. smile Только у меня вопрос вот какой? Что надо изменить, чтобы записи выводились не с последней, а с предпоследней? :wink:

  21. а как зделать чтобы выводилась не только дата и название новости а еще и текст етой новости ?

    ато я хочу на главной после некоторого текста выводить 5 послед новостей и если вставляю код как в индексе то выводит заного содержимое главной страницы :???:

  22. Большое спасибо! Нашел пост по ссылке )

    Сделал на своем блого-сплоге, надеюсь, поможет.

    Спасибо!

  23. Максим, большое спасибо, после 2 часов перебора различных вариантов - этот просто THE BEST OF THE BEST! )

Оставьте комментарий!

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

Комментарий будет опубликован после проверки

(войти без комментирования)

Имя и сайт используются только при регистрации

Авторизация: Loginza.

(обязательно)