【问题标题】:Adding user custom field value to order items details将用户自定义字段值添加到订单商品详细信息
【发布时间】:2017-06-18 07:13:42
【问题描述】:

与供应商 (WC Vendors) 一起开发 WooCommerce 网上商店。

我需要显示我在供应商资料中创建的自定义字段。它应该显示在 order-details.php 中的项目和供应商名称下。

如何按该卖家/供应商 ID 显示个人资料字段?
有人可以帮帮我吗?

这是我会撒谎的截图:

个人资料自定义字段

向用户个人资料页面添加自定义字段

add_action( 'show_user_profile', 'wp_added_user_profile_fields' );

function wp_added_user_profile_fields( $user ) {

    ?>

    <table class="form-table">

        <tr>

            <th><label for="billing_enumber"><?php _e( "eNumber", 'woocommerce' ); ?></label></th>

            <td>
                <input type="text" 
                       name="billing_enumber" 
                       id="billing_enumber" 
                       class="regular-text"
                       value="<?php echo esc_attr( get_the_author_meta( 'billing_enumber', $user->ID ) ); ?>"/>

                <span class="description"><?php _e( 'Please enter your eNumber.', 'woocommerce' ); ?></span>
            </td>

        </tr>

    </table>

    <?php
}

为用户个人资料的自定义字段添加更新功能

add_action( 'edit_user_profile', 'wp_added_user_profile_fields' );

    function wp_save_added_user_profile_fields( $user_id ) {

        if ( current_user_can( 'edit_user', $user_id ) ) {

            update_user_meta( $user_id, 'billing_enumber', trim($_POST['billing_enumber'] ) );

            $saved = true;

        }

        return true;
    }

谢谢。

【问题讨论】:

标签: php wordpress woocommerce custom-fields orders


【解决方案1】:

有多种方式(针对 WooCommerce 3+ 更新)

1) 最干净的方法 (分两步)

步骤 A)您首先需要在您的产品中添加一个属性,以便为您的自定义字段值获取一个“可读标签”,该标签将作为订单显示项目元数据。

在您的情况下,您将创建“Billing E Number”属性:

然后,您将在您的目标产品中将其设置为任何值(因为它将被您的自定义字段值替换),该值可以是简单的或可变的。如果您不使用此属性设置值,则在更新产品时不会设置和保存。

那么保存更新后你就有这个了:

然后,woocommerce 中的属性 slug 以 pa_ 开头。所以你的属性 slug 将是:pa_billing-e-number

我们将在下面的函数中使用它,为您的自定义字段值显示可读标签。所以你会得到订单项目:Billing E Number: (some value)

步骤 B)您的自定义函数已挂接到 woocommerce_checkout_create_order_line_item 操作挂钩

现在要在订单商品详细信息中显示您的自定义字段,您需要获取提交的值以保存为订单商品元数据,我们将在此处使用 pa_billing-e-Number 作为 meta_key

所以代码将是这样的:

add_action('woocommerce_checkout_create_order_line_item', 'add_custom_hiden_order_item_meta_data', 20, 4 );
function add_custom_hiden_order_item_meta_data( $item, $cart_item_key, $values, $order ) {

    // Set user meta custom field as order item meta
    if( $meta_value = get_user_meta( $order->get_user_id(), 'billing_enumber', true ) )
        $item->update_meta_data( 'pa_billing-e-number', $meta_value );
}

此代码位于活动子主题(或活动主题)的 functions.php 文件中。经过测试并且可以工作。

然后在我的帐户 > 订单 > 订单视图的前端,你会得到这个:

如您所见,您在 WooCommerce 的正常行为中得到了完全相同的东西。这里的值只是为了说明这个例子……


2) 最简单的方法是使用非常相似的代码(没有步骤B)

add_action('woocommerce_checkout_create_order_line_item', 'add_custom_hiden_order_item_meta_data', 20, 4 );
function add_custom_hiden_order_item_meta_data( $item, $cart_item_key, $values, $order ) {

    // Set user meta custom field as order item meta
    if( $meta_value = get_user_meta( $order->get_user_id(), 'billing_enumber', true ) )
        $item->update_meta_data( __('Billing E Number', 'woocommerce'), $meta_value );
}

此代码位于活动子主题(或活动主题)的 functions.php 文件中。经过测试并且可以工作。

然后在我的账户 > 订单 > 订单视图的前端,你会得到同样的东西:

【讨论】:

    猜你喜欢
    • 2015-12-10
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 2017-06-05
    相关资源
    最近更新 更多