模板包括崩溃浏览器

时间:2014-11-20 作者:Gareth Gillman

我正在创建一个需要使用自定义模板的插件,因此使用以下代码来使用模板:

add_filter(\'template_include\', \'hhavideo_set_template\');
 function hhavideo_set_template( $template ){
  if(is_archive(\'hhavideo\') && \'archive-hhavideo.php\' != $template ){
   $template = include( plugin_dir_path( __FILE__ ) . \'templates/archive-hhavideo.php\');
  }
  if(is_singular(\'hhavideo\') && \'single-hhavideo.php\' != $template ){
   $template = include( plugin_dir_path( __FILE__ ) . \'templates/single-hhavideo.php\');
  }
  return $template;
 }
当使用该代码时,两个模板都会使我的浏览器(Firefox)崩溃,有时我会收到错误消息,说我使用了60秒的最长执行时间。

模板中只有get\\u header和get\\u footer,站点在其他页面上运行得非常好。

我做错了什么,有没有更好的方法从插件调用模板文件?

编辑:我现在收到的错误:

Warning: include(1) [function.include]: failed to open stream: No such file or directory in /wp-includes/template-loader.php on line 74

1 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

您的代码中有几个错误:

  • is_archive() 不接受任何参数is_archive() 不接受任何参数。如果要检查这是否是自定义帖子类型的存档,请使用is_post_type_archive( $post_type )

    而不是使用include( plugin_dir_path( __FILE__ ) . \'my-template.php\');, 使用dirname( __FILE__ ) . \'my-template.php\';

    单个模板有自己的过滤器,single_template, 所以,拆分你的函数,这样你就可以template_include 单独用于存档页

    试试这样

    add_filter(\'template_include\', function ( $template ) {
    
        if( is_post_type_archive( \'hhavideo\' ) ){
            $template = dirname( __FILE__ ) . \'/templates/archive-hhavideo.php\';
        }
        return $template;
    
    }, PHP_INT_MAX, 2 );
    
    add_filter( \'single_template\', function ($single_template) {
    
        if ( is_singular( \'hhavideo\' ) ) {
            $single_template = dirname( __FILE__ ) . \'/templates/single-hhavideo.php\';
        }
        return $single_template;
    
    }, PHP_INT_MAX, 2 );
    

结束

相关推荐