隐藏 Woocommerce 循环中分组产品中的儿童产品

让分配给分组产品的所有单一产品在存档/类别页面上可用并可见并不是一个理想的解决方案,我想知道如何解决这个问题。

我知道 WooCommerce 中有一个“可见性”选项,但这更不理想。

据我了解,WooCommerce 现在用于meta data此用途,而不是post_parent用于此目的,因此,我请求帮助以了解如何更新此查询以涵盖该查询。

我尝试过的这里的代码不再起作用:

add_action( 'woocommerce_product_query', 'hide_single_products_assigned_to_grouped_product_from_archive' );

function hide_single_products_assigned_to_grouped_product_from_archive( $q ){

    $q->set( 'post_parent', 0 );

}


婷婷同学_
浏览 115回答 1
1回答

阿波罗的战车

您无法真正在产品查询中定位分组产品中的子产品,因为数据作为序列化数组存储_children在表上的 meta_key下。wp_post_meta但您可以做的是首先向分组产品中的所有子产品添加自定义字段。然后您将能够使用该自定义字段来更改产品查询。以下函数将完成该工作,并且您只需运行它一次:function add_a_custom_field_to_grouped_children_products() {    // get all grouped products Ids    $grouped_ids = wc_get_products( array( 'limit' => -1, 'type' => 'grouped', 'return' =>'ids' ) );    // Loop through grouped products    foreach( $grouped_ids as $grouped_id ){        // Get the children products ids        $children_ids = (array) get_post_meta( $grouped_id, '_children', true );        // Loop through children product Ids        foreach( $children_ids as $child_id ) {            // add a specific custom field to each child with the parent grouped product id            update_post_meta( $child_id, '_child_of', $grouped_id );        }    }}add_a_custom_field_to_grouped_children_products(); // Run the function代码位于活动子主题(或活动主题)的functions.php 文件中。保存后,浏览您网站的任何页面。然后删除该代码并保存。现在,所有分组的儿童产品都将有一个自定义字段。如果您添加/创建更多分组产品,您将需要以下函数来将该自定义字段添加到子产品中:// Add on the children products from a grouped product a custom fieldadd_action( 'woocommerce_process_product_meta_grouped', 'wc_action_process_children_product_meta' );function wc_action_process_children_product_meta( $post_id ) {    // Get the children products ids    $children_ids = (array) get_post_meta( $post_id, '_children', true );    // Loop through children product Ids    foreach( $children_ids as $child_id ) {        // add a specific custom field to each child with the parent grouped product id        update_post_meta( $child_id, '_child_of', $post_id );    }}代码位于活动子主题(或活动主题)的functions.php 文件中。经过测试并有效。现在完成,将隐藏所有产品的函数循环分组产品中的子产品:add_filter( 'woocommerce_product_query_meta_query', 'hide_children_from_grouped_products' );function hide_children_from_grouped_products( $meta_query ) {    if( ! is_admin() ) {        $meta_query[] = array(            'key'     => '_child_of',            'compare' => 'NOT EXISTS'        );    }    return $meta_query;}代码位于活动子主题(或活动主题)的functions.php 文件中。经过测试并有效。
打开App,查看更多内容
随时随地看视频慕课网APP