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

WooCommerce管理订单添加可编辑的元数据并保存它

梅宏盛
2023-03-14

我的WooCommerce Wordpress网站前端有一个功能,可以为正确回答一个简单问题的人生成票号,而对于回答不正确的人则不生成票号。它将用户的答案保存在订单项目元数据中,我拥有它,因此答案将显示在订单中每个项目的后端可编辑文本输入字段中,因为每个项目都有不同的答案。

add_action( 'woocommerce_admin_order_item_values', 'pd_admin_order_item_values', 10, 3);
function pd_admin_order_item_values( $product, $item, $item_id ) {
    $user_answer = $item->get_meta( "User Answer" );
?>
<div class="edit_custom_field"> <!-- use same css class in h4 tag -->
<?php
    woocommerce_wp_text_input( array(
        'id' => 'custom_field_name',
        'label' => 'Update User Answer:',
        'value' => $user_answer,
        'wrapper_class' => 'form-field-wide'
    ) );
?>
</div>
<?php
}

我需要这样做,如果管理员将其更改为正确的字段并更新帖子,它将保存新的数据并运行分配票号的功能。我使用的钩子是正确的,因为当我点击订单上的更新时,它崩溃了,但是日志显示它的参数太少,无法运行。我见过一些人使用$post_id和$post来代替订单变量,但将其更改为调用这些变量也不起作用。

add_action( 'woocommerce_process_shop_order_meta', 'custom_woocommerce_process_shop_order_meta', 10, 4 );
function custom_woocommerce_process_shop_order_meta( $item, $order_id, $order ){
// Loop through order items
foreach ($item->get_items() as $item_id => $item ) {
    $admin_question = wc_sanitize_textarea( $_POST[ 'custom_field_name' ] );
    $user_answer = $item->get_meta( $admin_question );
    $admin_answer = $item->get_meta( "Answer" );
    if( $admin_answer == $user_answer ){
        // Check that tickets numbers haven't been generated yet for this item
        if( $item->get_meta( "_tickets_number") )
            continue;

        $product     = $item->get_product(); // Get the WC_Produt Object
        $quantity    = (int) $item->get_quantity(); // Get item quantity

        // Get last ticket sold index from product meta data
        $now_index = (int) $product->get_meta('_tickets_sold');

        $tickets_ids = array(); // Initializing

        // Generate an array of the customer tickets Ids from the product registered index (last ticket ID)
        for ($i = 1; $i <= $quantity; $i++) {
            $tickets_ids[] = $now_index + $i;
        };

        // Save the tickets numbers as order item custom meta data
        $item->update_meta_data( "Tickets numbers", implode('  ', $tickets_ids) ); // Displayed string of tickets numbers on customer orders and emails
        $item->update_meta_data( "User Answer", $user_answer ); // Displayed string of tickets numbers on customer orders and emails
        $item->update_meta_data( "_tickets_number", $tickets_ids ); // (Optional) Array of the ticket numbers (Not displayed to the customer)
        $item->save(); // Save item meta data

        // Update the Ticket index for the product (custom meta data)
        $product->update_meta_data('_tickets_sold', $now_index + $quantity );
        $product->save(); // Save product data
    } else {
        $item->update_meta_data( "User Answer", $user_answer ); // Displayed string of tickets numbers on customer orders and emails
        $item->save(); // Save item meta data
    }
}
$order->save(); // Save all order data
}

我认为我的问题在于,当它运行函数时,无法调用order和order id变量,但我不确定。

共有1个答案

国景铄
2023-03-14

结果表明,如果我将订单移回保留状态,在那里编辑元数据,然后将其向前移动以再次处理,它将运行原始函数并分配一个编号。

 类似资料:
  • 我正在为WooCommerce开发一个插件。我想覆盖admin的订单详细信息模板。我已经阅读了关于https://www.skyverge.com/blog/override-woocommerce-template-file-within-a-plugin/,但我仍然不明白如何覆盖admin的订单详细信息模板。以下是我的代码: 它不会在订单详细信息之后调用与

  • 使用以下代码,我可以在WooCommerce产品上获得一个自定义字段,但是如何在订单、结帐和管理订单(后端)上显示它呢? 这是我在每个产品上的自定义字段 这是我的管理订单(后端)详细信息。我尝试显示我在每个产品帖子中输入的正确元数据。 如何在管理订单中显示我在自定义字段中输入的值?我也希望有人能帮助我显示在订单和结帐页面的元。。。或者引导我走向正确的方向。我意识到,为了在管理订单中显示它,我必须确

  • 我目前正在成功地向我的WooCommerce产品页面添加一个字段,该字段显示以下值: 在推车(前端), 在结账页面(前端), 在订单页(前端), 并在管理个人订单页面(后端)。 问题是:它在管理订单的“自定义字段”元框中没有显示为自定义字段,其值在其中,而只是在订单页面中显示为文本。 这是我的工作代码: 我认为这是代码的最后一点需要更改。它当前显示订单项下的文本,因此我可能需要调整? 我什么都试过

  • 我正在为我的WooCommerce商店出售的产品使用一些自定义项目元。我正在寻找一种方法来隐藏项目元显示在管理订单页面上的订单项目部分下。 我使用下划线的元名称,但元仍然显示。 你可以在附件中看到我的意思。。。 想法?

  • 基于将产品自定义字段保存为自定义订单项元数据的WooCommerce管理手动订单 我有这些代码来显示从前端下的订单的产品重量和尺寸,但我无法让它们用于从后端手动下的订单。当我添加产品时,我看不到重量和尺寸,它们也不会显示在页面上以支付订单、收到订单和发送电子邮件。 这是我的代码: 在任何地方展示并保存产品的重量。 到处显示和保存产品尺寸。

  • 订单管理位于WooCommerce - 订单下,当你的站点开始收到订单后,就能看到这个菜单。订单仅对管理员和商店经理/Shop Manager可见,每个订单有一个唯一的ID,这个ID就是WordPress post_id,是不连续的。本文简单介绍一下WooCommerce订单管理的方法。 订单状态的含义 待付款 / Pending Payment 成功下单但未支付订单,等待付款。如果支付网关的no