【问题标题】:Woocommerce update_status() Only Works for Admin OrdersWoocommerce update_status() 仅适用于管理员订单
【发布时间】:2021-08-18 19:06:39
【问题描述】:

非常奇怪的问题。我已经构建了一个插件(用于客户端,而不是公共的),它创建了几个 REST 端点,运输服务(Shippo)将数据传递到(所有这些都很好并且工作)。该插件获取数据,获取订单号,并尝试设置已完成状态。

仅当订单来自管理员帐户时,代码才能完美运行。但任何其他自定义帐户和状态都不会保存。生成一个订单说明,声称状态已更改,我可以在订单上设置元数据。但状态不会改变。

在代码中,我尝试使用 update_status() 和 set_status() 有和没有 .save();

add_action('rest_api_init', function () {
register_rest_route('lab/v1', '/shipment_label_created_shippo', ['methods' => 'POST', 'callback' => 'rest_shipment_label_created_shippo', 'permission_callback' => '__return_true', ]);
register_rest_route('lab/v1', '/shipment_label_updated_shippo', ['methods' => 'POST', 'callback' => 'rest_shipment_label_updated_shippo', 'permission_callback' => '__return_true', ]);
    register_rest_route('lab/v1', '/shipment_tracking_updated_shippo', ['methods' => 'POST', 'callback' => 'rest_shipment_tracking_updated_shippo', 'permission_callback' => '__return_true', ]);});

// Label Created in Shippo (transaction_created)
function rest_shipment_label_created_shippo($data){
    $log = new WC_Logger();

$response = new WP_REST_Response("Failed");
$response->set_status(200);

$meta_order_number = $data['data']['metadata'];
$woo_order_number = explode(" ", $meta_order_number);
$order_number = intval($woo_order_number[1]);

if ($shippo_status == "SUCCESS" && !is_null($shippo_order_id)) {


  if( class_exists('WC_Order') && $order_number > 0 ) {

      $order = wc_get_order($order_number);

      if ($order) {
          $payment_method = $order->get_payment_method();
          $payment_method_title = $order->get_payment_method_title();
          $date_paid = $order->get_date_paid();

          // Update the Order Meta as well for tracking
          $update_order_was_shipped = update_post_meta($order_number, '_order_was_shipped', $date_shipped);

          // Add the Shippo Transaction ID
          $update_transactionid = update_post_meta($order_number, '_shippo_transaction_id', $shippo_transaction_id);


          if ($payment_method == "invoice" && !is_null($date_paid))
          {

              $order->update_status('shipped-invoiced');
              $saved_order_id = $order->save();
          }
          else
          {
              $order->update_status('completed');

              $saved_order_id = $order->save();
          }
  }

提前感谢您的任何想法!

【问题讨论】:

    标签: wordpress woocommerce plugins woocommerce-rest-api


    【解决方案1】:

    以防万一其他人偶然发现这个问题,我想回答这个问题。

    似乎只有管理员订单(我下的订单)有效的原因是因为我从未打开过订单标签。我们的客户总是打开他们通过第 3 方更新的订单。当Rest API被第3方命中时,由于订单被锁定,订单详情没有保存。

    这当然是有道理的,但对我来说并不是最重要的。

    【讨论】:

      猜你喜欢
      • 2017-01-29
      • 1970-01-01
      • 2018-08-29
      • 2020-02-18
      • 2015-03-03
      • 2016-01-22
      • 1970-01-01
      • 1970-01-01
      • 2019-08-29
      相关资源
      最近更新 更多