只能在posts_selection
WordPress中的动作挂钩(thewp
动作挂钩是第一个可以使用这些条件的挂钩)。For themes, this means the conditional tag will never work properly if you are using it in the body of functions.php
, i.e. outside of a function.
记住,您需要参考Action Reference 在之后查找挂钩posts_selection
适合您的目的,然后在附加到该挂钩的函数中使用条件。我建议刷一下WordPress Plugin API 更好地了解挂钩的功能。Smashing Magazine also provides a decent less-technical intro to hooks, 虽然有点过时。
在里面functions.php
:
add_action( \'wp\', \'wpse177227_load_shortcodes\' );
function wpse177227_load_shortcodes() {
if( ! is_page_template( \'template-flat.php\' ) )
require_once( \'path/to/shortcodes.php\' );
}
我认为稍微分解一下这个代码的机制可能是有益的:
WordPress加载functions.php
文件function wpse177227_load_shortcodes() {}
是一个function definition, 因此,PHP只是注意到一个事实,即“wpse177227\\u load\\u shortcode”标识的代码块可供将来参考。此时不计算函数体
add_action();
是一个function call - 函数的逻辑在调用求值时求值-因为add_action()
未包含在函数中,这意味着一旦WordPress加载functions.php
文件。使用参数调用wp
和wpse177227_load_shortcodes
, 这指示WordPress尝试并计算名为wpse177227_load_shortcodes()
如果和何时采取行动wp
发生do_action( \'after_setup_theme\' ), 表示活动主题functions.php
文件已被评估,文件中包含的所有函数现在都可以使用do_action(\'{action_name}\') 在特定里程碑处,提供可评估其他代码的点。WordPress执行动作挂钩的顺序大致相当于它们在Action Reference 对于大多数请求确定并获取生成响应所需的数据并设置WP对象后,WordPress调用do_action( \'wp\' );
, 表示建立了WordPress环境(即加载了所有插件和主题,WP对象知道最终用户的要求,并包含构建响应所需的数据)wp 操作(通过add_action()
当functions.php
已加载)并尝试调用wpse177227_load_shortcodes();
因为PHP以前遇到过“wpse177227\\u load\\u shortcode”的函数定义functions.php
,则调用成功,并对函数体进行求值is_page_template(). 因为直到wp
行动,WordPress知道正在处理的内容的性质,并能正确回答有关内容的有条件问题这是一个密集的(但希望不是过于技术化的)概述,但我希望它可以帮助您掌握钩子的本质。通常,它们允许您将代码的执行推迟到WordPress执行过程中的特定时刻。诀窍是使用Codex, Action Reference, 和其他资源来确定适合您需要的挂钩。