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

将产品自定义字段值另存为WooCommerce中的自定义订单项元

宗政子辰
2023-03-14

我对woocommerce(最新版本)中的自定义字段有问题。我需要你的帮助。

我的代码

function completed_order($order_id) {
    $order = wc_get_order( $order_id );
    $customer_id = $order->get_customer_id();
    $user = get_user_by('id', $customer_id);

    foreach ( $order->get_items() as $item_id => $item ) {
        $validity = $item->get_meta( 'validity_field' );

        if($validity) {
            $a = get_post_meta($item->get_id(), 'validity_field', true);
        }        
    } 
}
add_action('woocommerce_order_status_completed', 'completed_order', 10, 1);


function create_custom_field() {
    $args = array(
        'id' => 'validity_field',
        'label' => __( 'Ważność konta', 'waznosc' ),
        'class' => 'waznosc-custom-field',
        'desc_tip' => true,
        'description' => __( 'Wprowadz ilosc dni waznosci konta', 'waznosc' ),
    );
    woocommerce_wp_text_input( $args );
}
add_action( 'woocommerce_product_options_general_product_data', 'create_custom_field' );

function save_custom_field( $post_id ) {
    $product = wc_get_product( $post_id );
    $title = isset( $_POST['validity_field'] ) ? $_POST['validity_field'] : '';
    $product->update_meta_data( 'validity_field', sanitize_text_field( $title ) );
    $product->save();
}
add_action( 'woocommerce_process_product_meta', 'save_custom_field' );

function add_custom_data_to_order( $item, $cart_item_key, $values, $order ) {
    foreach( $item as $cart_item_key=>$values ) {
        if( isset( $values['title_field'] ) ) {
            $item->add_meta_data( __( 'Waznosc konta', 'waznosc' ), $values['validity_field'], true );
        }
    }
}
add_action( 'woocommerce_checkout_create_order_line_item', 'add_custom_data_to_order', 10, 4 );

现在我在从自定义字段有效性\u字段获取数据时遇到问题。字段被保存到数据库中,因为在我编辑产品时,值在字段中,但在完成订单后,我无法在钩子中获取它:(我尝试使用get_post_meta、get_meta和其他方法,但都不起作用。有人知道原因吗?

共有1个答案

杜正奇
2023-03-14

您的代码中有一些错误。请尝试以下操作:

add_action( 'woocommerce_product_options_general_product_data', 'add_admin_product_custom_field' );
function add_admin_product_custom_field() {
    woocommerce_wp_text_input( array(
        'id' => 'validity_field',
        'label' => __( 'Ważność konta', 'waznosc' ),
        'class' => 'waznosc-custom-field',
        'desc_tip' => true,
        'description' => __( 'Wprowadz ilosc dni waznosci konta', 'waznosc' ),
    ) );
}

add_action( 'woocommerce_admin_process_product_object', 'save_product_custom_field_value' );
function save_product_custom_field_value( $product ) {
    $value = isset( $_POST['validity_field'] ) ? sanitize_text_field($_POST['validity_field']) : '';
    $product->update_meta_data( 'validity_field', $value );
}

add_action( 'woocommerce_checkout_create_order_line_item', 'add_custom_data_to_order_item', 10, 4 );
function add_custom_data_to_order( $item, $cart_item_key, $values, $order ) {
    $product = wc_get_product( $item->get_product_id() ); // The WC_Product Object (and the parent variable product object for product variations)
    $value   = $product->get_meta('validity_field');
    
    if( ! empty( $value ) ) {
        $item->update_meta_data( __( 'Waznosc konta', 'waznosc' ), $value );
    }
}

add_action( 'woocommerce_order_status_completed', 'action_completed_order', 10, 2 );
function action_completed_order( $order_id, $order ) {
    $user_id = $order->get_customer_id();
    $user    = $order->get_user(); // The WP_User Object (if needed)

    foreach ( $order->get_items() as $item_id => $item ) {
        $validity = $item->get_meta( 'validity_field' );
        
        if ( ! empty($validity) ) {
            // Do something with $validity
        }
    } 
}

这一次应该有效。

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

  • 是否有一种方法可以在WooCommerce订单页面的每个产品下显示我的自定义SKU? 当我编辑产品时,自定义sku显示良好,但它不会显示在产品的订单页面中。我需要在订单上显示此信息,以便Zapier可以将其与产品的Visma帐户软件ArticleID匹配。 此尝试基于如何向WooCommerce产品添加(第二个)自定义sku字段的解决方案?

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

  • 我一直在编码一个WP插件,用于计算订单的平方英寸总体积,并通过自定义字段将其发送到Shipstation: 我通过SFTP上传到网站文件,它显示在WP上,但当我点击激活我得到一个致命的错误: 致命错误:未捕获错误:调用成员函数get_cart()在 /nas/content/live/sfmstaging/wp-content/plugins/boxCalc/boxCalc.php:10堆栈跟踪空

  • 我有一家woocommerce商店,想定制我的产品。用户直接访问类别页面,无店铺存档页面。 你有没有什么好的方法来定制订单?我试着使用插件,并给那些产品一个编号。。。但一切都没有奏效。 问候

  • 在该商业商店订购特定产品时,将向订单添加两个元值。 存储元值的两个字段位于 元键是: 我希望在下新订单时以编程方式创建一个新的自定义字段,并将此新字段的值设置为,前提是已订购的产品存在元键assemblycost。 经过一些研究,我发现是一个钩子,在订单保存到数据库并更新元数据后执行。所以这似乎是我应该使用的钩子。 参考:为Woocommerce中的订单添加额外的元数据: 我尝试在函数中添加以下代