使用自定义Wordpress API端点更新WooCommerce产品

问题描述 投票:2回答:2

我试图通过API调用自定义Wordpress端点来更新我的WooCommerce产品。我成功接到我的电话,数据可以访问,但产品实际上并没有更新。

我的终点:

add_action('rest_api_init', function(){
  register_rest_route('productupdate/v1', '/update', array(
      'methods' => 'POST',
      'callback' => 'determine_request'
  ));
});

所以我发出POST请求:https://example.com/wp-json/productupdate/v1/update

在我的determine_request函数中,我有许多地方写入日志文件以确保调用辅助函数并接收和读取数据,并且日志反映这些都是按预期工作的。唯一的问题是产品从未真正更新过。

我正在做的事情的例子(这是简化以获得我如何处理这个的基本概念):

function determine_request($request){
  $data = $request -> get_json_params()['Inserted'][0];
  $sku = $data['InventoryID'];
  $product_id = wc_get_product_id_by_sku($sku);
  $product = wc_get_product($product_id);
  $current_name = $product->get_name();
  $sent_name = $data['Description'];
  if($current_name != $sent_name){
    write_to_log("Current Name does not match sent Name!");
    write_to_log("Changing name from: " . $current_name);
    write_to_log('Changing name to: ' . $sent_name);
    $product->set_name($sent_name);
  } else {
    write_to_log("Current Name matches sent Name. Skipping...");
  }
 }

当我这样做时,我的日志显示了所有正确的事情,但没有更新。我尝试在函数的末尾添加一个$product->save();,但这并没有解决它。我尝试在邮递员请求中使用管理员登录名和密码添加Basic Auth,但这也没有做任何事情。

让产品更新,我错过了什么或做错了什么?

php wordpress woocommerce
2个回答
0
投票

函数set_name()不会更新数据库本身的任何内容,只应更改存储在类对象中的内容。

试试这个

$product_detils = array(
          'ID'           => $product_id,
          'post_title'   => $sent_name,
);
wp_update_post($product_detils);

0
投票

实际上最终为我工作的是这个。

我不需要Basic Auth(在我确认之后将其关闭)。但是我在设置字段后需要在每个辅助方法中执行$product->save();。例如:

function main(){
  $product_id = 12345;
  $product = wc_get_product($product_id);
  helper1($product);
  helper2($product);
}

function helper1($product){
  $product->set_name("foo");
  $product->save();
}

function helper2($product){
  $product->set_short_description("here is a short description");
  $product->save();
}

希望如果他们像我一样陷入困境,这对未来的其他人有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.