Wordpress / WC-在页面加载之前更新帖子/产品元

时间:2018-11-12 15:15:41

标签: php wordpress hook action

我正在尝试在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()),并且将这些更改反映在页面视图上而无需重新加载吗?我想我最终还必须在搜索结果页面上实现此功能,但我想首先对它进行排序。

1 个答案:

答案 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