我看到了类似的问题,并尝试了所有解决方案,但似乎没有一个适合我的项目。
我所有的产品都有额外的规格,当客户在产品页面上选择其他变体时,这些规格需要更改。我需要将规格显示在产品属性表中 到目前为止,我已经尝试了几种不同的方法,但是到目前为止,我的代码看起来像这样。我可以从编辑产品页面上获取要保存的额外数据,但是我不知道如何将其显示在产品页面上。
Functions.php
getDataFromFirestore
我尝试在“ product-attributes.php”和“ additional-information.php”中显示值,因为我希望新值与原始属性一起显示。
我的产品属性php
insert()
在产品页面的“附加信息”标签中,是否仍要在产品属性表中或紧随其后显示这些值?
对不起,如果我的问题很愚蠢,这是我第一次发布。我就是无法正常工作
答案 0 :(得分:0)
我认为数据并不是您要求的确切位置,但是这里是用于在选择变体时添加/显示自定义变体数据的一般指南。我还转换为使用Woo的CRUD以获得将来的兼容性。
/**
* Add custom fields to product variation settings
*
* @param string $loop
* @param array $variation_data
* @param WP_Post $variation
* @return array
*/
function add_variation_options_other_dimensions( $loop, $variation_data, $variation ){
$variation_obj = wc_get_product( $variation->ID );
woocommerce_wp_text_input( array(
'id' => 'diameter[' . $loop . ']',
'class' => 'short',
'label' => __( 'Diameter', 'woocommerce' ),
'desc_tip' => 'true',
'description' => __( 'Diameter description help.', 'woocommerce' ),
'value' => $variation_obj->get_meta( 'diameter', true ),
) );
woocommerce_wp_text_input( array(
'id' => 'thickness[' . $loop . ']',
'class' => 'short',
'label' => __( 'Thickness', 'woocommerce' ),
'desc_tip' => 'true',
'description' => __( 'Thickness description help.', 'woocommerce' ),
'value' => $variation_obj->get_meta( 'thickness', true ),
) );
}
add_action( 'woocommerce_product_after_variable_attributes','add_variation_options_other_dimensions', 10, 3 );
/**
* Save product variation custom fields values
*
* @param int $variation_id
* @param int $i
*/
function save_variation_options_other_dimensions( $variation_id, $i ) {
$variation_obj = wc_get_product( $variation_id );
if ( isset( $_POST["diameter"][$i] ) ) {
$variation_obj->update_meta_data( 'diameter', wc_clean( $_POST["diameter"][$i] ) );
}
if ( isset( $_POST["thickness"][$i] ) ) {
$variation_obj->update_meta_data( 'thickness', wc_clean( $_POST["thickness"][$i] ) );
}
$variation_obj->save();
}
add_action( 'woocommerce_save_product_variation','save_variation_options_other_dimensions', 10 ,2 );
/**
* Add data to json encoded variation form.
*
* @param array $data - this is the variation's json data
* @param object $product
* @param object $variation
* @return array
*/
function kia_available_variation( $data, $product, $variation ){
$kia_data['diameter'] = $variation->get_meta( 'diameter', true );
$kia_data['thickness'] = $variation->get_meta( 'thickness', true );
return array_merge( $data, $kia_data );
}
add_filter( 'woocommerce_available_variation', 'kia_available_variation', 10, 3 );
/**
* Add scripts to variable products.
*/
function kia_on_found_template_for_variable_add_to_cart() {
add_action( 'wp_print_footer_scripts', 'kia_variable_footer_scripts', 99 );
}
add_action( 'woocommerce_variable_add_to_cart', 'kia_on_found_template_for_variable_add_to_cart', 30 );
function kia_variable_footer_scripts() { ?>
<script type="text/template" id="tmpl-variation-template-extra-data">
<tr class="woocommerce-product-attributes-item woocommerce-product-attributes-item--attribute_diameter extra-data">
<th class="woocommerce-product-attributes-item__label"><?php esc_html_e( 'Diameter', 'my-text-domain' );?></th>
<td class="woocommerce-product-attributes-item__value">{{{ data.variation.diameter }}}</td>
</tr>
<tr class="woocommerce-product-attributes-item woocommerce-product-attributes-item--attribute_thickness extra-data">
<th class="woocommerce-product-attributes-item__label"><?php esc_html_e( 'Thickness', 'my-text-domain' );?></th>
<td class="woocommerce-product-attributes-item__value">{{{ data.variation.thickness }}}</td>
</tr>
</script>
<script type="text/javascript">
jQuery( document ).ready(function($) {
$('form.cart')
.on('found_variation', function( event, variation ) {
template = wp.template( 'variation-template-extra-data' );
$template_html = template( {
variation: variation
} );
// Remove any existing rows.
$('#tab-additional_information').find('.woocommerce-product-attributes tr.extra-data').remove();
// Add new rows.
$('#tab-additional_information').find('.woocommerce-product-attributes tbody').append( $template_html );
})
.on( 'reset_data', function( event, variation ) {
$('#tab-additional_information').find('.woocommerce-product-attributes tr.extra-data').remove();
});
});
</script>
<?php
}