从WooCommerce中的自定义字段值动态更改购物车商品价格

时间:2017-11-24 23:03:31

标签: php wordpress woocommerce product custom-fields

我目前正在使用WooCommerce功能的WordPress网站上工作。

每个产品页面都有一个自定义字段,允许网站访问者输入他们想要应用于产品的文本。费用适用于每封输入的字母'基础。

要计算产品的总体成本(产品价格+自定义字母输入),我已将以下代码插入<?php function calculate_engrave_text_fee( $cart_object ) { foreach ( $cart_object->cart_contents as $key => $value ) { if( isset( $value["engrave_text"] ) ) { // Quantity of characters entered into Custom Text Field: $chars = strlen( $value["engrave_text"] ); // Characters Entered Multiplied by Cost of Each Letter: $engrave_text_fee = $chars * 3; //Need to dynamically call this. $orgPrice = floatval( $value['data']->price ); $value['data']->set_price( $orgPrice + $engrave_text_fee ); } } } add_action( 'woocommerce_before_calculate_totals', 'calculate_engrave_text_fee', 99 ); ?> 文件中:

$engrave_text_fee = $chars * 3;

以上代码绝对正常;除了一个例外。

由于每封信的费用会有所不同,因此根据产品的不同,$engrave_text_fee = $chars * 3;等静态条目并不理想。或者,我在WooCommerce产品仪表板中创建了一个自定义字段,网站管理员可以输入每个产品的个人自定义字母的价格。

问题

要从WooCommerce产品信息中心动态调用自定义字段条目并将其放入上面的数学中,我尝试将$engrave_text_fee = $chars * <?php global $post; echo get_post_meta($post->ID,'_pricing_engrave_text_option',true)?>; 替换为:

trainedClassifier.prefictFcn(T)

不幸的是,这只会使网站脱机。我只能假设编码语法有问题!?是否有人能够指出我在哪里出错?

2 个答案:

答案 0 :(得分:1)

已更新 (2018年10月)

您的正确动态代码应该是(因为您有一些错误和过时的代码):

add_action( 'woocommerce_before_calculate_totals', 'calculate_engrave_text_fee', 99, 1 );
function calculate_engrave_text_fee( $cart ) {  
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    // Loop through cart items
    foreach ( $cart->get_cart() as $cart_item ) {
        // Checking that we got the engrave text in cart object
        if( isset( $cart_item["engrave_text"] ) && ! empty( $cart_item["engrave_text"] ) ) {

            // Quantity of characters entered into Custom Text Field:
            $lenght = strlen( $cart_item["engrave_text"] );

            // Get the engrave pricing for this product
            $pricing_engrave = get_post_meta( $cart_item['data']->get_id(), '_pricing_engrave_text_option', true );

            // Characters Entered Multiplied by Cost of Each Letter:
            $engrave_text_fee = $lenght * $pricing_engrave; 

            // get product price
            $price = floatval( $cart_item['data']->get_price() );

            // set new price
            $cart_item['data']->set_price( $price + $engrave_text_fee );
        }
    }
}

代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。

此代码应该可以使用

答案 1 :(得分:0)

php标签<?php似乎不合适。它看起来应该更像这样

global $post;    
$engrave_text_fee = $chars *  get_post_meta($post->ID,'_pricing_engrave_text_option',true);