需要包括和重定向来自插件的模板

时间:2013-11-30 作者:mehedi doha

我正在尝试为我的自定义插件编写代码,其中需要包含一个模板页面。我尝试了几种方法,但它将我重定向到404。在此之后,我还添加了模板重定向代码,但没有结果。有人请注意我哪里做错了?

我的代码片段的几个示例:

add_filter( \'template_include\', \'portfolio_newpage_template\', 99 );
function portfolio_newpage_template( $template ) {  
$new_template = locate_template( array( dirname( __FILE__ ). \'/portfolio-page-template.php\' ) );
    if ( \'\' != $new_template ) {
        return $new_template ;
    }

return $template;
}
对于重定向,我使用:

function templateRedirect() {

//global $wp;
// if ($wp->request == \'http://localhost/plugin-testing/portfolio\') {
//  loadWordPressTemplate(dirname( __FILE__ ). \'/portfolio-page-template.php\');

if ( is_page_template(\'portfolio-page-template.php\') ){
 loadWordPressTemplate(plugin_dir_url( __FILE__ ) . \'portfolio-page-template.php\');
  }

 }
 add_action(\'template_redirect\', \'templateRedirect\');
我已经搜索了很多代码,但我没有找到解决问题的正确方法。目前,我正在本地主机中进行测试,因此当url类似于以下内容时,我需要加载模板:

esc\\u url(home\\u url())。\'/投资组合\'

还有一件事我不想用wp_insert_post function 这需要update_post_meta function 使文章/页面在管理区域可见。但是如果有任何方法可以从管理区域隐藏插入的帖子/页面,我会非常感激。

提前感谢

2 个回复
SO网友:s_ha_dum

你的portfolio_newpage_template 当我尝试该函数时,它不会产生404,但它也不会工作。locate_templatealways 从主题目录加载,因此它将永远找不到您的插件文件。你可以see that in the source. __FILE__ 将引用其中包含函数的文件,您说这是一个插件,因此您所做的将不起作用。

只要把你的文件放进去就行了。

add_filter( \'template_include\', \'portfolio_newpage_template\', 99 );
function portfolio_newpage_template( $template ) {  
  get_header();
  include(\'/some/file/path/file.php\');
  get_footer();
  die;
}

SO网友:Rick Hellewell

请参见我的问题和我自己的答案,事实证明这是解决方案:Create Page that uses specific template .

我的问题是让特定页面使用插件文件夹中的模板。我使用了以下代码(以及一些支持代码来创建插件):

// include our template
add_filter( \'template_include\', \'use_our_page_template\', 99 );

function use_our_page_template( $template ) {

    if ( is_page( \'My Custom Page\' )  ) {
        $new_template =  plugin_dir_path( __FILE__ ) . \'templates/mycustomtemplate.php\';
        return $new_template;
    }
return;
这将您的模板添加到“我的自定义页面”的模板列表(数组)。您可以在插件文件中使用该代码。根据需要更改页面名称。如果希望该模板可用于所有页面,请删除“If”语句。

如果您将上述代码放在插件的“init”中,那么(如果插件已启用),插件文件夹中的模板(\'plugin-name\'/templates) 将显示在您创建的任何页面上。

请参阅我对上述问题的回答以获取更多解释。

结束

相关推荐

private functions in plugins

我开发了两个插件,其中一个功能相同(相同的名称,相同的功能)。当试图激活两个插件时,Wordpress会抛出一个错误,因为它不允许我以相同的名称定义函数两次。有没有一种方法可以使这个函数只对插件私有,而不使用面向对象编程,也不简单地重命名函数?我不想使用OOP,因为我首先要学习它。此外,我不想重命名该函数,因为我可能也想在其他插件中使用它,而重命名感觉不太合适。