Обновите продукт WooCommerce с помощью пользовательской конечной точки API Wordpress - PullRequest
2 голосов
/ 14 марта 2019

Я пытаюсь обновить свои продукты WooCommerce с помощью вызова API для пользовательской конечной точки Wordpress. Я успешно получаю звонок и данные доступны, но продукт на самом деле не обновляется.

Моя конечная точка:

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

В моей функции define_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 с логином и паролем администратора в своем запросе почтальона, но это также не помогло.

Что я пропускаю или делаю неправильно, чтобы заставить продукт обновиться?

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Так что на самом деле у меня получилось так:

Мне не требовался 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();
}

Надеюсь, это поможет кому-то другому в будущем, если они застрянут, как я.

0 голосов
/ 14 марта 2019

функция set_name() не будет обновлять ничего в самой базе данных и должна изменять только то, что хранится в объекте класса.

Попробуйте вместо этого

$product_detils = array(
          'ID'           => $product_id,
          'post_title'   => $sent_name,
);
wp_update_post($product_detils);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...