我正在尝试在WooCommerce商店中创建功能,以在单击项目时/根据外部数据库和API加载商品页面时更新商品的库存数量。我已经使用如下钩子成功创建了函数:
add_action('woocommerce_before_single_product', 'update_product_stock');
function update_product_stock(){
global $product;
$sku = $product -> get_sku();
//code for updating based on $sku
}
因此,在装入产品页面时,这将正确更改产品的库存量。问题是,此更改不会在页面加载/呈现时反映出来。必须刷新或重新访问页面才能显示新的库存量。我还尝试过使用“ init”钩子和“ template_redirect”钩子,但是这些不允许我访问产品以获取id / sku /其他信息以发送到API进行数据检索。>
有人知道我可以获取产品的商品详细信息,更新帖子元信息(我正在使用wc_update_product_stock()),并且将这些更改反映在页面视图上而无需重新加载吗?我想我最终还必须在搜索结果页面上实现此功能,但我想首先对它进行排序。
答案 0 :(得分:0)
如果其他人最终需要类似的东西,我最终将获得所需的功能,我将在此处进行演示。
//this hook runs before the page/product loop
add_action('storefront_before_site', 'update_product_stock');
function update_product_stock(){
//since this now runs before the standard post loop,
//need a different way to access the post.
//use page id to differentiate between products and other shop pages.
$page_id = get_queried_object_id();
//my code for fetching stock here
$stock_num_to_set = determine_new_stock();
$product = new WC_Product($page_id);
//check that the page is indeed a product page
//(i use the sku, use your own preferred method)
$product_sku = get_post_meta($page_id, '_sku', true);
if($product_sku){
//update using woocommerce product update.
//now this is the info that will be fetched as the post is loaded normally
wc_update_product_stock($product, $stock_num_to_set);
}
}
感谢该用户提供有关以下类似问题的信息:https://stackoverflow.com/a/3127776/6581190