我正在开发基于woocommerce的shoppingmall。
我确实在每个产品上添加了一些“post meta”。
如你所知,如果我们点击商店页面,wordpress核心查询如下
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
WHERE 1=1
AND ( wp_posts.ID NOT IN (
SELECT object_id
FROM wp_term_relationships
WHERE term_taxonomy_id IN (16) ) )
AND wp_posts.post_type = \'product\'
AND (wp_posts.post_status = \'publish\')
GROUP BY wp_posts.ID
ORDER BY wp_posts.menu_order, wp_posts.post_date DESC, wp_posts.ID DESC
LIMIT 0, 12
我想添加一些这样的条件
仅获取与此项目关联的“\\u user\\u request”为“post meta”的产品为“yes”
因此,如果某个产品的“post meta”的“user\\u request”为“no”,则不要获取此产品。
我该怎么做?
SO网友:Byeongin Yoon
function rpf_add_query_var_not_to_show_user_request_product($query) {
$post_type = $query->get( \'post_type\' );
if ( ! is_null($post_type) && $post_type == \'product\' ) {
$query->set( \'meta_key\', \'_user_request\' );
$query->set( \'meta_value\', \'no\' );
$query->set( \'meta_compare\', \'=\' ); // default
}
}
add_action( \'pre_get_posts\',
\'rpf_add_query_var_not_to_show_user_request_product\', 100, 1 );
是的,pre\\u get\\u posts是天堂!和$query->set(),$query->get()是天使!