WooCommerce STORE API扩展失败:woocommerce_blocks_loaded钩子未触发
WooCommerce Store API扩展钩子未触发问题解决
确认WooCommerce Blocks插件状态
woocommerce_blocks_loaded是WooCommerce Blocks插件专属钩子,并非WooCommerce核心自带。如果未安装并激活该插件,这个钩子永远不会触发。
调整代码加载位置
Roots Sage主题的setup.php加载时机可能早于WooCommerce Blocks插件初始化,导致钩子注册时插件还未完成加载。建议将代码迁移到:
- Sage主题架构下的
app/actions.php或app/filters.php(更符合主题规范) - 独立的自定义插件文件中(避免主题更新丢失代码)
示例代码(放在app/actions.php):
add_action('woocommerce_blocks_loaded', function () { var_dump('woocommerce_blocks_loaded钩子已触发'); // 后续扩展Store API的代码写在这里 });
检查WooCommerce Blocks版本
确保使用最新稳定版的WooCommerce Blocks插件,旧版本可能存在钩子未定义或触发逻辑异常的情况。
扩展Store API添加自定义CustomerDetails示例
钩子正常触发后,可通过过滤器扩展用户详情字段:
add_action('woocommerce_blocks_loaded', function () { add_filter('woocommerce_blocks_rest_api_prepare_customer_details', function ($customer_data, $customer) { // 添加自定义字段,例如用户的会员等级 $customer_data['membership_level'] = get_user_meta($customer->get_id(), 'membership_level', true); return $customer_data; }, 10, 2); });
排查插件加载问题
如果钩子仍未触发,可以直接在WooCommerce Blocks插件的src/BlockAssets.php文件中找到do_action('woocommerce_blocks_loaded');代码行,用Xdebug断点验证插件是否执行到该位置,排查插件加载失败的潜在问题。
内容的提问来源于stack exchange,提问作者Admiral Murtho
相关产品推荐
相关产品推荐

