简而言之,我有以下情况:由具有自定义帖子类型的用户发布的产品。打电话给他们"广告"。广告有一个1-1链接到WooCommerce产品。 除此之外,我还有供应商项目的WooCommerce产品(它们由多个供应商插件添加),并通过其meta_key" _vendor_product"与其他post_type产品区分开来。设为1.
到目前为止,我做了2个查询并添加了它们:
$ads = new WP_Query(
array(
'post_type' => 'ads',
'paged' => $paged,
'post_status' => 'publish',
'meta_query' => array(
array(
'key' => 'product_id',
'value' => $product_ids,
'compare' => 'IN'
)
)
)
);
$shop_items = new WP_Query(
array(
'post_type' => 'product',
'paged' => $paged,
'post__in' => $product_ids,
'meta_query' => array(
array(
'key' => '_vendor_product',
'value' => 1,
'compare' => '='
)
)
)
);
}
// Include shop items in the stream of products
$wp_query = new WP_Query(array('paged' => $paged));
$wp_query->posts = array_merge( $ads->posts, $shop_items->posts );
$wp_query->post_count = $ads->post_count + $shop_items->post_count;
但是我需要在一个WP_Query中使用它们,否则我的动作/过滤器/分页似乎会破坏。
我知道我可以按'post_type' => array( 'ads', 'product' )
查询不同的post_types,但_vendor_product = 1
的条件仅适用于post_type product
的项目,而不适用于ads
。
我需要的基本上是
SELECT * FROM wp_posts, wp_postmeta
WHERE (post_type = 'ads')
OR
(post_type = 'product' AND meta_key = '_vendor_product' AND meta_value = 1)
AND
wp_posts.ID = wp_postmeta.post_id
是否有可能在WP_Query的范围内实现这一目标?
答案 0 :(得分:0)
我怀疑你可以直接在一个查询中实现它(但是有人可能会提出一个解决方案)。但是我建议一个简单的解决方法来解决这个问题 - 找出帖子ID并从中发出一个查询:
var chat = $('.nano-content');
var chatItems = $('.mar-btm').length;
chat.animate({scrollTop: (chat.prop('scrollHeight') * chatItems)});
答案 1 :(得分:0)
我基本上以Blackbam建议的方式实现了我的结果,尽管没有直接涉及SQL。
如果有人发现这个,我会发布我的解决方案,因为它让我有点头疼,弄清楚为什么我的结果在WP_Query上使用get_posts时限制为10(WP_Query中的解决方案是'nopaging'
。 / p>
$ps_ads = new WP_Query(
array(
'post_type' => 'ads',
'fields' => 'ids',
'nopaging' => true,
'post_status' => 'publish'
)
);
$shop_items = new WP_Query(
array(
'post_type' => 'product',
'fields' => 'ids',
'nopaging' => true,
'post__in' => $product_ids,
'meta_query' => array(
array(
'key' => '_vendor_product',
'value' => 1,
'compare' => '='
)
)
)
);
}
// Sum up all IDs
$ad_ids = $ps_ads->get_posts();
$shop_items_ids = $shop_items->get_posts();
$ids = array_merge($ad_ids, $shop_items_ids);
$wp_query = new WP_Query(
array(
'post_type' => array( 'ads' , 'product' ),
'paged' => $paged,
'post__in' => $ids
)
);
希望它有所帮助。