我只在管理员连接时在商店页面上的产品上添加一个按钮。按下此按钮会将产品库存重置为零 (0)。有时使用产品图片从网站上清除缺货产品比使用其 SKU 搜索产品更容易。我根据 @LoicTheAztec 和 @Víctor González SO 的答案编写了此代码以更新数据库表,效果非常好。以下是工作代码
function createStockZeroButton(){
global $product;
$theId = $product-> get_id();
if(current_user_can( 'administrator' )){
echo "<form action='' method='POST'>
<button type='submit' class='stockZeroButtonClass' name="."name"."$theId".">set Stock To 0 for id".$theId."</button>
</form>";
if(isset($_POST["name".$theId])){
$con = mysqli_connect($server, $username, $password, $database);
$database_request = "UPDATE wp_postmeta pm
INNER JOIN wp_wc_product_meta_lookup pml
ON pm.post_id = pml.product_id
SET pm.meta_value = '0', pml.stock_quantity = '0'
WHERE pm.meta_key = '_stock' AND pm.post_id = '$theId'";
$database_query = mysqli_query($con, $database_request);
$database_request ="UPDATE wp_postmeta pm
INNER JOIN wp_wc_product_meta_lookup pml
ON pm.post_id = pml.product_id
SET pm.meta_value = 'outofstock', pml.stock_status = 'outofstock'
WHERE pm.meta_key = '_stock_status' AND pm.post_id = '$theId'";
$database_query = mysqli_query($con, $database_request);
$database_query = "INSERT IGNORE INTO wp_term_relationships (object_id, term_taxonomy_id)
SELECT pml.product_id, (SELECT term_id FROM wp_terms WHERE slug = 'outofstock')
FROM wp_wc_product_meta_lookup pml
WHERE pml.stock_status = 'outofstock' AND pm.post_id = '$theId'";
$database_query = mysqli_query($con, $database_request);
}
}
}
add_action('woocommerce_shop_loop_item_title','createStockZeroButton');
我现在想使用 $wpdb 类来执行此操作。我已根据此 SO答案尝试了下面的代码,但无法使其工作。
function createStockZeroButton(){
global $product;
$theId = $product-> get_id();
if(current_user_can( 'administrator' )){
echo "<form action='' method='POST'>
<button type='submit' class='stockZeroButtonClass' name="."name"."$theId".">set Stock To 0 for id".$theId."</button>
</form>";
if(isset($_POST["name".$theId])){
$update1 = $wpdb->query($wpdb->prepare("UPDATE wp_postmeta pm
INNER JOIN wp_wc_product_meta_lookup pml
ON pm.post_id = pml.product_id
SET pm.meta_value = '0', pml.stock_quantity = '0'
WHERE pm.meta_key = '_stock' AND pm.post_id = '$theId'"));
$update2 = $wpdb->query($wpdb->prepare("UPDATE wp_postmeta pm
INNER JOIN wp_wc_product_meta_lookup pml
ON pm.post_id = pml.product_id
SET pm.meta_value = 'outofstock', pml.stock_status = 'outofstock'
WHERE pm.meta_key = '_stock_status' AND pm.post_id = '$theId'"));
$update3 = $wpdb->query($wpdb->prepare("INSERT IGNORE INTO wp_term_relationships (object_id, term_taxonomy_id)
SELECT pml.product_id, (SELECT term_id FROM wp_terms WHERE slug = 'outofstock')
FROM wp_wc_product_meta_lookup pml
WHERE pml.stock_status = 'outofstock' AND pm.post_id = '$theId'"));
}
}
}
add_action('woocommerce_shop_loop_item_title','createStockZeroButton');
在这种情况下,我们如何使用 INNER JOIN 和 $wpdb 实现正确查询?
也查看了官方文档链接,但还是无法理解。
您最好使用相关的 WooCommerce 设置方法。请尝试以下方法:
它应该以一种简单的方式更好地发挥作用。
请注意,这主要适用于简单产品。