我目前正在使用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)
不幸的是,这只会使网站脱机。我只能假设编码语法有问题!?是否有人能够指出我在哪里出错?
答案 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);