Jenny,首先,我想你最好使用Taxonomy Parameters 在您的查询中。然而,在某种程度上,有几种黑客方法可以实现您的愿望。
$my_query = new WP_Query( \'post_type=post&posts_per_page=-1\' );
$posts = $my_query->get_posts();
foreach ( $posts as &$post ) {
// Get the details and unset if thy type is unwanted
$details = get_post_meta( $post->ID, \'details\', true );
if ( isset($details[\'type\'])
and $details[\'type\'] != \'my_type \')
unset( $post );
}
这将筛选出与
type
属于
my_type
在您的
details
该职位的meta。
但是,请注意性能问题-get_post_meta
为每个帖子调用,从而查询数据库。哎哟
有一种更复杂的方法可以使用自定义查询一次获取所有元,如下所示:
$sql = "SELECT `post_id`, `meta_value`".
" FROM {$wpdb->postmeta}".
" WHERE `meta_key` = \'details\'";
// Gather my meta
$metas = $wpdb->get_results( $sql );
$details = array();
foreach ( $metas as $meta ) $details[$meta->post_id] = unserialize($meta->meta_value);
$my_query = new WP_Query( \'post_type=post&posts_per_page=-1\' );
$posts = $my_query->get_posts();
foreach ( $posts as &$post ) {
// Filter the unwanted posts
if ( isset($details[$post->ID][\'type\'])
and $details[$post->ID][\'type\'] != \'my_type\' )
unset( $post );
}
这样,您只需执行一个额外的查询,即在开始时引入meta。这里需要注意以下几点:
基本原则就在那里-获取所有帖子,并通过unset
ting
$wpdb`应该在范围内(如果您在函数或方法中,请将其作为全局函数引入)如果您要使用" WHERE meta_key = \'details\'";
请确保对输入到查询中的内容进行转义,否则会有SQL注入的风险,请将这些内容封装到函数中,以便重用它们。如果查询中有很多帖子,这可能会变得很慢