2014-08-28 129 views
0

我正在使用此代碼顯示最近的帖子,我在smashingmagazine網站發現的短代碼。這不是正確的方式,我的意思是當我指定要顯示的帖子數量時,它只顯示一個帖子和我指定的每個數字。WordPress的短代碼顯示不正確的帖子數

下面的代碼:

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 2014-08-28 03:26:34

+0

好的,我修復了這部分,但現在帖子的數量仍然是錯誤的,當我把'showposts'=> 1,它顯示6個職位,當我把2顯示7職位,當我把3顯示8職位! !這裏發生了什麼? – Komeyl94 2014-08-28 03:49:57

回答

0

就在我開始之前,從不使用query_posts來構造或修改任何類型的查詢。它在許多情況下徹底失敗,特別是分頁,並打破主查詢,這是你永遠不應該做的。

如果您需要構建自定義查詢,而使用WP_Query

此外,showposts已經很久以前deprerciated並已替換爲posts_per_page

你應該閱讀Shortcode API,這應該給你一個概述發生了什麼以及應如何使用和創建簡碼。在這裏要記住一件重要的事情,簡碼內容應該返回,而不是回顯。這也是一個幫助我很多的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;  

} 

只需更換您的與我的代碼,並確保您添加您的循環元素。

還有一件事,請記住,如果您在頁面上運行任何自定義查詢,並且您沒有重置該查詢,它將影響該頁面上的任何其他查詢,即使是此簡碼,因此請務必確保您重置所有自定義查詢完成後