Итак, я пытаюсь удалить продукт вместе с изображениями через REST API, но он удаляет все, КРОМЕ изображений. Я тестировал его отдельно, чтобы удалить изображение, но выдал следующую ошибку:
{"code":"rest_cannot_delete","message":"К сожалению, вам не разрешено удалять это сообщение.","data":{"status":401}}
Я пробовал новые ключи API с чтением/записью, но они не работают. Я использую учетную запись администратора в своем поддомене (промежуточном сайте), но не могу найти причину ограничения на удаление изображений.
Я уже несколько дней в тупике с этой проблемой. Может кто-нибудь мне помочь?
Это мой код:
function delete_product_image($product_id) {
$woocommerce_url = 'https://staging.website.com';
$consumer_key = '*consumer_key*';
$consumer_secret = '*consumer_secret*';
$get_product_url = $woocommerce_url . '/wp-json/wc/v3/products/' . $product_id;
error_log("URL: " . print_r($get_product_url, true));
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $get_product_url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Authorization: Basic ' . base64_encode($consumer_key . ':' . $consumer_secret)
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$product_response = curl_exec($ch);
curl_close($ch);
$product = json_decode($product_response, true);
if (isset($product['images']) && !empty($product['images'])) {
$image_ids = array_column($product['images'], 'id');
foreach ($image_ids as $image_id) {
$delete_image_url = $woocommerce_url . '/wp-json/wp/v2/media/' . $image_id . '?force=true';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $delete_image_url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Accept: application/json',
'Authorization: Basic ' . base64_encode($consumer_key . ':' . $consumer_secret)
));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$delete_response = curl_exec($ch);
$delete_http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($delete_http_status == 200) {
error_log("Deleted Image with ID: $image_id");
} else {
error_log("Failed to delete image with ID: $image_id. Response: " . print_r($delete_response, true));
return false;
}
}
return true;
} else {
error_log("Product not found or no images to delete.");
return false;
}
}
@shirshak007 @shirshak007 Я только что попробовал - проблема все еще та же. Я почти уверен, что ключи API верны. Я даже сделал для него новый.
Просто обновление по этому поводу, так как я смог решить свою проблему после нескольких дней экспериментирования с различными решениями - если ваши ключи API не работают должным образом, например (ключ API доступа администратора, но по-прежнему отображается неавторизованным REST), вместо этого используйте пароли приложений, поскольку они работают. то же, что и авторизация ключа API.
Вы можете использовать эту ссылку: Интеграция паролей приложений
Если вы больше любите YouTube: Видео на YouTube для интеграции пароля приложения.
Руководства должно быть достаточно, чтобы разобраться в коде. Если нет, не стесняйтесь спрашивать здесь.
Вы настроили плагин «Аутентификация WordPress REST API»? Я использую плагин от miniOrange, устанавливаю его и настраиваю REST API.