Что-то в 3 часа ночи у меня голова не варит. Есть над чем поработать. Тест в WP меня не удовлетворил, но цикл работает. Набросал вот так пока что:
function last_posts__func( $atts ) {
$atts = shortcode_atts( array(
'id' => '1', //ID категории по умолчанию 1
'list' => '3', //Количество постов по умолчанию 3
'tag' => '1', //ID исключающего тега по умолчанию 1
//Можно использовать только id, для slug используйте tag_slug__in
'before' => '<div class="last__post">',
'after' => '</div>',
'before_h' => '<h3>',
'after_h' => '</h3>'
), $atts );
$args = array(
'category__in' => $id,
'tag__not_in' => $tag,
'posts_per_page' => $list
);
$query = new WP_Query($args);
while( $query->have_posts() ){ $query->the_post();
$before;
$before_h;
the_title(); // заголовок
$after_h;
the_content(); // текст записи в стандартном выводе
$after;
} wp_reset_postdata(); // сбрасываем переменную $query
}
return $query;
}
add_shortcode('last_post', 'last_posts__func');
Для использования необходимо весь код скопировать и вставить в конец файла
functions.php
шаблона темы.
Пример Shortcode[last_post id="1" list="3" tag="58"]
Кодекс query_posts()Качественный переводПока не претендую на "решение", но если натолкну на нужные мысли, может быть тем самым помогу.