这就是我如何为产品变体添加管理自定义字段的方法:
add_action( 'woocommerce_variation_options_pricing', 'add_custom_field_to_variations', 10, 3 );
function add_custom_field_to_variations( $loop, $variation_data, $variation ) {
woocommerce_wp_text_input( array(
'id' => 'custom_field[' . $loop . ']',
'class' => 'short',
'label' => __( 'Custom Field', 'woocommerce' ),
'value' => get_post_meta( $variation->ID, 'custom_field', true )
) );
}
保存产品变化的自定义字段保存:
add_action( 'woocommerce_save_product_variation', 'save_custom_field_variations', 10, 2 );
function save_custom_field_variations( $variation_id, $i ) {
$custom_field = $_POST['custom_field'][$i];
if ( isset( $custom_field ) ) update_post_meta( $variation_id, 'custom_field', esc_attr( $custom_field ) );
}
将自定义字段值存储到变量数据中
add_filter( 'woocommerce_available_variation', 'add_custom_field_variation_data' );
function add_custom_field_variation_data( $variations ) {
$variations ['custom_field'] = '<div class="woocommerce_custom_field">Custom Field: <span>' . get_post_meta( $variations[ 'variation_id' ], 'custom_field', true ) . '</span></div>';
return $variations;
}
该值保存并显示在单个产品页面中,但下面的函数不返回该值
尝试检索函数中自定义字段的值:
add_filter('woocommerce_variation_prices_price', 'get_custom_variable_price' )
function get_custom_variable_price() {
global $post;
$custom_value = get_post_meta( $variations[ 'variation_id' ], 'custom_field', true );
$custom_value = (float)$custom_value;
return $custom_value;
}
我需要得到的只是值(这是浮点数):
las函数中存在一些错误和遗漏的内容(见下文)。
现在,有两种方法可以在挂钩函数中获取自定义字段值:
1)。使用WC_Data
get_meta()
方法(自WooCommerce 3):
add_filter('woocommerce_variation_prices_price', 'custom_variable_price', 100, 3 );
function custom_variable_price( $price, $variation, $product ) {
$value = floatval( $variation->get_meta( 'custom_field' ) );
if( $value > 0 ) {
$price = $value;
}
return $price;
}
2). 或者使用WordPressget\u post\u meta()
函数(旧方法):
add_filter('woocommerce_variation_prices_price', 'custom_variable_price', 100, 3 );
function custom_variable_price( $price, $variation, $product ) {
$value = floatval( floatval( get_post_meta( $variation->get_id(), 'custom_field', true ) );
if( $value > 0 ) {
$price = $value;
}
return $price;
}
代码functions.php活动子主题(或活动主题)的文件中。测试,适用于两者。
重要提示:您可能无法在前端看到结果,因为可变产品价格范围缓存在WooCommerce中以提高性能(请参阅下面的链接线程以获得更好的理解)。
相关线程:通过WooCommerce 3中的挂钩更改产品价格
与其他功能相关的添加
自WooCommerce 3以来,您可以按如下方式更新第二和第三个功能:
add_action( 'woocommerce_admin_process_variation_object', 'save_custom_field_variation_value', 10, 2 );
function save_custom_field_variation_value( $variation, $i ) {
if( isset($_POST['custom_field'][$i]) ) {
$variation->update_meta_data( 'custom_field', floatval( sanitize_text_field($_POST['custom_field'][$i]) ) );
}
}
和第三功能
add_filter( 'woocommerce_available_variation', 'add_variation_custom_field_value_to_variation_data', 10, 3 );
function add_variation_custom_field_value_to_variation_data( $variation_data, $product, $variation ) {
if ( $value = $variation->get_meta( 'custom_field' ) ) {
$variation_data['custom_field'] = '<div class="woocommerce_custom_field">' .__("Custom Field") . ': <span>' . $value . '</span></div>';
}
return $variation_data;
}
我成功地在后端的产品变化中的WooCommerce中创建了一个ACF自定义字段。该字段在每个变化中正确显示。 但是在编辑变体中的此字段或其他字段后,我无法再保存整个变体选项卡。加载/保存指示器圆圈继续无限旋转。并且定制字段未显示在前端的单个产品变体中。 我所做的是将以下代码添加到我的: 任何帮助都将不胜感激。
问题内容: 在Woocommerce中,我试图获取产品自定义属性值,但我失败了,我一无所获。 所以我尝试了: 我正在获取这些原始数据: 我知道有一个值,因为它显示在属性部分,但是我只是找不到一种方法来将其显示在我的自定义代码中。 问题答案: 编辑* : 自Woocommerce版本3起已弃用 * 按照@datafeedr在他的答案中写道: 甚至更紧凑: 原始答案:
在WooCommerce中,我试图获得产品自定义属性值,但我失败了,什么也得不到。 所以我试着: 我得到了这些原始数据: 我知道有一个值,因为它显示在属性部分,但我就是找不到一种方法用我的自定义代码显示它。
我不只是想用钩子添加所有的自定义元数据,因为我需要对输出进行非常严格的控制。例如,对于在购物车页面中包含自定义域,下面的答案可以很好地工作:在Woocommerce购物车中显示自定义域的值&Checkout items 但我也希望它们出现在结帐、订单详细信息和电子邮件中,并完全控制它们出现的HTML(在某些情况下,它们也需要转换,例如,Unix时间戳转换为人类可读的时间)。 在模板中,我尝试了以下
我试图在woocommerce中获得一个特定的自定义属性。我在这个网站上读了很多文章,其中提供了3-5种方法。在尝试了所有方法之后,对我来说唯一有效的方法就是循环所有属性——所有其他属性都不起作用。我有一个名为“pdfs”的自定义属性 以下尝试不起作用:(链接) 这是唯一的一个工作:(链接) 我更希望能够使用第一个选项之一。任何帮助都将不胜感激。谢谢
目前正在使用WordPress 5.1.1和WooCommerce 3.5.7。我的WooCommerce商店有大约500种产品,由简单和多变的产品组成。 每个产品自然都有一个SKU,但每个产品也有一个称为“商品代码”的唯一ID代码。我向特定行业销售特定产品。 我已经在我的functions.php文件中添加了简单和可变产品的自定义字段的代码,目前效果很好。 我的问题是,我试图让“商品代码”出现在