簡體   English   中英

Wordpress woocommerce 通過 php Z81C3B080DAD537DE7EZE10E0987A4BF5E 更新產品庫存和狀態

[英]Wordpress woocommerce update product stock and status via php mysql

我想使用 php 更新產品庫存數量和當前產品狀態。

我使用了這段代碼,它完美地更新了所需的值。

//post_id查詢

$stm = $pdo->prepare("SELECT * FROM wp_postmeta WHERE meta_value = :sku");
$stm->bindParam(":sku", $sku, PDO::PARAM_STR);
$stm->execute();
$row = $stm->fetch(PDO::FETCH_ASSOC);

//通過post_id查詢更新庫存

$stm = $pdo->prepare("UPDATE `wp_postmeta` SET `meta_value` = :stock WHERE `post_id` LIKE :id AND `meta_key` LIKE '_stock'");
$stm->bindParam(":id", $row['post_id'], PDO::PARAM_INT);
$stm->bindParam(":stock", $stock, PDO::PARAM_INT);
$stm->execute();

//通過 post_id query2 更新股票

$stm = $pdo->prepare("UPDATE `wp_wc_product_meta_lookup` SET `stock_quantity` = :stock WHERE `sku` LIKE :sku");
$stm->bindParam(":sku", $sku, PDO::PARAM_STR);
$stm->bindParam(":stock", $stock, PDO::PARAM_INT);
$stm->execute();

//如果庫存0設置為缺貨

if ($stock < 1){
    $stm = $pdo->prepare("UPDATE `wp_postmeta` SET `meta_value` = 'outofstock' WHERE `post_id` LIKE :id AND `meta_key` LIKE '_stock_status'");
    $stm->bindParam(":id", $row['post_id'], PDO::PARAM_INT);
    $stm->execute();
    $stm = $pdo->prepare("UPDATE `wp_wc_product_meta_lookup` SET `stock_status` = 'outofstock' WHERE `sku` LIKE :sku");
    $stm->bindParam(":sku", $sku, PDO::PARAM_STR);
    $stm->execute();
}

//如果stock 1或更多設置為instock

if ($stock > 0){
    $stm = $pdo->prepare("UPDATE `wp_postmeta` SET `meta_value` = 'instock' WHERE `post_id` LIKE :id AND `meta_key` LIKE '_stock_status'");
    $stm->bindParam(":id", $row['post_id'], PDO::PARAM_INT);
    $stm->execute();
    $stm = $pdo->prepare("UPDATE `wp_wc_product_meta_lookup` SET `stock_status` = 'instock' WHERE `sku` LIKE :sku");
    $stm->bindParam(":sku", $sku, PDO::PARAM_STR);
    $stm->execute();
}

但是,完成腳本后,產品頁面上的值不會更新。 如果我從管理菜單打開產品並在產品頁面上檢查產品,現在值已刷新,雖然我沒有在 wordpress 管理中點擊保存或更新按鈕,只是打開了產品。

我的問題是,是否需要手動設置任何其他參數,以便產品在最終用戶頁面上更新? 我錯過了什么,還是需要運行 function 才能初始化新值?

提前致謝

我發現刷新 redis object 緩存會更新庫存和當前狀態,所以我的問題看起來解決了。 在我的文件頂部,我添加了require_once('../wp-load.php'); 並在腳本末尾添加global $wp_object_cache; $wp_object_cache->redis_instance()->flushall(); global $wp_object_cache; $wp_object_cache->redis_instance()->flushall(); 刷新緩存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM