在 init 上使用 Woo 条件语句

Woo Conditionals on init

我正在尝试将标题添加到面包屑上方。我的问题是为什么 WooCommerce 条件语句在 template_redirect 上工作得更好但在 init 上不起作用。例如:

/** Woo General Init **/
function woo_general_init() {
    echo ( is_product() ) ? 'True' : 'False';

    if( is_product() ) {
        add_action( 'woocommerce_before_main_content', 'woocommerce_template_single_title', 10 );
        add_action( 'woocommerce_before_main_content', 'woocommerce_template_single_excerpt', 11 );
    }
}
add_action( 'init', 'woo_general_init' );

在查看单个 WooCommerce 产品时评估为 False 在我的文档顶部。在 other-hand 上,如果我将 init 更改为 template_redirect,则条件输出 True:

/** Woo General Init **/
function woo_general_init() {
    echo ( is_product() ) ? 'True' : 'False';

    if( is_product() ) {
        add_action( 'woocommerce_before_main_content', 'woocommerce_template_single_title', 10 );
        add_action( 'woocommerce_before_main_content', 'woocommerce_template_single_excerpt', 11 );
    }
}
add_action( 'template_redirect', 'woo_general_init' );

为什么我连接到 init 时得到 "False",但连接到 template_redirect 时得到 "True"? 运行 WooCommerce 条件数据的最佳挂钩是什么?

操作 init 发生得太早,无法判断当前页面是否应显示页面。您至少要等到 template_redirect。来自“is_page() 不在插件中工作”的参考 - https://wordpress.stackexchange.com/q/115142/26523