woocommerce_available_variation 过滤器在 Woocommerce 3 更新后不再工作

问题描述 投票:0回答:2

我为 woocommerce 编写的一些自定义代码在更新到 woocommerce 3 后无法正常工作。在这种特殊情况下,它是 woocommerce_available_variation 过滤器。我用它根据产品属性动态插入产品变体描述。

截至目前,我收到此错误消息:

可捕获的致命错误:类 WC_Product_Download 的对象无法转换为第 376 行 /home/silent48/public_html/wp/wp-content/plugins/woocommerce/includes/wc-product-functions.php 中的字符串

我需要对以下代码执行什么操作才能使其兼容 3.0?

add_filter( 'woocommerce_available_variation', 'change_variation_descriptions');
function change_variation_descriptions( $descriptions) {


global $post, $woocommerce;


    $basicmp3des = '<div class="licensedetails">
                    <li>-Delivered in mp3 format instantly after purchase</li>
                    <li>-Synchronization rights are granted</li>
                    <li>-One commercial use is permitted (ie: mixtape, album, etc)</li>
                    <li>-You may distribute up to 5000 profitable units</li>
                    <li>-Includes non-exclusive contract agreement (e-signed at checkout)</li>
                    <li>-Send me a quote to inquire about Exclusive License purchase!</li>
                    </div>';    
    

    

        
     foreach ( $descriptions as $description ) {
        $variation =  wc_get_formatted_variation($description, true );
                    
            
            if (strpos($variation, 'Basic License') !== false && strpos($variation, 'mp3') !== false ) {
                    $descriptions['variation_description'] = $basicmp3des;
            }
            
     }
     
            return $descriptions;     
}   
php wordpress woocommerce
2个回答
2
投票

这里有两种方法......我不在家,所以现在无法测试它们。首先,我们可以尝试更新您所需要的内容以适应正在传递的数据数组的结构。在这两种情况下,我都试图检查变体是否分配了正确的属性,但这是我无法完全测试的部分,因此条件可能无法准备好剪切/粘贴。如果它不起作用,您可以查看

var_dump( $attributes );
或者如果您启用了错误日志记录
error_log( json_encode( $attributes ) )
来查看属性键/值对的真正含义。

add_filter( 'woocommerce_available_variation', 'change_variation_descriptions', 10, 3 );
function change_variation_descriptions( $data, $product, $variation ) {

    // Returns array of attribute name value pairs. Keys are prefixed with attribute_, as stored.
    $attributes = $variation->get_attributes();

    if( isset( $attributes['pa_license-options'] && 'basic-license' == $attributes['pa_license-options'] && isset( $attributes['pa_delivery-format'] ) && 'mp3' == $attributes['pa_delivery-format'] ) ) {
        $data['variation_description'] = '<div class="licensedetails">
                    <li>-Delivered in mp3 format instantly after purchase</li>
                    <li>-Synchronization rights are granted</li>
                    <li>-One commercial use is permitted (ie: mixtape, album, etc)</li>
                    <li>-You may distribute up to 5000 profitable units</li>
                    <li>-Includes non-exclusive contract agreement (e-signed at checkout)</li>
                    <li>-Send me a quote to inquire about Exclusive License purchase!</li>
                    </div>';    

    }

    return $data;     
}   

接下来,我认为我们可以一直过滤变体描述:

add_filter( 'woocommerce_product_get_description', 'kia_filter_description', 10, 2 );
function kia_filter_description( $desc, $product ) {
    if( $product->is_type( 'variation' ) ) {
        // Returns array of attribute name value pairs. Keys are prefixed with attribute_, as stored.
        $attributes = $product->get_attributes();

        if( isset( $attributes['pa_license-options'] && 'basic-license' == $attributes['pa_license-options'] && isset( $attributes['pa_delivery-format'] ) && 'mp3' == $attributes['pa_delivery-format'] ) ) {
            $desc .= '<div class="licensedetails">
                    <li>-Delivered in mp3 format instantly after purchase</li>
                    <li>-Synchronization rights are granted</li>
                    <li>-One commercial use is permitted (ie: mixtape, album, etc)</li>
                    <li>-You may distribute up to 5000 profitable units</li>
                    <li>-Includes non-exclusive contract agreement (e-signed at checkout)</li>
                    <li>-Send me a quote to inquire about Exclusive License purchase!</li>
                    </div>';    
        }

    }
    return $desc;
}

编辑更新代码以使用与OP设置匹配的属性和术语slugs。


0
投票
add_filter( 'woocommerce_available_variation', 'variation_add_custom_field_variation_data' );
 
 function variation_add_custom_field_variation_data( $variations ) {
     
     
   $variations['per_package_price_field'] = '<div class="woocommerce_custom_field">Per Package Price Field: <span>' . get_post_meta( $variations[ 'variation_id' ], 'per_package_price_field', true ) . '</span></div>';
   $variations['package_qty_field'] = '<div class="woocommerce_custom_field">Package Quantity: <span>' . get_post_meta( $variations[ 'variation_id' ], 'package_qty_field', true ) . '</span></div>';
   $variations['package_box_field'] = '<div class="woocommerce_custom_field">Package Box: <span>' . get_post_meta( $variations[ 'variation_id' ], 'package_box_field', true ) . '</span></div>';
   
   $variations['package_price_field'] = get_post_meta( $variations[ 'variation_id' ], 'per_package_price_field', true );
   $variations['package_without_discount_quantity_field'] = get_post_meta( $variations[ 'variation_id' ], 'package_without_discount_quantity_field', true );
   $variations['package_20_discount_quantity_field'] = get_post_meta( $variations[ 'variation_id' ], 'package_20_discount_quantity_field', true );
   $variations['package_30_discount_quantity_field'] = get_post_meta( $variations[ 'variation_id' ], 'package_30_discount_quantity_field', true );
   $variations['package_40_discount_quantity_field'] = get_post_meta( $variations[ 'variation_id' ], 'package_40_discount_quantity_field', true );
   $variations['package_50_discount_quantity_field'] = get_post_meta( $variations[ 'variation_id' ], 'package_50_discount_quantity_field', true );
   return $variations;
 }
© www.soinside.com 2019 - 2024. All rights reserved.