条件页面模板不起作用

时间:2015-02-05 作者:JoaMika

我在中使用此代码functions.php 有条件地加载一些短代码,但不起作用。短代码仍在加载template-flat.php. 你知道这里怎么了吗?

if( is_page_template( \'template-flat.php\' ) ) {

// other code

}else{

require_once(functions . \'/shortcodes.php\');

}
我认为这是因为页面调用发生在wordpress操作顺序中的函数调用之后?

2 个回复
最合适的回答,由SO网友:hereswhatidid 整理而成

您需要在操作挂钩中运行此代码,而不是直接在函数中运行。php文件。看看Action Reference page 并确定要在哪个点运行此脚本。无论你选择什么行动,最终都会像这样:

add_filter( \'template_include\', \'check_page_template\', 99 );

function check_page_template( $template ) {
  if( is_page_template( \'template-flat.php\' ) ) {
    // other code
  } else {
    require_once(functions . \'/shortcodes.php\');
  }
  return $template;
}

SO网友:bosco

解决方案,正如我在您的earlier question, 这个Codex entry for conditional tags 详细信息,

只能在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 文件。使用参数调用wpwpse177227_load_shortcodes, 这指示WordPress尝试并计算名为wpse177227_load_shortcodes() 如果和何时采取行动wp 发生do_action( \'after_setup_theme\' ), 表示活动主题functions.php 文件已被评估,文件中包含的所有函数现在都可以使用do_action(\'{action_name}\') 在特定里程碑处,提供可评估其他代码的点。WordPress执行动作挂钩的顺序大致相当于它们在Action Reference 对于大多数请求do_action( \'wp\' );, 表示建立了WordPress环境(即加载了所有插件和主题,WP对象知道最终用户的要求,并包含构建响应所需的数据)wp 操作(通过add_action()functions.php 已加载)并尝试调用wpse177227_load_shortcodes();functions.php ,则调用成功,并对函数体进行求值is_page_template(). 因为直到wp 行动,WordPress知道正在处理的内容的性质,并能正确回答有关内容的有条件问题Codex, Action Reference, 和其他资源来确定适合您需要的挂钩。

  • 结束

    相关推荐

    jquery issue in functions.php

    我正在处理的主题中有一个问题,我不知道如何解决它。该主题有几个jquery脚本,需要加载到头部才能工作。如果没有所有这些,主题就失败了。这是我打电话给的人jquery-1.8.2。最小jsjquery-1.6.1。min.jsjquery。放松。1.3。jsjquery-ui-1.8.11。风俗min.jsjquery-ui-1.8.21。风俗最小js现在使用WordPress,我想您可以将jquery排队,然后加载所有版本。我的问题是,当我尝试这样做并删除上面的脚本时,一切都失败了。我将所有脚本放入函数