限制同一wp_Query中不同自定义帖子类型的帖子

时间:2013-01-09 作者:rodboc

我有三种自定义帖子类型:

现在我想限制自定义帖子类型的帖子数量,例如:

我使用了这样一个查询帖子:

query_posts( array(
    \'post_type\' => array(
    \'books\',
    \'magazine\',
    \'videos\'
),
\'paged\' => $paged,
\'posts_per_page\' => 6, 
));
$counter = 1;
if (have_posts()) :
    while (have_posts()) : the_post();  
if (($counter == 2) || ($counter == 3) || ($counter == 4)) {
        $div = \'alpha\';
    } elseif(($counter == 6)) {
        $div = \'omega\';
    } else {
        $div = \'\';
    }
问题是我无法通过自定义帖子类型限制数量。有什么想法吗?

谢谢:)

2 个回复
SO网友:s_ha_dum

我讨厌写“你做不到”的答案,但你做不到。这是你关于你是否可以用一个WP_Query. 您不能在同一查询中使用WP_Query (您实际上正在使用query_posts. 请不要。它不是二次回路的正确工具。)

即使在原始SQL中,也必须编写单独的查询和UNION them together, 这就是我的做法。

$sql = "(SELECT ID FROM {$wpdb->posts} WHERE post_type = \'books\' AND post_status = \'publish\' LIMIT 3)
UNION ALL
(SELECT ID FROM {$wpdb->posts} WHERE post_type = \'magazines\' AND post_status = \'publish\' LIMIT 2)
UNION ALL
(SELECT ID FROM {$wpdb->posts} WHERE post_type = \'videos\' AND post_status = \'publish\' LIMIT 1)";
// be sure to add any other conditions you need
$ids = $wpdb->get_col($sql);
然后运行这些$ids 通过一个新的WP_Query 要获得适当循环所需的post对象。

您甚至可以将SQL分解为一个模式并重用它。类似于。。。

$sqlpat = "(SELECT ID FROM {$wpdb->posts} WHERE post_type = \'%s\' AND post_status = \'publish\' LIMIT %d)";
$sql = \'(\'.sprintf($sqlpat,\'books\',3).\') UNION ALL (\'.sprintf($sqlpat,\'magazines\',2).\') UNION ALL (\'.sprintf($sqlpat,\'videos\',1).\')\';
假设我没有犯错误(代码没有经过测试),那么您应该拥有您想要的内容——三种post类型,每种类型都有一个特定的计数。它们可能不会按照您想要的顺序出现,因此您可能需要在PHP中对它们进行排序,或者构建更复杂的SQL查询。

SO网友:luke

可以通过合并查询来实现这一点:

$q1 = get_posts(array(
    \'post_type\' => \'books\',
    \'posts_per_page\' => 3
));

$q2 = get_posts(array(
    \'post_type\' => \'magazines\',
    \'posts_per_page\' => 2
));

$q3 = get_posts(array(
    \'post_type\' => \'videos\',
    \'posts_per_page\' => 1
));

$merged = array_merge( $q1, $q2, $q3 );

$post_ids = array();
foreach( $merged as $item ) {
    $post_ids[] = $item->ID;
}

$unique = array_unique($post_ids);

$args = array(
    \'post_type\' => array(
    \'books\',
    \'magazine\',
    \'videos\'
    ),
    \'post__in\' => $unique,
    \'post_status\' => \'publish\',
    \'posts_per_page\' => 6
);

$the_query = new WP_Query( $args );

while ( $the_query->have_posts() ) : $the_query->the_post();
// post stuff here
endwhile;

结束

相关推荐

Refine custom posts by author

我想有一种为特定作者显示自定义后期存档的方法。我能够显示某个类别的自定义帖子,但不仅仅是作者的自定义帖子。我已经有了一个单独的作者页面模板,显示他们写的所有帖子,按帖子类型划分。我使用以下方式查询此信息:query_posts( array( \'post_type\' => \'custom_post_name\', \'author\'=>$curauth->ID ) ); while (have_p