通过POST__NOT_IN排除ID

时间:2013-01-16 作者:Suzed

我试图在post查询中创建一个函数并排除,这样我就可以在我的函数中定义id,但它只排除1个post,而不是它返回的4个post。

关于如何成功执行此操作,有什么建议吗?

函数中的函数。php文件

function slider_exclude(){
    $exclude_query = query_posts(array(\'showposts\' => 4, \'cat\' => \'news\',));
    foreach($exclude_query as $post_ids){
        return $post_ids->ID.\',\';
    }
}
我的循环
$args = array(
    \'post__not_in\' => array(slider_exclude()),
    \'post_type\' => \'post\',
    \'posts_per_page\' => 15,
    \'paged\' => ( get_query_var(\'paged\') ? get_query_var(\'paged\') : 1)
);
query_posts($args);

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

您的PHP错误。

function slider_exclude(){
    $exclude_query = query_posts(array(\'showposts\' => 4, \'cat\' => \'news\',));
    foreach($exclude_query as $post_ids){
        return $post_ids->ID.\',\';
    }   
}
看起来您正在尝试构建逗号分隔的字符串,但事实并非如此return 作品当那foreach 点击return 函数返回--结束。不会处理任何其他内容。

从外观上看,您需要构建并返回一个数组。

function slider_exclude(){
    $ret = array();
    $exclude_query = query_posts(array(\'showposts\' => 4, \'cat\' => \'news\',));
    foreach($exclude_query as $post_ids){
        $ret[] = $post_ids->ID;
    } 
    return $ret;  
}
那么您的这一行就会有问题:

\'post__not_in\' => array(slider_exclude()),
因为现在将有一个嵌套数组。执行以下操作:

\'post__not_in\' => slider_exclude(),
或更好:

$args = array(
    \'post_type\' => \'post\',
    \'posts_per_page\' => 15,
    \'paged\' => ( get_query_var(\'paged\') ? get_query_var(\'paged\') : 1)
);
$exclude = slider_exclude();
if (!empty($exclude)) {
    $args[\'post__not_in\'] = $exclude;
}
query_posts($args);
这只会增加post_not_in 如果有什么要排除的条件。

结束

相关推荐