2011-03-02 64 views
1

在主頁精選部分,我想顯示7個最新的帖子,它們是標記有標籤ID#50的常規​​帖子或具有帖子類型sp_events的自定義類型帖子。在特色部分顯示標記的帖子和自定義帖子

這不起作用。大概是因爲tag__in正在過濾未標記的自定義類型的帖子。我的PHP是如此糟糕,我看不出如何糾正這一點。

query_posts(
     array(
      'tag__in' => array(50), 
      'showposts' => '7', 
      'post_type' => array('post', 'sp_events') 
     ) 
    ); 

謝謝。

回答

0

如果我沒有弄錯(我肯定可能是),你不能做一個查詢,就像你試圖用Wordpress的內置函數一樣。

你可以做的是在你的functions.php文件(其中一個存儲主題的自定義函數)中有一個函數,該函數接受一個參數數組數組,並通過每次循環將循環添加到數組中。我認爲get_posts()將是最好的函數,因爲它返回一個數組中的帖子而不需要循環。

function query_posts_multiple($arrArgs) 
{ 
    if (!is_array($arrArgs)) return false; // Prevents warnings and fatal errors. 
    $posts = array(); 

    foreach ($arrArgs as $args) 
    { 
    $posts = array_merge($posts, get_posts($args)); 
    } 

    return $posts; 
} 

對於args數組,這裏有一個例子:

$args = array(); 
$args[] = array(
    'numberposts'  => 7, 
    'tag'    => "50", 
); 

你只用在你的主題一個foreach()循環。您可以使用$ post->時尚訪問數據。

$posts = get_posts_multiple($args); 
foreach ($posts as $post) 
{ 
    // call all the $post->COLUMNs your heart desires 
} 
unset($posts); // Delete that variable just to be safe. 

要限制帖子的數量,只需保持計數並在達到特定數量時停止循環。要隨機化陣列,可以使用shuffle()

這可能是這樣做的一個非常,非常骯髒的方式,責怪我極度疲倦......

洛根

+0

感謝洛根。這讓我走出了我有限的PHP舒適區。一位朋友確認你的建議確實很骯髒;) 令人驚訝的是,無法在同一部分調用自定義帖子和過濾「常規」帖子。似乎很基本。 – David 2011-03-07 22:34:46

+0

我同意。實際拉取帖子的查詢相當簡單,但爲什麼Wordpress決定忽略這些功能超出了我的想象。但是,他們在那裏設計的查詢意識並試圖限制對數據庫的查詢數量,所以也許這就是原因。誰知道。 – 2011-03-08 15:29:18

0

我的工作了。解決方案非常簡單:不是試圖讓過濾器只應用於「常規」帖子,而是讓標籤也適用於自定義帖子類型帖子。我沒有意識到這些標籤會在不同的帖子類型之間共享。

我只是增加了以下添加到functions.php和標記的自定義後類型職位:

add_action('init', 'add_taxonomy_objects'); 

function add_taxonomy_objects() { 
register_taxonomy_for_object_type('post_tag', 'sp_events'); 
}' 
相關問題