我想你想要的是posts_where
过滤器,允许您添加其他WHERE
SQL查询的子句get_posts
生成。这将节省您访问数据库的时间,以便只获取父帖子。
挂钩函数将接收两个参数:WHERE
子句本身和查询对象。检查该查询是否用于city
post类型,然后从那里修改where子句。
<?php
add_filter( \'posts_where\', \'wpse29897_no_parents\', 10, 2 );
function wpse29897_no_parents( $where, $query )
{
if( isset( $query->query_vars[\'post_type\'] ) && \'city\' == $query->query_vars[\'post_type\'] )
{
if( \'\' != $where )
{
$where .= \' AND post_parent != 0\';
}
else
{
$where .= \' post_parent != 0\';
}
}
return $where;
}
我猜您不希望每个涉及
city
然而,post类型。所以你最好还是坚持
add_filter
在创建新WP\\U查询对象的正上方调用。然后贴上
wpse29897_no_parents
在您的
functions.php
文件或插件。
<?php
add_filter( \'posts_where\', \'wpse29897_no_parents\', 10, 2 );
$city = new WP_Query(array(\'post_type\' => \'city\', \'orderby\' => \'name\', \'order\' => \'ASC\', \'posts_per_page\' => -1 ));
while ($city->have_posts() ) : $city->the_post();
?>
<?php the_title(); ?>
<?php endwhile; ?>
您甚至可以在循环后移除过滤器,以确保安全。
<?php remove_filter( \'posts_where\', \'wpse29897_no_parents\', 10, 2 ); ?>