/**
* Выводит на экрна список последних записей.
*
* @param integer [$post_num = 5] Количество ссылок
* @param string [$format = »] {avatar} {author}: {date:j.M.Y} — {a}{title}{/a} ({comments})
* @param string [$cat = »] Категории из которых нужно выводить (5,15) или которые нужно исключить (-5,-15),
* через запятую (одновременно включение и исключение не работает (не имеет смысла) )
* @param string [$list_tag = ‘li’] Тег списка
* @param boolean [$echo = true] Выводить на экран или возвращать
*
* @return string HTML.
* @version: 0.1.2
*/
function kama_recent_posts( $post_num = 5, $format = », $cat = », $list_tag = ‘li’, $echo = true ){
global $post, $wpdb;
$cur_postID = $post->ID;
// исключим посты главного запроса (wp_query)
$IDs = »;
foreach( $GLOBALS[‘wp_query’]->posts as $post ) $IDs .= $post->ID .’,’;
$AND_NOT_IN = ‘ AND p.ID NOT IN (‘. rtrim($IDs, ‘,’) .’)’;
$DISTINCT = $SEL = $JOIN = $AND_category = $AND_taxonomy = »;
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( false !== strpos($format, ‘{author}’) ){
$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 = ««;
}
$sql = «SELECT $DISTINCT p.ID, post_title, post_date, comment_count, guid, post_author $SEL
FROM $wpdb->posts p $JOIN
WHERE post_type = ‘post’ AND post_status = ‘publish’ $AND_category $AND_taxonomy $AND_NOT_IN
ORDER BY post_date DESC LIMIT $post_num»;
$results = $wpdb->get_results($sql);
if( ! $results )
return false;
$out = »;
$x = »;
preg_match( ‘~\{date:(.*?)\}~’, $format, $date_m );
foreach( $results as $pst ){
$x = ( $x == ‘li1’ ) ? ‘li2’ : ‘li1’;
if ( $pst->ID == $cur_postID ) $x .= » current-item»;
