Wordpress/WooCommerce 挂钩未触发?

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_statusauto-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 实例。

Sus*_*ari 6

当你更新产品时,你的钩子一直在触发。当您转储产品 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]。这将删除您添加的脚本,这就是您无法看到这些脚本的原因。

谢谢