如何解决无法通过 WooCommerce REST API 删除产品类别
我正在使用 WooCommerce REST API v3,远程对产品和类别执行基本的 CRUD 操作 - WP 托管在一台服务器上(例如 example.com),执行 CRUD 的逻辑在另一台服务器上(例如 mysite .com)。
虽然我可以列出、创建和更新产品类别,但我无法删除它们。我要删除的类别都没有子类别,也没有附加产品。
这是我的代码:
$consumer_key = "<consumer_key>";
$consumer_secret = "<consumer_secret>";
$catUrl = "https://www.example.com/wp-json/wc/v3/products/categories/";
$catId = 63; // id of the category which I want to delete
$url = $catUrl.$catId."?force=true&consumer_key=".$consumer_key."&consumer_secret=".$consumer_secret;
$ch = curl_init($url);
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$result = curl_exec($ch);
$response = curl_getinfo($ch,CURLINFO_HTTP_CODE);
curl_close($ch);
echo "<pre>";
if(isJson($result)) {
print_r(json_decode($result,true));
} else {
print_r($result);
}
echo "<hr>";
print_r($response);
echo "</pre>";
echo $url;
cURL 返回我期望的结果,并且 what the documentation says,状态代码是 200
,但是当我查看 WordPress 网站中的产品类别时,该类别仍然存在。
我也尝试将请求类型更改为 POST(服务器不支持 DELETE 作为自定义请求类型),如下所示:
$url = $catUrl.$catId."?consumer_key=".$consumer_key."&consumer_secret=".$consumer_secret;
$data = array(
"force" => true
);
$ch = curl_init($url);
curl_setopt($ch,true);
curl_setopt($ch,CURLOPT_CUSTOMREQUEST,"POST");
curl_setopt($ch,CURLOPT_POSTFIELDS,http_build_query($data));
$result = curl_exec($ch);
我的猜测是 API 不知道我正在尝试删除某些内容,这就是为什么它只返回类别信息(force=true 不足以删除类别)。
是否有任何其他参数可以传递给 WC API,以使其删除我希望它删除的类别?如果是这样,如何?
解决方法
我设法通过添加一个额外的参数 - _method=DELETE
来解决它 - 感谢有关如何执行覆盖 found here 的说明。
工作代码:
$consumer_key = "<consumer_key>";
$consumer_secret = "<consumer_secret>";
$catUrl = "https://www.example.com/wp-json/wc/v3/products/categories/";
$catId = 63; // id of the category which I want to delete
$url = $catUrl.$catId."?_method=DELETE&consumer_key=".$consumer_key."&consumer_secret=".$consumer_secret;
$data = array(
"force" => true
);
$ch = curl_init($url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_CUSTOMREQUEST,"POST");
curl_setopt($ch,CURLOPT_POSTFIELDS,http_build_query($data));
$result = curl_exec($ch);
curl_close($ch);
echo "<pre>";
if(isJson($result)) {
print_r(json_decode($result,true));
} else {
print_r($result);
}
echo "<hr>";
print_r($response);
echo "</pre>";
echo $url;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。