Wordpress 排除woocommerce中的分组产品子项,不排除简单产品
此代码正在工作,但我需要包含单个产品,而不包含与之关联的父分组产品Wordpress 排除woocommerce中的分组产品子项,不排除简单产品,wordpress,woocommerce,Wordpress,Woocommerce,此代码正在工作,但我需要包含单个产品,而不包含与之关联的父分组产品 add_action( 'woocommerce_product_query', 'remove_grouped_children' ); function remove_grouped_children( $q ) { //get current loop query $taxonomy_query = $q->get('tax_query') ; //appends the grouped
add_action( 'woocommerce_product_query', 'remove_grouped_children' );
function remove_grouped_children( $q ) {
//get current loop query
$taxonomy_query = $q->get('tax_query') ;
//appends the grouped products condition
$taxonomy_query['relation'] = 'AND';
$taxonomy_query[] = array(
'taxonomy' => 'product_type',
'field' => 'slug',
'terms' => array('grouped','variable')
);
$q->set( 'tax_query', $taxonomy_query );
}
这是一个散步,但最终工作
function wr_convert_array_to_ids(){
$products = wr_get_grouped_product_children();
$post_ids = array();
foreach ($products as $product){
foreach ($product as $id){
array_push($post_ids,$id);
}
}
return $post_ids;
}
function wr_get_grouped_product_children(){
global $wpdb;
$products = $wpdb->get_results(
$wpdb->prepare("SELECT * FROM $wpdb->prefix" . "postmeta WHERE meta_key = %s", '_children'),ARRAY_A
);
$products_id = array();
foreach($products as $product){
array_push($products_id, unserialize($product['meta_value']));
}
return $products_id;
}
function wr_custom_get_posts( $query ) {
if ( is_admin() || ! $query->is_main_query() )
return;
if ( $query->is_archive() || $query->is_shop()) {
$query->set( 'post__not_in', wr_convert_array_to_ids() );
}
}
add_action( 'pre_get_posts', 'wr_custom_get_posts', 1 );
由于分组产品的子项位于保存为序列化数组的meta_key_子项下的post meta表中,因此首先要获取所有子项,然后将它们保存在数组中,并调用“pre_get_posts”操作以排除这些标识符