В поисках решения искал плагин или функцию, которая выводила бы на страницу последние новости с датой, заголовком и коротким текстом. Откопал такой вариант:
/**
$post_num (5) = количество ссылок
$format ('') = {avatar} {author}: {date:j.M.Y} - {a}{title}{/a} ({comments})
$cat ('') = Категории из которых нужно выводить (5,15) или которые нужно исключить (-5,-15), через запятую (одновременно включение и исключение не работает (не имеет смысла) )
$list_tag (li) = Тег списка
*/
function kama_recent_posts ($post_num=5, $format='', $cat='', $list_tag='li', $echo=true){
global $post, $wpdb;
$cur_postID = $post->ID;
if ($cat){
$JOIN = "LEFT JOIN $wpdb->term_relationships rel ON ( p.ID = rel.object_id )
LEFT JOIN $wpdb->term_taxonomy tax ON ( tax.term_taxonomy_id = rel.term_taxonomy_id ) ";
$DISTINCT = "DISTINCT";
$AND_taxonomy = "AND tax.taxonomy = 'category'";
$AND_category = "AND tax.term_id IN ($cat)";
//Проверка на исключение категорий
if( strpos($cat, '-')!==false )
$AND_category = 'AND tax.term_id NOT IN ('. str_replace( '-','', $cat ) .')';
}
//если нужно показать автора
if( strpos($format, '{author}')!==false ){
$JOIN .= " LEFT JOIN $wpdb->users u ON ( p.post_author = u.ID )";
$SEL = ", u.user_nicename AS author, u.user_email, u.user_url";
//если нужно показать аватар (gavatar)
if( strpos($format, '{avatar}')!==false )
$av = "<img src='http://www.gravatar.com/avatar/%1\$s?s=25' alt='' />";
}
$sql = "SELECT $DISTINCT p.ID, post_title, post_date, comment_count, guid $SEL
FROM $wpdb->posts p $JOIN
WHERE post_type = 'post' AND post_status = 'publish' $AND_category $AND_taxonomy
ORDER BY post_date DESC LIMIT $post_num";
$results = $wpdb->get_results($sql);
if (!$results)
return false;
preg_match ('@\{date:(.*?)\}@', $format, $date_m);
foreach ($results as $pst){
$x == 'li1' ? $x = 'li2' : $x = 'li1';
if ( (int)$pst->ID == (int)$cur_postID ) $x .= " current-item";
$Title = $pst->post_title;
$a = "<a href='". get_permalink($pst->ID) ."' title='{$Title}'>";
if ($format){
$avatar = $av ? sprintf( $av, md5($pst->user_email) ) : '';
$date = apply_filters('the_time', mysql2date($date_m[1], $pst->post_date));
$Sformat = str_replace ($date_m[0], $date, $format);
$Sformat = str_replace(
array('{title}', '{a}', '{/a}', '{author}', '{comments}', '{avatar}'),
array( $Title, $a, '</a>', $pst->author, $pst->comment_count, $avatar ),
$Sformat
);
}
else $Sformat = "$a$Title</a>";
$out .= "\n<$list_tag class='$x'>{$Sformat}</$list_tag>";
}
if ($echo)
return print $out;
return $out;
}
и собственно код в шаблоне:
<ul>
<?php kama_recent_posts (5, '{a}{title}{/a} ← {date:j.M.Y} // {comments}'); ?>
</ul>
// выведет список в формате - <li class='li1'><a href='http://ссылка' title='Заголовок статьи'>Заголовок статьи</a> ← дата // количество комментариев</li>
Кто знает, как здесь добавить к новости короткий анонс текста, например, в 20 знаков? Пробовал добавлять к выборке из базы post_content и обрезать при помощи SUBSTRING(post_content,1,30), но ничего не вышло ввиду скудных знаний php. Если б это было реализовано – было бы очень даже не плохо