WordPress插件调用含Woocommerce条件判断的函数应使用哪个钩子?
问题根本原因
你遇到的条件判断失效问题确实和钩子触发顺序直接相关:is_product()、is_cart()这类WooCommerce条件标签本质是依赖WordPress核心的主查询(Main Query)结果实现的,而woocommerce_init的触发时机是WooCommerce自身初始化完成的节点,此时WordPress还未执行页面主查询,所有基于查询结果的条件标签都无法返回正确值,自然判断失效。
推荐的替代钩子
以下两个钩子触发时机都晚于plugins_loaded,且所有条件标签都可正常使用,匹配度远高于wp_enqueue_scripts:
- 首选
template_redirect
这是处理前台页面类型判断相关逻辑的最常用钩子,触发时机为WordPress确定当前页面要加载的模板之后、模板渲染之前,完全兼容所有WordPress和WooCommerce的条件标签,不管是要注册内容修改钩子、权限判断还是页面逻辑调整都适用。 - 次选
wp钩子
触发时机比template_redirect更早,在WordPress主查询执行完成后就会触发,同样支持所有条件标签,如果你的逻辑需要在模板加载前更早执行可以选择这个钩子。
示例修改代码
你可以直接调整init()方法内的钩子注册逻辑即可:
public function init() { // 替换为template_redirect即可,条件判断正常生效,钩子匹配度更高 add_action( 'template_redirect', array( $this, 'doo_woo' )); }
内容的提问来源于stack exchange,提问作者Khrys
相关产品推荐
相关产品推荐

