【问题标题】:How to get the Variation ID in a Woocommerce product如何在 Woocommerce 产品中获取变体 ID
【发布时间】:2015-12-31 05:17:53
【问题描述】:

我正在尝试输入一个插件,我正在编写产品的变体 ID。这是我写的:

class mass {

    public function __construct()
    {
        add_action('woocommerce_product_after_variable_attributes',array($this,'thfo_mass'));


    }
public function thfo_mass()
    {
        $id = WC_Product_Variation::get_variation_id();
        //$lenght = get_post_meta($id,'_length');
        //$dimensions = wc_get_dimension(24750, 'cm');
        var_dump($id);
    }

我只得到一个错误:

已弃用:不应静态调用非静态方法 WC_Product_Variation::get_variation_id(),假设 $this 来自 path/to/plugins/thfo-raw-material-for-woocommerce/class/mass.php 中的不兼容上下文第 19 行

注意:未定义的属性:第 257 行的 path/to/wp-content/plugins/woocommerce/includes/class-wc-product-variation.php 中的 mass::$variation_id 整数(0)

【问题讨论】:

标签: php wordpress woocommerce variation


【解决方案1】:

试试这个。

 <?php 
    $product_obj = new WC_Product_Factory();
    $product = $product_obj->get_product($product);                             
    if ($product->product_type == 'variable'):
        $children   = $product->get_children( $args = '', $output = OBJECT ); 
        foreach ($children as $key=>$value) {
            $product_variatons = new WC_Product_Variation($value);
            if ( $product_variatons->exists() && $product_variatons->variation_is_visible() ) {
                $variations[$value] = $product_variatons->get_variation_attributes();
            }
        }
   endif;

【讨论】:

    【解决方案2】:

    get_variation_id 根本不是静态方法。

    你需要创建WC_Product_Variation的实例/对象,然后才能使用。

    喜欢---

    $variable_product = new WC_Product_Variation($value);
    $variable_product->get_variation_id();
    

    【讨论】:

    • $value 是什么?
    • 变量值
    • 什么是变异值?
    • 示例,您添加了一个名为 color 的变体,其值为红色、绿色、蓝色等
    【解决方案3】:

    到目前为止,这是我设法弄清楚的:

    首先,获取颜色:

    $colour = isset( $_REQUEST[ 'attribute_' . sanitize_title( 'pa_colour' ) ] ) ? wc_clean( stripslashes( urldecode( $_REQUEST[ 'attribute_' . sanitize_title( 'pa_colour' ) ] ) ) ) : $product->get_variation_default_attribute( 'pa_colour' );
    

    然后在生成复选框的 foreach 循环中:

    $variation_id = searchForVariants($colour, $size, $available_variations);
    $product_shipping_classes = get_the_terms( $variation_id, 'product_shipping_class' );
    $product_shipping_class_name = ( $product_shipping_classes && ! is_wp_error( $product_shipping_classes ) ) ? current( $product_shipping_classes )->name : '';
    

    那么你可以使用current( $product_shipping_classes )-&gt;term_id或current( $product_shipping_classes )-&gt;slug或current( $product_shipping_classes )-&gt;name。

    searchForVariants 函数在我的functions.php 文件中:

    function searchForVariants($colour, $size, $array) {
    
        foreach ($array as $key => $sub_array) {
    
            if ($sub_array['attributes']['attribute_pa_colour'] === $colour && $sub_array['attributes']['attribute_pa_size'] === $size) {
               return $sub_array['variation_id'];
            } else {
                continue;
            }
        }
    }
    

    $available_variations 数组已经在 variable.php 的店面主题中,但我使用的是子主题,因此复制了模板文件以进行这些更改。

    【讨论】:

      【解决方案4】:

      请查看此结果:How to get Woocommerce Variation ID?

      $args = array(
          'post_type'     => 'product_variation',
          'post_status'   => array( 'private', 'publish' ),
          'numberposts'   => -1,
          'orderby'       => 'menu_order',
          'order'         => 'asc',
          'post_parent'   => get_the_ID() // get parent post-ID
      );
      $variations = get_posts( $args );
      
      foreach ( $variations as $variation ) {
      
          // get variation ID
          $variation_ID = $variation->ID;
      
          // get variations meta
          $product_variation = new WC_Product_Variation( $variation_ID );
      
          // get variation featured image
          $variation_image = $product_variation->get_image();
      
          // get variation price
          $variation_price = $product_variation->get_price_html();
      
          get_post_meta( $variation_ID , '_text_field_date_expire', true );
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-14
        • 2019-04-04
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        • 2022-06-13
        • 2018-07-20
        相关资源
        最近更新 更多