我想这已经是个问题了,但我还没有遇到过。
I\'m wondering what the correct hook for checking theme support is in a theme and also a plugin.
function my_theme_or_plugin_add_theme_support_feature()
if (current_theme_supports( $feature )) {
add_action( $hook, $function_to_add, $priority, $accepted_args );
add_filter( $tag, $function_to_add, $priority, $accepted_args );
}
}
add_action( $hook, \'my_theme_or_plugin_add_theme_support_feature\');
因此,在上述示例中
my_theme_or_plugin_add_theme_support_feature 检查、运行主题和插件,是否有必要?两者都一样吗?
Examples:
add_action( \'wp_loaded\', \'my_theme_or_plugin_add_theme_support_feature\');
add_action( \'init\', \'my_theme_or_plugin_add_theme_support_feature\');
add_action( \'after_setup_theme\', \'my_theme_or_plugin_add_theme_support_feature\');
Update:
事实上我刚发现
this question, 这非常相似。
还有一个类似的question I asked here 我可以用add_theme_support 在插件中。。。然而,它并不是百分之百的工作。
最合适的回答,由SO网友:Pieter Goosen 整理而成
这真的取决于你在这里需要做什么。通常的方法是将所有主题支持功能挂接到after_setup_theme 因为一些显而易见的原因。
after_setup_theme 是第一个可以为主题添加任何类型支持的动作挂钩。某些功能必须在此处注册,以后无法注册。想到的一个特性是支持post格式。post_format 是在上注册的内置分类法init. 如果我们跳过以下操作:
auth_cookie_malformed
auth_cookie_valid
set_current_user
init 将是之后的下一个钩子
after_setup_theme 做插件和主题相关的事情。像
post_format 注册于
init, 在这里添加主题支持将为时已晚,优先级错误。因此,如果您需要检查帖子格式的主题支持,您需要在
after_setup_theme 优先级很低。我倾向于使用
PHP_INT_MAX 常量值作为优先级或
PHP_INT_MAX + 1 . 你也可以试试
set_current_user 它在后面运行
after_setup_theme 就在那之前
init通常,所有内置主题支持功能都是在after_theme_support 保持代码的一致性,但您根本不应该依赖于此。像@toscho described in his answer here, wp_loaded 是一个很好的钩子,用于检查某个功能是否已受支持(有例外,请参见下面的注释)。到…的时候wp_loaded 如果没有,那么所有的主题支持特性都应该被添加,那么这个主题就做了一些非常错误的事情,你真的不能为了一个糟糕的主题而牺牲你的代码。之后的所有挂钩wp_loaded 与内容输出和操作将发送到浏览器的输出有关。
重要提示
如前所述,某些功能(如后期格式支持)无法添加到
init 或者在那之后的任何钩子,因为为时已晚,所以
wp_loaded 在这种情况下,为帖子格式添加主题支持就太晚了。正如我已经说过的,您需要尽可能晚地将函数挂接到
after_setup_theme 结论现在这里有了真正正确的钩子。挂钩取决于支撑特征。一般来说,使用它是安全的wp_loaded 检查特定custom 支持特性,在我看来,这将是最新的挂钩,您应该使用它来添加任何类型的主题支持特性。对于内置支持功能,after_setup_theme 优先级很低(甚至set_current_user)应满足以下条件init 添加post格式等功能为时已晚