首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在WooCommerce中的订单编辑页面上显示自定义字段

在WooCommerce中的订单编辑页面上显示自定义字段
EN

Stack Overflow用户
提问于 2019-05-22 15:06:35
回答 1查看 2.5K关注 0票数 1

基于"https://stackoverflow.com/questions/54911636/show-woocommerce-product-custom-fields-under-the-cart-and-order-item-name/54913243#54913243“回答我前面的一个问题,代码在产品编辑页面上显示了自定义字段。填充这些字段时,数据将显示在“产品”页上。

以下是代码:

代码语言:javascript
复制
// Backend: Display additional product fields
add_action('woocommerce_product_options_general_product_data', 'add_fields_to_options_general_product_data');

function add_fields_to_options_general_product_data() {
    // Custom Weight Field
    woocommerce_wp_text_input(array(
            'id' => '_custom_weight',
            'label' => __('Weight dishes', 'woocommerce'),
    ));

    // Calories Field
    woocommerce_wp_text_input(array(
            'id' => '_сalories',
            'label' => __('Calories', 'woocommerce'),
    ));

    // Ingredients Field
    woocommerce_wp_textarea_input(array(
            'id' => '_ingredients',
            'label' => __('Ingredients', 'woocommerce'),
    ));
}

// Backend: Save the data value from the custom fields
add_action('woocommerce_admin_process_product_object', 'save_admin_product_custom_fields_values');

function save_admin_product_custom_fields_values($product) {
    // Save Custom Weight Field
    if (isset($_POST['_custom_weight'])) {
            $product->update_meta_data('_custom_weight', sanitize_text_field($_POST['_custom_weight']));
    }

    // Save Calories Field
    if (isset($_POST['_сalories'])) {
            $product->update_meta_data('_сalories', sanitize_text_field($_POST['_сalories']));
    }

    // Save Ingredients Field
    if (isset($_POST['_ingredients'])) {
            $product->update_meta_data('_ingredients', sanitize_textarea_field($_POST['_ingredients']));
    }
}

// Display product custom fields values on single product pages under short description and on archive pages
add_action('woocommerce_before_add_to_cart_form', 'display_custom_meta_field_value', 25);
add_action('woocommerce_after_shop_loop_item', 'display_custom_meta_field_value', 25);

function display_custom_meta_field_value() {
    global $product;

    if ($custom_weight = $product->get_meta('_custom_weight'))
            echo '<p id="value-on-single-product">'.__("Weight:", "woocommerce").
    ' '.$custom_weight.
    'g'.
    '</p>';

    if ($сalories = $product->get_meta('_сalories'))
            echo '<p id="value-on-single-product">'.__("Calories:", "woocommerce").
    ' '.$сalories.
    ' kcal.'.
    '</p>';

    if ($ingredients = $product->get_meta('_ingredients'))
            echo '<p id="value-on-single-product">'.__("Ingredients:", "woocommerce").
    ' '.$ingredients.
    '</p>';
}

// Add custom fields values under cart item name in cart
add_filter('woocommerce_cart_item_name', 'custom_cart_item_name', 10, 3);

function custom_cart_item_name($item_name, $cart_item, $cart_item_key) {
    if (!is_cart())
            return $item_name;

    if ($value1 = $cart_item['data']->get_meta('_custom_weight')) {
            $item_name. = '<br><span class="custom-field"><strong>'.__("Weight", "woocommerce").
            ':</strong> '.$value1.
            'g</span>';
    }

    if ($value2 = $cart_item['data']->get_meta('_сalories')) {
            $item_name. = '<br><span class="custom-field"><strong>'.__("Calories", "woocommerce").
            ':</strong> '.$value2.
            'kcal</span>';
    }

    if ($value3 = $cart_item['data']->get_meta('_ingredients')) {
            $item_name. = '<br><span class="custom-field"><strong>'.__("Ingredients", "woocommerce").
            ':</strong> <br>'.$value3.
            '</span>';
    }

    return $item_name;
}

// Display custom fields values on orders and email notifications
add_filter('woocommerce_order_item_name', 'custom_order_item_name', 10, 2);

function custom_order_item_name($item_name, $item) {
    $product = $item - > get_product();

    if ($value1 = $product->get_meta('_custom_weight')) {
            $item_name. = '<br><span class="custom-field"><strong>'.__("Weight", "woocommerce").
            ':</strong> '.$value1.
            'g</span>';
    }

    if ($value2 = $product->get_meta('_сalories')) {
            $item_name. = '<br><span class="custom-field"><strong>'.__("Calories", "woocommerce").
            ':</strong> '.$value2.
            'kcal</span>';
    }

    if ($value3 = $product->get_meta('_ingredients')) {
            $item_name. = '<br><span class="custom-field"><strong>'.__("Ingredients", "woocommerce").
            ':</strong> <br>'.$value3.
            '</span>';
    }

    return $item_name;
}

如何在管理面板中的编辑命令页上显示自定义字段?它应该在产品名称之后显示这些字段。

更新

据我所知,woocommerce_checkout_create_order_line_item对此负有责任。但我不能添加正确的代码。我请求你的帮助!

代码语言:javascript
复制
// Save chosen slelect field value to each order item as custom meta data and display it everywhere
add_action('woocommerce_checkout_create_order_line_item', 'save_order_item_product', 10, 4 );
function save_order_item_product( $item, $cart_item_key, $values, $order ) {
    $product = $item->get_product();

    if( $value1 = $product->get_meta('_custom_weight') ) {
        $item_name .= '<br /><span class="custom-field"><strong>' . __("Weight dishes", "woocommerce") . ':</strong> ' . $value1 . ' g</span>';
    }
    return $item_name;
}

代码语言:javascript
复制
// Save chosen slelect field value to each order item as custom meta data and display it everywhere
add_action('woocommerce_checkout_create_order_line_item', 'save_order_item_product', 10, 4 );
function save_order_item_product( $item, $cart_item_key, $values, $order ) {
    if( isset($values['_custom_weight']) ) {
        $key = __('Weight dishes', 'woocommerce');
        $value = $values['_custom_weight'];
        $item->update_meta_data( $key, $value );
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-23 16:09:17

以下是在管理订单项上显示产品自定义字段的方法:

代码语言:javascript
复制
add_action( 'woocommerce_before_order_itemmeta', 'add_admin_order_item_custom_fields', 10, 2 );
function add_admin_order_item_custom_fields( $item_id, $item ) {
    // Targeting line items type only
    if( $item->get_type() !== 'line_item' ) return;

    $product = $item-> get_product();
    $value1  = $product->get_meta('_custom_weight');
    $value2  = $product->get_meta('_сalories');
    $value3  = $product->get_meta('_ingredients');

    if ( ! empty($value1) || ! empty($value2) || ! empty($value3) ) {
        echo '<table cellspacing="0" class="display_meta">';

        if ( ! empty($value1) ) {
            echo '<tr><th>' . __("Weight", "woocommerce") . ':</th><td>' . $value1 . 'g</td></tr>';
        }

        if ( ! empty($value2) ) {
            echo '<tr><th>' . __("Calories", "woocommerce") . ':</th><td>' . $value2 . 'kcal</td></tr>';
        }

        if ( ! empty($value3) ) {
            echo '<tr><th>' . __("Ingredients", "woocommerce") . ':</th><td>' . $value3 . '</td></tr>';
        }
        echo '</table>';
    }
}

代码在您的活动子主题(或活动主题)的functions.php文件中。测试和工作。

相关:

Display product custom fields on WooCommerce Admin Order Items also for variable products

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56259910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档