首先:当然,从理论上讲,您可以使用原始MySQL查询WordPress数据库
请参见wpdb
\'sget_results
方法这可能会为您节省第二个查询,但显然不会返回正确的WP_Post
对象。
尽管如此,如果你想使用WP_Query
, 您将无法使用两个查询。我还是推荐它胜过以上也许效率较低,但肯定不会那么麻烦。除非您的posts表非常庞大,否则它应该不会是一个问题。
首先,获取最新的12篇聚合文章,遍历元数据,然后获取实际的12篇来显示。可能看起来不是最油滑的,但无论如何:
$twelve_aggregatos = new WP_Query(
array(
\'post_type\' => \'aggregato\',
\'posts_per_page\'=> 12,
\'meta_query\' => array(
array(
\'key\' => \'home\',
\'value\' => 0,
\'compare\' => \'>\'
)
)
)
);
$linked_posts = array();
if ( $twelve_aggregatos->have_posts() ) {
while ( $twelve_aggregatos->have_posts() ) {
$twelve_aggregatos->the_post();
$current_ID = get_the_ID();
for ( $i = 1; $i <= 10; $i++ ) {
/* The below asumes that the custom fields hold post IDs */
$linked_ID = get_post_meta(
$current_ID,
\'link\'.str_pad( $i, 2, \'0\', STR_PAD_LEFT ),
true
);
/* Should they hold URLs, use the following instead */
/* $linked_ID = url to postid(
get_post_meta(
$current_ID,
\'link\'.str_pad( $i, 2, \'0\', STR_PAD_LEFT ),
true
)
); */
if ( ! in_array( $linked_ID, $linked_posts ) ) {
$linked_posts[] = $linked_ID;
}
}
}
}
wp_reset_postdata();
$twelve_reults = new WP_Query(
array(
\'post_type\' => array( \'post\', \'aggregato\' ),
\'posts_per_page\'=> 12,
\'meta_query\' => array(
array(
\'key\' => \'home\',
\'value\' => 0,
\'compare\' => \'>\'
)
)
\'post__not_in\' => $linked_posts
)
);
/* Loop over results, do something */
wp_reset_postdata();