【问题标题】:Wordpress woocommerce update product stock and status via php mysqlWordpress woocommerce 通过 php mysql 更新产品库存和状态
【发布时间】:2021-04-13 09:44:39
【问题描述】:

我想使用 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查询更新库存

$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 管理中点击保存或更新按钮,只是打开了产品。

我的问题是,是否需要手动设置任何其他参数,以便产品在最终用户页面更新?我是否遗漏了什么,或者是否需要运行某个函数来初始化新值?

提前致谢

【问题讨论】:

    标签: php mysql wordpress woocommerce pdo


    【解决方案1】:

    我发现刷新 redis 对象缓存会更新库存和当前状态,所以我的问题看起来已经解决了。在我的文件顶部,我添加了 require_once('../wp-load.php'); 并在脚本末尾添加 global $wp_object_cache; $wp_object_cache-&gt;redis_instance()-&gt;flushall(); 刷新缓存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-29
      • 1970-01-01
      • 2021-03-16
      • 2020-01-24
      • 1970-01-01
      • 2021-06-07
      • 1970-01-01
      • 2020-05-18
      相关资源
      最近更新 更多