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

Рубрика: WordPress -> Статьи
Воскресенье, 7 октября 2007 г.
Просмотров: 2116
Подписаться на комментарии по RSS

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

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

  1.  <?php
  2.  # дополнительные функции
  3.  function maxsite_explode($s = '' ) {
  4.   $s = trim( str_replace(',', ' ', $s) );
  5.   $s = trim( str_replace(';', ' ', $s) );
  6.   $s = trim( str_replace(' ', ' ', $s) );
  7.   $s = trim( str_replace(' ', ' ', $s) );
  8.   $s = trim( str_replace(' ', ' ', $s) );
  9.   $s = trim( str_replace(' ', ' ', $s) );
  10.   $s = array_unique( explode(' ', trim($s) ) );
  11.   $out = array();
  12.   foreach ( $s as $val_key => $val_val )
  13.   if ( ( (int) $val_val) > 0 )
  14.   array_push( $out, $val_val);
  15.   return $out;
  16.  }
  17.  function maxsite_last_post_cat(
  18.   $num_cat = '',
  19.   $format = '[DATE] [A][TITLE][/A]',
  20.   $datef = 'j.m.Y',
  21.   $count = 5
  22.   )
  23.  {
  24.   $options = '-' . $num_cat . $format . $datef . $count;
  25.   $cache_key = (string) (md5(__FUNCTION__ . serialize($options)));
  26.   if ( $output = wp_cache_get($cache_key) ) return print($output);
  27.   ob_start();
  28.   $count = (int) $count;
  29.   echo '<ul class="is_link last_post">';
  30.   $arr_num_cat = maxsite_explode($num_cat);
  31.   $num_cat = '';
  32.   foreach ($arr_num_cat as $num) {
  33.   $num = (int) $num;
  34.   if ( $num > 0) $num_cat .= $num . ' ';
  35.   }
  36.   $num_cat = str_replace(' ', ',', trim($num_cat));
  37.   global $wp_version, $wpdb;
  38.   $ver = (float) $wp_version;
  39.   if ($ver < 2.3) { // только для 2.2
  40.   if ( $num_cat ) $num_cat = "AND category_id IN($num_cat)";
  41.   else $num_cat = '';
  42.   if ( $count == 0 ) $count = '';
  43.   else $count = 'LIMIT '. $count;
  44.   $sortby = 'post_date DESC';
  45.   $request = "SELECT DISTINCT ID, post_title, post_date
  46.   FROM $wpdb->posts, $wpdb->post2cat
  47.   WHERE post_status = 'publish'
  48.   AND post_type = 'post'
  49.   AND ID = post_id
  50.   {$num_cat}
  51.   ORDER BY {$sortby} {$count}";
  52.   }
  53.   else
  54.   { // запрос для 2.3
  55.   if ( $num_cat ) $num_cat = "AND tx.term_id IN ($num_cat)";
  56.   else $num_cat = '';
  57.   if ( $count == 0 ) $count = '';
  58.   else $count = 'LIMIT '. $count;
  59.   $sortby = 'p.post_date DESC';
  60.   $request = "SELECT DISTINCT p.ID, p.post_title, p.post_date
  61.   FROM $wpdb->term_taxonomy tx,
  62.   $wpdb->term_relationships tr,
  63.   $wpdb->posts p
  64.   WHERE
  65.   tx.taxonomy='category'
  66.   {$num_cat}
  67.   AND tx.term_taxonomy_id = tr.term_taxonomy_id
  68.   AND tr.object_id = p.ID
  69.   AND p.post_status = 'publish'
  70.   AND p.post_type = 'post'
  71.   ORDER BY {$sortby} {$count}";
  72.   }
  73.   $posts_new = $wpdb->get_results($request);
  74.   if ( $posts_new )
  75.   foreach ($posts_new as $post_new) {
  76.   //[DATE]
  77.   $DATE = mysql2date($datef, $post_new->post_date);
  78.   $TITLE = $post_new->post_title; // [TITLE]
  79.   $A1 = '<a href="'
  80.   . get_permalink($post_new->ID)
  81.   . '" title="'
  82.   . $TITLE
  83.   . '">'; //[A]
  84.   $A2 = '</a>'; //[/A]
  85.   $out = str_replace('[DATE]', $DATE, $format);
  86.   $out = str_replace('[TITLE]', $TITLE, $out);
  87.   $out = str_replace('[A]', $A1, $out);
  88.   $out = str_replace('[/A]', $A2, $out);
  89.   echo '<li>' . $out . '</li>';
  90.   }
  91.   echo '</ul>';
  92.   wp_cache_add($cache_key, ob_get_flush());
  93.  }
  94.  ?>

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

  1.  <?php
  2.   require_once('main-functions.php');
  3.   echo '<div class="last_post">';
  4.   maxsite_last_post_cat();
  5.   echo '</div>';
  6.  ?>

Описание 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

Комментариев: 22

  1. 2007-10-07 в 20:16:10 | Павел Воронин (анонимно)

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

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

  2. 2007-10-07 в 22:29:57 | Максим (анонимно)

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

  3. 2007-10-08 в 01:42:07 | Maksus (анонимно)

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

  4. 2007-10-08 в 07:57:45 | Максим (анонимно)

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

  5. 2007-10-08 в 09:08:13 | Maksus (анонимно)

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

  6. 2007-10-08 в 09:08:37 | levati (анонимно)
    А конкретнее?

    Пожалуйста,

    cat_ID);

    foreach($posts as $post) :?>

    ">

  7. 2007-10-08 в 09:08:59 | Maksus (анонимно)

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

  8. 2007-10-08 в 09:09:33 | Maksus (анонимно)

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

  9. 2007-10-08 в 09:17:35 | levati (анонимно)

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

  10. 2007-10-08 в 15:57:11 | allmoney.ws (анонимно)

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

  11. 2007-10-08 в 19:18:44 | Максим (анонимно)

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

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

  12. 2007-10-10 в 05:43:18 | Cvetik (анонимно)

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

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

  13. 2007-10-12 в 00:03:10 | Bum3r (анонимно)

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

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

  14. 2007-10-14 в 19:56:14 | женя (анонимно)

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

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

  15. 2007-10-22 в 13:40:59 | levati (анонимно)

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

  16. 2007-10-22 в 19:49:43 | Максим (анонимно)

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

  17. 2007-10-30 в 03:22:34 | Florid (анонимно)

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

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

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

  18. 2007-11-16 в 12:46:54 | LiTeOn (анонимно)

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

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

  19. 2008-03-11 в 01:53:44 | юлия сонник (анонимно)

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

  20. 2008-03-12 в 17:41:51 | Надюшка (анонимно)

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

  21. 2008-05-19 в 17:31:36 | Артём (анонимно)

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

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

  22. 2008-10-20 в 20:17:15 | Samuray (анонимно)

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

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

    Спасибо!

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

Не регистрировать/аноним

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email.
(При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д.)



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

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