Php WooCommerce:在挂钩函数中获取产品变量自定义字段值
这就是我如何为产品变体添加管理自定义字段的方法:Php WooCommerce:在挂钩函数中获取产品变量自定义字段值,php,wordpress,woocommerce,custom-fields,product-variations,Php,Wordpress,Woocommerce,Custom Fields,Product Variations,这就是我如何为产品变体添加管理自定义字段的方法: 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(
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;
}
我只需要获取值(即浮点数):las函数中有一些错误和遗漏的内容(见下文) 现在,有两种方法可以在挂钩函数中获取自定义字段值:
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;
}
1) 。使用WC\u Data
get\u meta()
2) 。或者使用WordPressget\u post\u meta()
函数(旧方法):
代码进入活动子主题(或活动主题)的functions.php文件。经过测试,两者都适用
重要提示:前端可能看不到结果,因为可变产品价格范围缓存在WooCommerce中以提高性能(请参阅下面的链接线程以更好地了解)
相关线程:
与您的其他功能相关的添加
自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;
}
add_filter('woocommerce_available_variation','add_variation_custom_field_value_to_variation_data',10,3);
函数将变量自定义字段值添加到变量数据($variation\u data,$product,$variation){
如果($value=$variation->get_meta('custom_field')){
$variation_data['custom_field']=''.''.''(“custom field”):''.$value';
}
返回$U数据;
}
您在哪里使用最后一个函数?…请添加更多上下文,因为您的问题实际上不清楚…我在“woocommerce\u variation\u price\u price”上使用最后一个函数。这样做的目的是让自定义值乘以变化产品价格。我编辑了您的问题,并回答了您的问题。请提供以下答案的反馈。Hi@loicTheAztec感谢您的支持和努力。我尝试了这两个版本,但都不起作用,前端出现严重错误。我想我问得不对,让我再解释一遍;检查:您也回答了这个问题,我需要的是让自定义添加的变量字段值相乘。2) 对于主题版本:函数get_price_multiplier(){return 2;//x2用于测试//我需要在此处加载自定义字段值}
@Bilal抱歉,两个代码中都有错误…请重试,它现在应该可以工作了。如果这个答案回答了你的问题,你可以请你回答,如果你喜欢/想要,你也可以请你回答,谢谢。实际上它没有检索自定义字段ID,get\u meta也不起作用,而且我尝试了get\u the\u ID()但他们都回来了null@Bilal对我来说,它在我的测试服务器上工作;
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;
}