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”操作以排除这些标识符