在WooCommerce电子邮件订购项目中显示可变产品的产品自定义字段

特洛伊

我已在产品中添加了自定义SKU,用于供应商SKU进行订单确认电子邮件。我创建的内容仅适用于简单产品,不适用于可变产品。

自定义SKU, 屏幕截图

我将此添加到functions.php

function jk_add_custom_sku() {
    $args = array(
        'label' => __( 'Custom SKU', 'woocommerce' ),
        'placeholder' => __( 'Enter custom SKU here', 'woocommerce' ),
        'id' => 'jk_sku',
        'desc_tip' => true,
        'description' => __( 'This SKU is for internal use only.', 'woocommerce' ),
    );
    woocommerce_wp_text_input( $args );
}
add_action( 'woocommerce_product_options_sku', 'jk_add_custom_sku' );

function jk_save_custom_sku( $post_id ) {
    // grab the custom SKU from $_POST
    $custom_sku = isset( $_POST[ 'jk_sku' ] ) ? sanitize_text_field( $_POST[ 'jk_sku' ] ) : '';
    
    // grab the product
    $product = wc_get_product( $post_id );
    
    // save the custom SKU using WooCommerce built-in functions
    $product->update_meta_data( 'jk_sku', $custom_sku );
    $product->save();
}
add_action( 'woocommerce_process_product_meta', 'jk_save_custom_sku' );

接下来,我修改了电子邮件模板email-order-items.php并将其添加到SKU部分,以检查是否存在自定义SKU。

<?php

// Show title/image etc.
if ( $show_image ) {
    echo wp_kses_post( apply_filters( 'woocommerce_order_item_thumbnail', $image, $item ) );
}

// Product name.
echo wp_kses_post( apply_filters( 'woocommerce_order_item_name', $item->get_name(), $item, false ) );

// SKU.
if ( $show_sku && $sku ) {
    echo wp_kses_post( ' (#' . $sku . ')' );
    // load the custom SKU
    $custom_sku = get_post_meta( $product->get_id(), 'jk_sku', true );
    if ( is_string( $custom_sku ) ) { // only show the custom SKU if it's set
        echo "<br>" . wp_kses_post( "Custom SKU: $custom_sku" ); // change this line if needed
    }
}

// allow other plugins to add additional product information here.
do_action( 'woocommerce_order_item_meta_start', $item_id, $item, $order, $plain_text );

wc_display_item_meta(
    $item,
    array(
        'label_before' => '<strong class="wc-item-meta-label" style="float: ' . esc_attr( $text_align ) . '; margin-' . esc_attr( $margin_side ) . ': .25em; clear: both">',
    )
);

// allow other plugins to add additional product information here.
do_action( 'woocommerce_order_item_meta_end', $item_id, $item, $order, $plain_text );

?>
</td>

自定义SKU仅显示在简单产品的电子邮件中。我需要它来配合Variable产品使用。每个产品只有一个“自定义SKU”,而不是每个可变产品。

LoicTheAztec

我重新回顾了一下您的代码,并将元密钥更改为_sku2就像WooCommerce元密钥以下划线开头:

add_action( 'woocommerce_product_options_sku', 'add_product_sku2_custom_field' );
function add_product_sku2_custom_field() {
    $field_key = '_sku2';

    woocommerce_wp_text_input( array(
        'id'          => $field_key,
        'label'       => __( 'Custom SKU', 'woocommerce' ),
        'placeholder' => __( 'Enter custom SKU here', 'woocommerce' ),
        'desc_tip'    => true,
        'description' => __( 'This SKU is for internal use only.', 'woocommerce' ),
    ) );
}

add_action( 'woocommerce_admin_process_product_object', 'save_product_sku2_custom_field_value' );
function save_product_sku2_custom_field_value( $product ) {
    $field_key = '_sku2';

    if ( isset($_POST[$field_key]) ) {
        $product->update_meta_data( $field_key, sanitize_text_field($_POST[$field_key]) );
    }
}

对于产品变体,您需要获取父变量产品才能显示“自定义sku” (请参见最后的代码)

现在,要同时为可变产品的产品变体启用其他自定义SKU,请使用以下命令:

add_action( 'woocommerce_variation_options_pricing', 'add_product_variation_sku2_custom_field', 10, 3 );
function add_product_variation_sku2_custom_field( $loop, $variation_data, $variation ){
    $field_key = '_sku2';

    woocommerce_wp_text_input( array(
        'id'          => $field_key.'['.$loop.']',
        'label'       => __( 'Custom SKU', 'woocommerce' ),
        'placeholder' => __( 'Enter custom SKU here', 'woocommerce' ),
        'desc_tip'    => true,
        'description' => __( 'This SKU is for internal use only.', 'woocommerce' ),
        'value'       => get_post_meta( $variation->ID, $field_key, true )
    ) );
}

add_action( 'woocommerce_save_product_variation', 'save_product_variation_sku2_custom_field_value', 10, 2 );
function save_product_variation_sku2_custom_field_value( $variation_id, $i ){
    $field_key = '_sku2';

    if( isset($_POST[$field_key][$i]) ){
        update_post_meta( $variation_id, $field_key, sanitize_text_field($_POST[$field_key][$i]) );
    }
}

代码进入活动子主题(或活动主题)的functions.php文件中。经过测试和工作。

在模板自定义代码中,您将替换:

// SKU.
if ( $show_sku && $sku ) {
    echo wp_kses_post( ' (#' . $sku . ')' );
    // load the custom SKU
    $custom_sku = get_post_meta( $product->get_id(), 'jk_sku', true );
    if ( is_string( $custom_sku ) ) { // only show the custom SKU if it's set
        echo "<br>" . wp_kses_post( "Custom SKU: $custom_sku" ); // change this line if needed
    }
}

通过以下方法(适用于可变产品或产品变体)

// SKU (and SKU2)
if ( $show_sku && $sku ) {
    echo wp_kses_post( ' (#' . $sku . ')' );
    // load the custom SKU
    $sku2 = $product->get_meta('_sku2');
    
    // For product variations with empty SKU (get the parent variable product SKU)
    if ( empty($sku2) && $product->is_type('variation') ) { 
        // Get parent variable product Id
        $parent_product_id = $product->get_parent_id(); 
        $parent_product    = wc_get_product($parent_product_id);
        $sku2              = $parent_product->get_meta('_sku2');
    }
    
    // only show the custom SKU if it's set (and product variation too)
    if ( ! empty($sku2) ) {
        echo "<br>" . wp_kses_post( sprintf( __("Custom SKU: %s", "woocommerce"), $sku2 ) ); // change this line if needed
    }
}

对于产品变体,如果没有任何“ custom sku”,它将尝试获取父变量产品“ custom sku”。

它应该工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在WooCommerce“订单已完成”电子邮件中添加自定义产品字段

自定义格式的最低价格,包括特定WooCommerce可变产品的税费

如何在新订单电子邮件中显示WooCommerce自定义产品元?

将产品自定义字段添加到WooCommerce已完成的订单电子邮件中

根据产品属性添加自定义woocommerce电子邮件

可变产品属性:自定义每个显示的单选按钮的文本值

WooCommerce可变产品:使用自定义标签仅保留“最低”价格

在Woocommerce管理员电子邮件通知中显示产品自定义字段值

在WooCommerce的电子邮件和订单页面中保存并显示产品自定义数据

将可变产品的自定义属性添加到WooCommerce中的购物车

WooCommerce可变产品的产品页面问题上显示的自定义文本字段

在Woocommerce中销售产品时向卖家发送自定义电子邮件

在Woocommerce订单和电子邮件中显示产品变体的自定义字段

在Woocommerce电子邮件下载中用自定义元替换产品名称

自定义电子邮件丢失的产品和小计

在相关产品列表中显示自定义属性“可变产品”

WooCommerce中可变产品的条件自定义价格后缀

产品标签的WooCommerce自定义电子邮件

在特定的WooCommerce电子邮件上显示产品ACF字段

也可以使用ACF在WooCommerce购物车中为可变产品获取自定义字段

在WooCommerce电子邮件通知上显示自定义产品图片

将可变产品的“描述”字段内容添加到woocommerce“已完成订单”电子邮件中

WooCommerce-每个产品的自定义电子邮件

在woocommerce订单电子邮件中显示多个产品的自定义字段

在订单电子邮件通知中输出产品自定义字段值

自定义 Woocommerce 可变产品价格范围,用于多个活动变体

在woocommerce电子邮件中输出产品自定义字段(图像)

在 woocommerce 电子邮件标题中输出产品自定义字段

根据 WooCommerce 电子邮件通知中的产品类别添加自定义文本“每个项目”