代码之家  ›  专栏  ›  技术社区  ›  Hooman

如何从woocommerce中的链接产品获取分组产品ID

  •  2
  • Hooman  · 技术社区  · 6 年前

    我有一个分组产品 ,它有许多链接产品:

    • |__产品-2(简单或可变产品)

    我想用product-2的ID获取product-1的ID

    1 回复  |  直到 6 年前
        1
  •  5
  •   LoicTheAztec    4 年前

    无法获取产品Id 一个特定的分组产品通过其子产品标识之一,因为每个子产品可以在许多不同的分组产品中。

    定义分组产品的子产品ID的唯一数据位于 wp_postmeta 桌子周围 meta_key _children

    function get_parent_grouped_id( $children_id ){
        global $wpdb;
        $results = $wpdb->get_col("SELECT post_id FROM {$wpdb->prefix}postmeta
            WHERE meta_key = '_children' AND meta_value LIKE '%$children_id%'");
        // Will only return one product Id or false if there is zero or many
        return sizeof($results) == 1 ? reset($results) : false;
    }
    

    代码进入函数.php活动子主题(或活动主题)的文件。测试和工作。

    用法

    在下面 738

    $parent_grouped_id = get_parent_grouped_id( 738 );
    

    WC_Product_Query :

    1. :

      $grouped\u products=wc\u get\u products(数组('limit'=>-1,'type'=>'grouped'));

    2. 分组产品数组 仅限于:

      $ids=wc\u get\u products(数组('limit'=>-1,'type'=>'grouped','return'=>'ids'));

        2
  •  0
  •   Andrey Serb    5 年前

    previous correct answer 通过@LoicTheAztec,并向其添加了一些缓存,以避免多个数据库请求。写这个是为了我的项目,只是和你分享-不要对我苛刻我在这里是新手。感谢@LoicTheAztec的初步回答。

    if ( ! function_exists( 'wc_get_parent_grouped_id' ) ) {
    
    function wc_get_parent_grouped_id( $id ){
    
        global $wpdb;
    
        $cdata = wp_cache_get( __FUNCTION__, 'woocommerce' );
    
        if ( ! is_array($cdata) )
            $cdata = array();
    
        if ( ! isset($cdata[$id]) ) {
    
            $cdata[$id] = $parent_id = $children = false;
    
            $qdata = $wpdb->get_row("SELECT post_id, meta_value
                                     FROM $wpdb->postmeta
                                     WHERE meta_key = '_children' 
                                     AND meta_value LIKE '%$id%'");
    
            if ( is_object($qdata) ) {
    
                $parent_id = $qdata->post_id;
                $children = $qdata->meta_value;
    
                if ( is_string($children) )
                    $children = unserialize($children);
    
                if ( is_array($children) && count($children) > 0 )
                    foreach ($children as $child_id)
                        $cdata[$child_id] = $parent_id;
            }
    
            wp_cache_set( __FUNCTION__, apply_filters( __FUNCTION__ . '_filter', $cdata, $id, $parent_id, $children, $qdata ), 'woocommerce' );
        }
    
        return $cdata[$id];
    }
    

    }