为什么这个wp_Query不排除某些页面?

时间:2013-07-11 作者:Poisontonomes

我使用以下wp\\u查询片段显示单个页面上的所有页面,同时可以选择要排除的各个页面。

// This pulls a list of page ID\'s from a theme options multicheck field
$pages = of_get_option(\'exclude_pages\' );
// This shows only those ID\'s that have been checked
$implode_pages = implode(\', \',array_keys($pages, 1));
$args = array(
    \'post_type\' => \'page\',
    \'posts_per_page\' => -1,
    \'orderby\' => \'menu_order\',
    \'order\' => \'asc\',
    \'post__not_in\' => array($implode_pages)
);
$page_query = new WP_Query($args);
while ($page_query->have_posts()) : $page_query->the_post();
如果我只是回应$implode_pages 显示如下的页面中的位12, 31 其中12和31是页面ID

但当我尝试将其包含在post__not_in 参数,如上所示,它只排除第一个ID,即使我硬编码12, 31 在那里它排除了。。。

我做错什么了吗?

3 个回复
最合适的回答,由SO网友:Johannes Pille 整理而成

硬编码的array( 12, 31 ) 是否与array($implode_pages).

较早者相当于
array( 0 => 12, 1 => 31 )

后者相当于
array( 0 => \'12, 31\' )

$implode_pages = implode(\', \',array_keys($pages, 1)); 制造$implode_pages 字符串-不是您想要的字符串<不仅如此,这是一个完全多余的步骤。

\'post__not_in\' => array_keys($pages, 1)
应该。。。

SO网友:s_ha_dum

post__not_in takes an array:

post\\u not\\u in(数组)-使用post ID。指定不检索的帖子。

根据您的代码,of_get_option 为您提供一个数组,其中键设置为postIDs、 因此,您需要的是:

$pages = of_get_option(\'exclude_pages\' );
// This shows only those ID\'s that have been checked
$implode_pages = array_keys($pages, 1);
$args = array(
    \'post_type\' => \'page\',
    \'posts_per_page\' => -1,
    \'orderby\' => \'menu_order\',
    \'order\' => \'asc\',
    \'post__not_in\' => $implode_pages,
);
$page_query = new WP_Query($args);

SO网友:Pat J

Codex page for WP_Query:

post\\u not\\u in(array) - 使用post ID。指定不检索的帖子。

因此,我们没有通过$implode_pages, 只需使用$pages 从中获取的数组of_get_option( \'exclude_pages\' ).

Edited to add 哎呀,我应该在发帖之前仔细检查一下你的问题——我看错了array( $implode_pages ) 简单地说$implode_pages.

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post