2012-04-22 106 views
0

我在我的插件裏做了一個簡短的代碼,這很好用。 短代碼需要一些參數並創建一個帶有輸出的自定義循環。wordpress query(shortcode)總是返回第一篇文章

其中一個參數是多少職位輸出迴路($標記)

$args=array(
       'meta_key'=>'_mykey', 
       'post_status'=>'publish', 
       'post_type'=>'post', 
       'orderby'=>'date', 
       'order'=>'DESC', 
       'posts_per_page'=>$markers, 

); 

    $wp_query = new WP_Query(); 
      $wp_query->query($args); 

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

// do the loop using get_the_id() and $post->id 

endwhile;endif; 
wp_reset_query();//END query 

在occations我需要從所有職位($markers = '-1'),有時只有一個($markers = '1')或muliple ($markers = 'x')有數據。

所有這些工作在單頁/帖子很好 - 但我的問題是,當這個功能是在一個地方,我有不止一個職位(!is_single)和($ markers = '1')它總是會返回數據最新的帖子,而不是正確的.. (例如,在默認的wordpress主題,它會display10帖子 - 他們都將是相同的數據)

這顯然是$post->ID的問題 - 而是如何可以在執行自定義循環時使用正確的帖子ID在wp循環外?

我試圖通過

global $post; 
$thePostIDtmp = $post->ID; //get the ID before starting new query as temp id 
$wp_query = new WP_Query(); 
$wp_query->query($args); 
// Start Custom Loop 

if (!is_single()){ 
$post_id_t = $thePostIDtmp;} 
else { 
$post_id_t = $post->ID;} 

到ovverride問題,然後使用$post_id_t - 但它沒有似乎工作, 我不該用get_the_id()?或者我應該不使用查詢(並使用get_posts)?

任何想法/解決方案/想法?

回答

1

我會使用query_posts(http://codex.wordpress.org/Function_Reference/query_posts)而不是重寫$ wp對象。你應該能夠在頁面上包含儘可能多的循環,只要你想要這樣做。如果您遇到問題,您可以在致電前使用:http://codex.wordpress.org/Function_Reference/wp_reset_query

我覺得這個:http://blog.cloudfour.com/wordpress-taking-the-hack-out-of-multiple-custom-loops/ 也帶走了一些痛苦。

+0

謝謝你的答案 - 我懷疑我將需要使用query_posts()或get_posts()它似乎沒有幫助我的情況下,我不知道爲什麼.. – 2012-04-22 10:35:36

+0

你有沒有試過回顯出帖子ID所以你可以看到它的變化。如果你在if語句中回顯出來,並且設置了tmp變量,它可能會幫助你看到發生了什麼。 – matpol 2012-04-22 19:43:29

0

在WordPress中基本上有兩種查詢帖子:那些改變主循環和那些沒有。如果您想更改主循環(如用於顯示類別歸檔頁面的主循環),請使用query_posts。讓你做到這一點。刪除,更改和附加默認查詢的參數以更改典型頁面的結果。 雖然query_posts有一些drawbacks

然後,有些查詢只是用來從數據庫中獲取東西以便與其他人一起玩。在邊欄或當前帖子的附件中顯示最新的帖子標題。

爲此創建一個新的WP_Query對象將獨立建立自己的自定義循環主循環的,像這樣:

// The Query 
$the_query = new WP_Query($args); 

// The Loop 
while ($the_query->have_posts()) : $the_query->the_post(); 
    echo '<li>'; 
    the_title(); 
    echo '</li>'; 
endwhile; 

// Reset Post Data 
wp_reset_postdata(); 

再有就是get_posts()這就像WP_Query的小兄弟。在我看來,它有一個更簡單的界面,並返回一個數組,其結果更容易處理。 它看起來像這樣:

$myposts = get_posts($args); 
foreach($myposts as $post) : setup_postdata($post); 
    echo "<li>"; 
    the_title(); 
    echo "</li>"; 
endforeach; 

像get_the_id在foreach模板標籤內()會工作。

+0

謝謝。我會看看你提出的方法。我的問題不是查詢不起作用 - 我的問題是它一遍又一遍地返回第一個帖子。基本上 - 在「正常」的WP循環內,在內容中 - 我執行我的短代碼,但是如果我設置'posts_per_page'=> 1 - 它將始終返回第一個(相同)文章。 get_the_id()的作品,以及$ post-> ID - 但它們總是返回相同帖子的值...否則,在其他頁面中沒有問題(因爲wordpress循環總是隻有1 ..)。 – 2012-04-22 16:14:56

+0

「我的問題不在於查詢無法正常工作 - 我的問題是它會一遍又一遍地返回FIRST帖子」對我來說這聽起來像是您的查詢不起作用;) 只是遠離主查詢。創建一個新的WP_Query對象或使用get_posts(),你將沒有問題。 – 2012-04-22 16:26:45

+0

好吧,不幸的是我現在需要得到AFK,但我會盡快嘗試。我的查詢在所有的情況下都能正常工作,除了描述的情況。我將嘗試解釋,我有2個示例帖子,其中一個具有$ markers = -1,其他標記= 1。如果我使用get_posts - 第一個給了我完全相同的數據(對於post_meta),第二個很好,如果我改變爲新的post對象 - 第一個工作正常,第二個給出第一個標記作爲元數據的第一篇文章..我知道這有點令人困惑,我會盡快發佈一個例子,只要我回來。 – 2012-04-22 16:36:52

相關問題