【问题标题】:Get attribute slug value by variation ID in Woocommerce在 Woocommerce 中通过变体 ID 获取属性 slug 值
【发布时间】:2018-11-30 17:40:37
【问题描述】:

我正在构建一个自定义产品页面,但我遇到了变体问题

这是我的代码:

global $product;
$variations = $product->get_available_variations();

foreach($variations as $variation)
{

     $variation_id = $variation['variation_id'];

     $variation_obj = new WC_Product_variation($variation_id);

     //THIS IS PROBLEM FAIL TEST (It's exemple)
     $type = $variation_obj->get_attributes()->get_name();
     //-----

     $stock = $variation_obj->get_stock_quantity();
     $COD = $variation_obj->get_sku();
     $regularprice = $variation_obj->get_regular_price();
     $saleprice = $variation_obj->get_sale_price();
     $diff = $regularprice-$saleprice;

     echo "<p>Variation: " .$type."</p>";
     echo "<p>P.Code: " .$COD."</p>";
     echo "<p>Regular price: ".$regularprice."</p>";
     echo "<p>Sale price: ".$saleprice."</p>";
     echo "<p>Difference: ". $diff."</p>";
     echo "<p>Stock: ".$stock."</p>";
}

我想知道是否可以提取属性或变体的单一名称?

还是没有完整标题的变体名称?

示例: 我想要“蓝色”......而不是“神奇美丽的 Pouf Lumaland - 蓝色”

任何形式的帮助都将不胜感激。

【问题讨论】:

    标签: php wordpress woocommerce custom-taxonomy variations


    【解决方案1】:

    属性 slug 值的数组包含在 $variation 数组中。所以试试这个:

    global $product;
    if($product->is_type('variable')){
        $variations = $product->get_available_variations();
    
        foreach($variations as $variation)
        {
            $variation_obj = wc_get_product($variation['variation_id']);
    
            // Variation can have many poduct attributes
            $attr_slugs = implode(', ', $variation['attributes']);
    
            $stock = $variation_obj->get_stock_quantity();
            $COD = $variation_obj->get_sku();
            $regularprice = $variation_obj->get_regular_price();
            $saleprice = $variation_obj->get_sale_price();
            $diff = $regularprice-$saleprice;
    
            echo "<p>Var Name: " .$attr_slugs."</p>";
            echo "<p>Var Name: " .$COD."</p>";
            echo "<p>regular price: ".$variation['display_regular_price']."</p>";
    
            echo "<p>sale price: ".$saleprice."</p>";
            echo "<p>risparmi: ". $diff."</p>";
            echo "<p>in stock: ".$stock."</p>";
        }
    }
    

    经过测试并且有效。

    【讨论】:

    • 非常感谢 :)
    【解决方案2】:

    更新代码:

    现在可以从一个 id 循环所有可能的变体,并为它们分配一个 id 以通过 Js 定位它们:

    // cicle all outputs
    $allvariations = $product->get_available_variations();
    foreach($allvariations as $variation)
    {
    
        // find actual variation, ID
        $this_Variation     = wc_get_product($variation['variation_id']);
    
        // all sub value of the ID
        $type_selected      = implode(', ', $variation['attributes']); // this create a simple autoput name
        $type_target        = implode('_', $variation['attributes']); // this create a Id for targetting the correct outputs
        $stock_status       = $this_Variation ->get_stock_status();
        $stock              = $this_Variation ->get_stock_quantity();
        $COD                = $this_Variation ->get_sku();
        $regularprice       = $this_Variation ->get_regular_price();
        $saleprice          = $this_Variation ->get_sale_price();
        $diff               = $regularprice-$saleprice;
        $imgurl             = $variation['image']['url'];
        //... and other if you wont
    
    
        //output
        echo'<div id="'.$type_target.'">';
    
            // html Output:
            if( $imgurl )
            {
                echo '<img src="'.$imgurl.'"/>';
            }
            else
            {
                echo '<img src="unavailabe" />';
            }
    
            echo "<p>Product type: " .$type_selected."</p>";
            echo "<p>P. COD: " .$COD."</p>";
    
            if( $saleprice >= 1 )
            {
                echo "<p>Regular price: ".$variation['display_regular_price']."</p>";
                echo "<p>Sale price: ".$saleprice."</p>";
                echo "<p>Sale difference: ". $diff."</p>";
            }
            else
            {
                echo "<p>Price: ".$variation['display_regular_price']."</p>";
            }
    
            if( $stock == 0 || $stock_status == "outofstock" )
            {
                echo "<p><b>OUT OF STOCK!</b></p>";
            }
            else
            {
                echo "<p>We have: ".$stock." atricles in stock</p>";
            }
    
        echo "</div>";
    }
    

    产品输出示例(所有产品和提取选项的循环):

    <div id="Small_Orange">
       <img src="http://xxxx/xxx/theimage.jpg">
       <p>Product type: Small, Rose</p>
       <p>P. COD: PF_LMLND-112233</p>
       <p>Price: 22</p>
       <p>We have: 150 atricles in stock</p>
    </div>
    

    对于目标它我们需要一个属性。 我们可以通过这个得到它(这是一个简单的想法):

    // cicle all options
    foreach ( $product->get_attributes() as $attribute )
    {
    
    
        // Write a option name group (ex... "color")
        echo "<p><b>".$attribute['name']."</b></p>";
    
    
        // Loop the attr by name
        $attributeValues = explode('|',$attribute['value']);
        foreach ( $attributeValues as $thisValue )
        {
    
            // From name to radio selector
            echo $attributes_list = '
                <span class="button-group">
                    <label for="'.$thisValue.'">'.$thisValue.'</label>
                    <input class="button-radio" type="radio" id="'.$thisValue.'" name="'.$attribute['name'].'" />
                </span>
                ';
        }
    
    }
    

    现在我们有一个单选或按钮或其他用于将 id 定位到输出列表中。 现在,很快就会看到你的最终代码......

    感谢您的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-15
      • 2016-09-27
      • 1970-01-01
      • 1970-01-01
      • 2016-05-11
      • 2017-11-26
      • 1970-01-01
      • 2015-12-31
      相关资源
      最近更新 更多