Cod*_*ior 5 php wordpress woocommerce
在在这里提出这个问题之前,我已经浏览了很多关于 SO 的博客和帖子。
我正在使用 WooCommerce 插件并试图通过动作挂钩获取产品数据以传递给第 3 方 API。
我尝试了各种代码块,但没有一个给我产品信息。
因此,我尝试在 WooCommerce 上添加/更新/删除产品,并将以下挂钩放置在我的子主题functions.php文件中。
挂钩 1
function on_all_status_transitions( $new_status, $old_status, $post ) {
echo '<script>console.log("old_status: ' . $old_status . '")</script>';
echo '<script>console.log("new_status: ' . $new_status . '")</script>';
}
add_action('transition_post_status', 'on_all_status_transitions', 10, 3 );
Run Code Online (Sandbox Code Playgroud)
仅打印一次当$new_status是auto-draft,然后当我把它保存为草稿或发布或将其移动到垃圾,什么都不会发生。
钩子 2
function sync_on_product_save($product_Id){
$product = wc_get_product($product_Id);
echo '<script>console.log("Product Id: ' . $product_Id . '")</script>';
// Do what you need for 3rd party here...
}
add_action('woocommerce_new_product', 'sync_on_product_save', 10, 1);
Run Code Online (Sandbox Code Playgroud)
这个钩子永远不会被触发。
挂钩 3
产品更新挂钩也会发生同样的情况,从未触发过。
add_action('woocommerce_update_product', 'sync_on_product_save', 10, 1);
根据我所做的所有阅读,它似乎非常明显并且应该可以正常工作。因此,如果有人能指出我可能做错了什么或我可能遗漏了什么,那就太好了。
此外,我知道我们可以在 WooCommerce 中创建 webhook,将有效负载传送到我们可以指定的 URL。我想把它作为最后的选择。
任何帮助都受到高度赞赏。提前致谢。
注意:我在启用 https 的 wamp 上在 localhost 上运行我的 Wordpress 实例。
当你更新产品时,你的钩子一直在触发。当您转储产品 ID 并终止 PHP 执行时,您可以看到产品 ID。
function sync_on_product_save($product_Id){
var_dump( $product_Id ); exit;
echo '<script>console.log("Product Id: ' . $product_Id . '")</script>';
// Do what you need for 3rd party here...
}
add_action('woocommerce_update_product', 'sync_on_product_save', 10, 1);
Run Code Online (Sandbox Code Playgroud)
该过程将是这样的:您点击更新产品按钮,它将带您到 post.php 将添加您的脚本,很快它将重定向到您的原始产品编辑 URL [ http://example.com/wp- admin/post.php?post=xx&action=edit]。这将删除您添加的脚本,这就是您无法看到这些脚本的原因。
谢谢