目前正在使用WordPress 5.1.1和WooCommerce 3.5.7。我的WooCommerce商店有大约500种产品,由简单和多变的产品组成。
每个产品自然都有一个SKU,但每个产品也有一个称为“商品代码”的唯一ID代码。我向特定行业销售特定产品。
我已经在我的functions.php文件中添加了简单和可变产品的自定义字段的代码,目前效果很好。
我的问题是,我试图让“商品代码”出现在购物车、退房、发票和电子邮件的产品标题下。
我在网上阅读了各种教程来帮助我,但我并不知道,因为每个教程都以不同的方式做类似的事情。大多数教程假设用户已经通过前端输入了数据,但我的数据是预设的。
我用来帮助我的教程是:
<?php
// Add WooCommerce Custom Field for Commodity Code
function vp_add_commodity_code() {
$args = array(
'id' => 'vp_commodity_code',
'label' => __( 'Commodity Code', 'woocommerce' ),
'placeholder' => __( 'Enter Commodity Code here', 'woocommerce' ),
'desc_tip' => true,
'description' => __( 'This field is for the Commodity Code of the product.', 'woocommerce' ),
);
woocommerce_wp_text_input( $args );
}
add_action( 'woocommerce_product_options_sku', 'vp_add_commodity_code' );
// Save Commodity Code into WooCommerce Database
function vp_save_commodity_code( $post_id ) {
// grab the Commodity Code
$sku = isset( $_POST[ 'vp_commodity_code' ] ) ? sanitize_text_field( $_POST[ 'vp_commodity_code' ] ) : '';
// grab the product
$product = wc_get_product( $post_id );
// save the Commodity Code custom field
$product->update_meta_data( 'vp_commodity_code', $sku );
$product->save();
}
add_action( 'woocommerce_process_product_meta', 'vp_save_commodity_code' );
// Display Commodity Code on the Frontend
function vp_display_commodity_code() {
global $post;
// Check for the Commodity Code value
$product = wc_get_product( $post->ID );
$title = $product->get_meta( 'vp_commodity_code' );
if( $title ) {
// Only display the field if we've got a value for the field title
printf(
'<div class="vpcommoditycode-wrapper"><strong>Commodity Code: </strong>%s</div>',
esc_html( $title )
);
}
}
add_action( 'woocommerce_before_add_to_cart_button', 'vp_display_commodity_code' );
// Add custom field input @ Product Data > Variations > Single Variation
add_action( 'woocommerce_variation_options_pricing', 'comcode_add_custom_field_to_variations', 10, 3 );
function comcode_add_custom_field_to_variations( $loop, $variation_data, $variation ) {
woocommerce_wp_text_input( array(
'id' => 'custom_field[' . $loop . ']',
'class' => 'short',
'label' => __( 'Community Code', 'woocommerce' ),
'value' => get_post_meta( $variation->ID, 'custom_field', true ),
'placeholder' => __( 'Enter Commodity Code here', 'woocommerce' ),
'desc_tip' => true,
'description' => __( 'This field is for the Commodity Code of the product.', 'woocommerce' ),
)
);
}
// Save custom field on product variation
add_action( 'woocommerce_save_product_variation', 'comcode_save_custom_field_variations', 10, 2 );
function comcode_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 ) );
}
// Store custom field value into variation data
add_filter( 'woocommerce_available_variation', 'comcode_add_custom_field_variation_data' );
function comcode_add_custom_field_variation_data( $variations ) {
$variations['custom_field'] = '<div class="woocommerce_custom_field"><strong>Commodity Code: </strong><span>' . get_post_meta( $variations[ 'variation_id' ], 'custom_field', true ) . '</span></div>';
return $variations;
}
?>
可以某种PHP/WooCommerce天才帮助我在这里请提供代码或指向我的教程,将帮助我或名称的第三方WordPress插件,将这样做。
我已经重新访问并完成了您现有的代码,例如,它不适用于产品变化...这将:
代码:
// Admin: Add custom field
add_action('woocommerce_product_options_sku', 'vp_add_commodity_code' );
function vp_add_commodity_code(){
woocommerce_wp_text_input( array(
'id' => '_commodity_code',
'label' => __('Commodity Code', 'woocommerce' ),
'placeholder' => __('Enter Commodity Code here', 'woocommerce' ),
'desc_tip' => true,
'description' => __('This field is for the Commodity Code of the product.', 'woocommerce' ),
) );
}
// Admin: Save custom field value for simple product inventory options
add_action('woocommerce_admin_process_product_object', 'vp_product_save_commodity_code', 10, 1 );
function vp_product_save_commodity_code( $product ){
if( isset($_POST['_commodity_code']) )
$product->update_meta_data( '_commodity_code', sanitize_text_field($_POST['_commodity_code']) );
}
// Admin: Add custom field in product variations options pricing
add_action( 'woocommerce_variation_options_pricing', 'vp_add_variation_commodity_code', 10, 3 );
function vp_add_variation_commodity_code( $loop, $variation_data, $variation ){
woocommerce_wp_text_input( array(
'id' => '_commodity_code['.$loop.']',
'label' => __('Commodity Code', 'woocommerce' ),
'placeholder' => __('Enter Commodity Code here', 'woocommerce' ),
'desc_tip' => true,
'description' => __('This field is for the Commodity Code of the product.', 'woocommerce' ),
'value' => get_post_meta( $variation->ID, '_commodity_code', true )
) );
}
// Admin: Save custom field value from product variations options pricing
add_action( 'woocommerce_save_product_variation', 'save_barcode_variations', 10, 2 );
function save_barcode_variations( $variation_id, $i ){
if( isset($_POST['_commodity_code'][$i]) ){
update_post_meta( $variation_id, '_commodity_code', sanitize_text_field($_POST['_commodity_code'][$i]) );
}
}
// Frontend: Display Commodity Code on product
add_action( 'woocommerce_before_add_to_cart_button', 'vp_product_display_commodity_code' );
function vp_product_display_commodity_code() {
global $product;
if( $value = $product->get_meta( '_commodity_code' ) ) {
echo '<div class="vp-ccode-wrapper"><strong>' . __("Commodity Code", "woocommerce") .
': </strong>'.esc_html( $value ).'</div>';
}
}
// Frontend: Display Commodity Code on product variations
add_filter( 'woocommerce_available_variation', 'vp_variation_display_commodity_code', 10, 3 );
function vp_variation_display_commodity_code( $data, $product, $variation ) {
if( $value = $variation->get_meta( '_commodity_code' ) ) {
$data['price_html'] .= '<p class="vp-ccode"><small><strong>' . __("Commodity Code", "woocommerce") .
': </strong>'.esc_html( $value ).'</small></p>';
}
return $data;
}
// Frontend: Display Commodity Code on cart
add_filter( 'woocommerce_cart_item_name', 'vp_cart_display_commodity_code', 10, 3 );
function vp_cart_display_commodity_code( $item_name, $cart_item, $cart_item_key ) {
if( ! is_cart() )
return $item_name;
if( $value = $cart_item['data']->get_meta('_commodity_code') ) {
$item_name .= '<br><small class="vp-ccode"><strong>' . __("Commodity Code", "woocommerce") .
':</strong> ' . esc_html( $value ) . '</small>';
}
return $item_name;
}
// Frontend: Display Commodity Code on checkout
add_filter( 'woocommerce_checkout_cart_item_quantity', 'vp_checkout_display_commodity_code', 10, 3 );
function vp_checkout_display_commodity_code( $item_qty, $cart_item, $cart_item_key ) {
if( $value = $cart_item['data']->get_meta('_commodity_code') ) {
$item_qty .= '<br><small class="vp-ccode"><strong>' . __("Commodity Code", "woocommerce") .
':</strong> ' . esc_html( $value ) . '</small>';
}
return $item_qty;
}
// Save Commodity Code to order items (and display it on admin orders)
add_filter( 'woocommerce_checkout_create_order_line_item', 'vp_order_item_save_commodity_code', 10, 4 );
function vp_order_item_save_commodity_code( $item, $cart_item_key, $cart_item, $order ) {
if( $value = $cart_item['data']->get_meta('_commodity_code') ) {
$item->update_meta_data( '_commodity_code', esc_attr( $value ) );
}
return $item_qty;
}
// Frontend & emails: Display Commodity Code on orders
add_action( 'woocommerce_order_item_meta_start', 'vp_order_item_display_commodity_code', 10, 4 );
function vp_order_item_display_commodity_code( $item_id, $item, $order, $plain_text ) {
// Not on admin
//if( is_admin() ) return;
if( $value = $item->get_meta('_commodity_code') ) {
$value = '<strong>' . __("Commodity Code", "woocommerce") . ':</strong> ' . esc_attr( $value );
// On orders
if( is_wc_endpoint_url() )
echo '<div class="vp-ccode"><small>' . $value . '</small></div>';
// On Emails
else
echo '<div style="font-size:11px;padding-top:6px">' . $value . '</div>';
}
}
代码进入活动子主题(或活动主题)的function.php文件。测试和工作。
我成功地在后端的产品变化中的WooCommerce中创建了一个ACF自定义字段。该字段在每个变化中正确显示。 但是在编辑变体中的此字段或其他字段后,我无法再保存整个变体选项卡。加载/保存指示器圆圈继续无限旋转。并且定制字段未显示在前端的单个产品变体中。 我所做的是将以下代码添加到我的: 任何帮助都将不胜感激。
我的职责是编写以下代码: 有没有人能把我推向正确的方向,让我在购物车、结帐、邮件和订单中获得正确的值? 最初取自这里在WooCommerce 3中到处显示ACF产品自定义字段
在简短描述之前,我在WooCommerce中添加一个新字段时遇到了一个问题。 我使用脚本在和我的新自定义字段显示正确,但: 使用脚本时,简短描述消失,新字段显示良好。 我可以编辑产品页面上某个字段的内容,但不能删除它。它始终是最后一个值 如何显示此自定义字段而不删除产品简短说明? 如何重置此自定义字段内容? 这是我的代码: 负责显示的功能:
是否有一种方法可以在WooCommerce订单页面的每个产品下显示我的自定义SKU? 当我编辑产品时,自定义sku显示良好,但它不会显示在产品的订单页面中。我需要在订单上显示此信息,以便Zapier可以将其与产品的Visma帐户软件ArticleID匹配。 此尝试基于如何向WooCommerce产品添加(第二个)自定义sku字段的解决方案?
我有一个代码,需要根据以下条件插入一个值: 在这里,我通过我的活动主题覆盖了Woocommerce模板文件:
添加附加自定义域时,我做错了什么? 我的代码: