2011-03-02 46 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'); 
}' 
相关问题