Мой сайт о WordPress и PHP
 
7 октября 2007

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

Читали 4956 раз
Рубрика: Плагины и хаки
Навигация: Главная » 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 - кол-во записей

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

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

21 комментарий к “Вывод последних записей”

  1. Павел Воронин:

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

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

  2. Максим:

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

  3. Maksus:

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

  4. Максим:

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

  5. Maksus:

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

  6. levati:

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

    Пожалуйста,

      cat_ID);
      foreach($posts as $post) :? >

    • ">

  7. Maksus:

    блин кода нету...

  8. Maksus:

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

  9. levati:

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

  10. allmoney.ws:

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

  11. Максим:

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

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

  12. Cvetik:

    А можно подробоно для начинающих?
    А то птаюсь разобраться и никак :shock:

  13. Bum3r:

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

  14. женя:

    суть: я желаю использовать плагин wp-polls не в сайдбаре, т.е. не использовать виджет.
    вопрос: можно ли код данного плагина WP-Polls вызывать строкой инклюда? пример

  15. levati:

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

  16. Максим:

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

  17. Florid:

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

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

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

  18. LiTeOn:

    А можно добавить к нему параметры offset и чтобы после названия выводил ещё и анонс. Было бы круто!
    Но и на этом РЕСПЕКТ!

  19. юлия сонник:

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

  20. Надюшка:

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

  21. Артём:

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

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


Оставьте комментарий! (Вы согласны с правилами)

 

:mrgreen: :neutral: :twisted: :arrow: :shock: :smile: :???: :cool: :evil: :grin: :idea: :oops: :razz: :roll: :wink: :cry: :eek: :lol: :mad: :sad: :!: :?:

При добавлении кода (html, php) заменяйте < на &lt; и > на &gt;.
Внимание: антиспам - зверь! Копируйте своё сообщение перед отправкой. На всякий случай.