2014-08-28 2 views
0

Я использую этот код, чтобы показывать последние сообщения с коротким кодом, который я нашел на smashingmagazine. Это не работает правильно, я имею в виду, когда я указываю количество сообщений для показа, он просто показывает одно сообщение с каждым номером, который я указываю.Wordpress shortcode показывает неправильное количество сообщений

Вот код:

function recent_posts_function() { 
query_posts(array('orderby' => 'date', 'order' => 'DESC' , 'showposts' => 1)); 
    if (have_posts()) : 
    while (have_posts()) : the_post(); 
     $return_string = '<a href="'.get_permalink().'">'.get_the_title().'</a>'; 
    endwhile; 
    endif; 
wp_reset_query(); 
return $return_string; 
} 

function register_shortcodes(){ 
    add_shortcode('recent-posts', 'recent_posts_function'); 
} 

add_action('init', 'register_shortcodes'); 

Я изменил showposts номер, но ничего не происходит. Что не так?

Любые предложения?

+0

'$ return_string' написано каждый раз, когда вы повторяете цикл, поэтому он должен получить результат из последней строки из-за этого. Измените его на '$ return_string. =' Для непрерывной конкатенации строки, создавая длинный список ссылок. – Ohgodwhy

+0

Хорошо, я исправляю эту часть, но теперь число сообщений по-прежнему не так, когда я помещаю 'showposts' => 1, он показывает 6 сообщений, когда я помещаю 2, это показывает 7 сообщений, и когда я помещаю 3, он показывает 8 сообщений !! ! что тут происходит? – Komeyl94

ответ

0

Как раз перед тем, как я начну, никогда не используйте query_posts для создания или изменения любого типа запроса. Он полностью выходит из строя во многих сценариях, особенно в разбивке на страницы, и разбивает основной запрос, которого вы никогда не должны делать.

Если вам нужно построить пользовательские запросы, а использовать WP_Query

Также showposts были deprerciated давно, и были заменены posts_per_page

Вы должны прочитать Shortcode API, это должно дать вам обзор о том, что происходит и как следует использовать и создавать короткие коды. Одна важная вещь, которую следует помнить здесь, должен содержать код короткого кода, а не echo'ed. Здесь также есть tutorial, которые мне очень помогают.

Просто быстрый совет здесь, короткие коды всегда должны входить в плагин. Если вы еще не создали, идите и читать MU-Plugin (must-use-plugin)

Правильный способом построения вашего шорткода будет выглядеть следующим образом: (Ваш шорткод будет [my-shortcode]) Это непроверенное хотя

add_shortcode('my-shortcode', 'my_custom_query_shortcode'); 
function my_custom_query_shortcode($atts) { 
    ob_start(); 

$query = new WP_Query(array('orderby' => 'date', 'order' => 'DESC' , 'posts_per_page' => 1)); 

if ($query->have_posts()) : 
    while($query->have_posts()) : $query->the_post(); 

     //YOUR LOOP ELEMENTS 

     <?php 
     endwhile; 

    $myvariable = ob_get_clean(); 

    return $myvariable; 

endif;  

} 

Просто замените ваш код с моим, и убедитесь, что вы добавляете элементы цикла.

Еще одна вещь, помните, что если вы запустили какой-либо пользовательский запрос на странице, и вы не сбросили этот запрос, это повлияет на любой другой запрос на этой странице, даже этот короткий код, поэтому всегда убедитесь, что вы сбросили все пользовательские запросы после того, как вы закончили

Смежные вопросы