我想这已经是个问题了,但我还没有遇到过。
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格式等功能为时已晚