如何解决增强的 WooCommerce 自定义字段的变化
使用 Remi Coulson 教程,为产品变体添加了自定义字段。
这有效,但是自定义字段由添加到购物车按钮定位。我希望将其放置在“附加信息”选项卡中。我已经尝试将前端代码添加到 additional-information.php 但它没有显示。
@extends('layouts.master')
@section('content')
<h2>Create Article</h2>
@if($errors->any())
<div class="alert alert-danger">
<ul>
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="/admin/articles/create" method="post">
@csrf
<div class="form-group">
<label for="title">title :</label>
<input type="text" name="title" class="form-control">
</div>
<div class="form-group">
<label for="body">body :</label>
<textarea name="body" id="body" cols="30" rows="10" class="form-control"></textarea>
</div>
<button class="btn btn-danger">send</button>
</form>
@endsection
添加到functions.php以显示变化
<div class="woocommerce-variation-custom-text-field">
{{{ data.variation.text_field }}}
</div>
解决方法
请注意,自 WooCommerce 3 以来,您的代码有点过时。
需要 jQuery 和其他一些更改才能在单个产品页面上的特定位置的任何位置显示选定的变体自定义字段值,特别是在变体表单之外。
在下面的示例中,选择的变体自定义字段值将显示在产品属性表之后的“附加信息”产品选项卡上。
这里是完整的重访代码:
// Add a custom field to variation settings
add_action( 'woocommerce_product_after_variable_attributes','variation_settings_fields',10,3 );
function variation_settings_fields( $loop,$variation_data,$variation ) {
woocommerce_wp_text_input( array(
'id' => '_text_field[' . $loop . ']','label' => __( 'My Text Field','woocommerce' ),'placeholder' => 'http://','desc_tip' => 'true','description' => __( 'Enter the custom value here.','value' => get_post_meta( $variation->ID,'_text_field',true ),) );
}
// Save custom field value from variation settings
add_action( 'woocommerce_admin_process_variation_object','save_variation_settings_fields',2 );
function save_variation_settings_fields( $variation,$loop ) {
if( isset($_POST['_text_field'][$loop]) ) {
$variation->update_meta_data( '_text_field',sanitize_text_field($_POST['_text_field'][$loop]) );
}
}
// Add variation custom field to single variable product form
add_filter( 'woocommerce_available_variation','add_variation_custom_field_to_variable_form',3 );
function add_variation_custom_field_to_variable_form( $variation_data,$product,$variation ) {
$variation_data['text_field'] = $variation->get_meta('_text_field');
return $variation_data;
}
add_action( 'woocommerce_product_additional_information','add_html_container_to_display_selected_variation_custom_field' );
function add_html_container_to_display_selected_variation_custom_field( $product ){
echo '<div class="custom_variation-text-field"></div>';
}
// Display selected variation custom field value to product the tab
add_action( 'woocommerce_after_variations_form','display_selected_variation_custom_field_js' );
function display_selected_variation_custom_field_js(){
?>
<script type="text/javascript">
(function($){
$('form.cart').on('show_variation',function(event,data) {
$('.custom_variation-text-field').text(data.text_field);
}).on('hide_variation',function(event) {
$('.custom_variation-text-field').text('');
});
})(jQuery);
</script>
<?php
}
代码位于活动子主题(或活动主题)的functions.php 文件中。经测试有效。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。