当前位置: 首页 > 知识库问答 >
问题:

将自定义产品元数据传递给WooCommerce 3中的订单

程俊力
2023-03-14

在Woocommerce中,我试图向我的产品添加一个自定义元,我希望将其传递给订单。

我们有大量的产品,它们对不同的成本中心负责,因此我需要在产品管理员中设置一个选择框,我们可以选择将价值传递到订单中的成本中心。这不需要客户查看,但需要管理员在订单中以及每个月的订单导出中查看为了会计。

这是我到目前为止,这将在产品编辑页面(管理员)中显示选择框:

// Display Fields
add_action( 'woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields' );

function woo_add_custom_general_fields() {

  global $woocommerce, $post;

  echo '<div class="options_group">';

    woocommerce_wp_select( 
    array( 
    'id'      => '_select', 
    'label'   => __( 'Cost Centre', 'woocommerce' ), 
    'options' => array(
        'one'   => __( 'MFEG', 'woocommerce' ),
        'two'   => __( 'YDIT', 'woocommerce' ),
        )
    )
);

  echo '</div>';

}

// Save Fields
add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save' );

function woo_add_custom_general_fields_save( $post_id ){


    // Select
    $woocommerce_select = $_POST['_select'];
    if( !empty( $woocommerce_select ) )
        update_post_meta( $post_id, '_select', esc_attr( $woocommerce_select ) );

}

但它并没有将值传递给订单。

如何将此自定义字段值传递给订单?

共有1个答案

傅阳
2023-03-14

我重温了一下你的代码。以下内容将您的产品自定义字段"成本中心"保存为隐藏的订单项目元数据,仅在每个项目的管理订单编辑页面中可见:

// Admin products: Display custom Field
add_action( 'woocommerce_product_options_general_product_data', 'product_options_general_product_data_add_field' );
function product_options_general_product_data_add_field() {
    global $post;

    echo '<div class="options_group">';

    woocommerce_wp_select( array(
        'id'      => '_cost_centre',
        'label'   => __( 'Cost Centre', 'woocommerce' ),
        'options' => array(
            'MFEG'   => __( 'MFEG', 'woocommerce' ), // Default displayed option value
            'YDIT'   => __( 'YDIT', 'woocommerce' ),
        )
    ) );

    echo '</div>';
}

// Admin products: Save custom Field
add_action( 'woocommerce_process_product_meta', 'product_options_general_product_data_save_field' );
function product_options_general_product_data_save_field( $post_id ){
    if( isset( $_POST['_cost_centre'] ) )
        update_post_meta( $post_id, '_cost_centre', esc_attr( $_POST['_cost_centre'] ) );
}

// Order items: Save product "Cost centre" as hidden order item meta data
add_action('woocommerce_checkout_create_order_line_item', 'save_file_type_as_order_item_meta', 20, 4);
function save_file_type_as_order_item_meta($item, $cart_item_key, $values, $order) {
    if ( $cost_centre = $values['data']->get_meta('_cost_centre') ) {
        $item->update_meta_data( '_cost_centre', $cost_centre ); // Save as order item (visble on admin only)
    }
}

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

导出:(在StackOverFlow中,规则是一个问题对应一个答案)。

WordPress/WooCommerce基本订单导出不允许导出订单项

您将需要使用第三方插件,并根据所选插件,您将不得不添加您的订单项目自定义字段_cost_centre为您的出口基于插件的可能性。

 类似资料:
  • 我对woocommerce(最新版本)中的自定义字段有问题。我需要你的帮助。 我的代码 现在我在从自定义字段获取数据时遇到问题。字段被保存到数据库中,因为在我编辑产品时,值在字段中,但在完成订单后,我无法在钩子中获取它:(我尝试使用get_post_meta、get_meta和其他方法,但都不起作用。有人知道原因吗?

  • 在Woocommerce 3应答代码中使用将自定义产品元数据传递到订单,当从后端手动创建订单时,从后端手动添加产品时,是否可以保存和显示自定义元数据? 这是我的代码(略有改动): 当客户机从前端创建订单时,这种方法可以正常工作。但是,当管理员从后端手动创建订单并添加产品时,自定义元数据不可见。 对于手动创建的订单,如何解决此问题,允许添加产品自定义字段作为自定义订单项目数据?

  • 当从管理员向订单添加产品时,我尝试将自定义产品元添加到订单项元。这是我的代码,它在后端什么都不做。。。

  • 这是RESTful Web应用程序。我使用Hibernate Envers来存储历史数据。除了版本号和时间戳,我还需要存储其他详细信息(例如:IP地址和认证用户)。Envers提供了多种方法来拥有一个非常棒的自定义修订实体。我在修改实体上设置自定义数据时面临问题。 由于newRevision()方法不允许任何附加参数,因此我无法将自定义数据(如用户名和ip)传递给它。我该怎么做? Envers还提

  • 问题内容: 这在Django 1.9中用form_kwargs修复。 我有一个看起来像这样的Django表单: 我称这种形式的东西是这样的: 登录用户在哪里。这按预期工作。 我的问题是,我现在想将此单一表单转换为表单集。我不知道的是在创建表单集时如何将会员信息传递给各个表单。根据文档来制作一个表单集,我需要做这样的事情: 然后我需要这样创建它: 现在如何以这种方式将affiliate = requ

  • 使用,并希望将常量/参数传递给自定义映射器 我的目的地具有 Map 类型的字段