2012-11-26 88 views
5

有没有办法在admin中隐藏模板文件?如何在WordPress中隐藏模板?

例如,我有一个模板,只有在安装了特定插件时才可用,并且我已经知道如何检查插件是否处于活动状态。但是,如何隐藏模板?

比如我想隐藏“博客重定向” -template波纹管:

Image is just an example...

我发现几个环节,但所有的解决方案似乎过时了。

编辑:如果任何人有兴趣我如何检查是否pluin是活动我这样做有以下功能:

function isPluginActive($plugin){ 
     if (in_array($plugin, apply_filters('active_plugins', get_option('active_plugins')))) 
     { 
      return true; 
     } 
     return false; 
    } 
+0

你是说你想要管理员不能看到列出的模板,如果他没有正确的插件? – MrGlass

+0

@MrGlass YES!究竟。如果没有安装插件并且该模板需要它。比方说,如果我有一个使用高级自定义字段插件的模板,并且没有安装,那么该模板文件不应该是一个选项。 – jamietelin

+0

我不认为这是可能的。你需要让wordpress运行你的代码(隐藏模板),而不用选择你的代码(因为这里的概念是他们不能使用模板)。 – MrGlass

回答

12

更新 - 在下面的评论中所指出的安德鲁一个忠告:

使用此代码小心,如果你使用,你从选择删除模板有任何网页,更新该页面会使其恢复到默认的模板


我不知道是否有这样做的PHP的方式 - 你必须在WP_Theme类的样子,但是从我首先看它可能是不可能的,因为为了获得所有模板,该类使用称为scandir()的内部函数,该函数扫描当前主题目录并从那里获取所有.php文件。然后它会查找相应的Template Name:标识符,如果它存在,它将被添加到模板列表中。

所以相反,我建议,你添加一个小的JS,将从页面模板选择中删除此选项。以下是一段代码:

function my_remove_page_template() { 
    global $pagenow; 
    if (in_array($pagenow, array('post-new.php', 'post.php')) && get_post_type() == 'page') { ?> 
     <script type="text/javascript"> 
      (function($){ 
       $(document).ready(function(){ 
        $('#page_template option[value="sidebar-page.php"]').remove(); 
       }) 
      })(jQuery) 
     </script> 
    <?php 
    } 
} 
add_action('admin_footer', 'my_remove_page_template', 10); 

这将从下拉列表中移除模板sidebar-page.php。条件是这样的脚本只能添加在页面的添加和编辑屏幕上。

调整到你的情况,并享受:)

+2

+1用于确保脚本仅包含添加和编辑屏幕。 – Sudar

+2

+1解释WP如何检查模板文件。 – jamietelin

+2

请谨慎使用此代码,如果您有任何页面使用您从select中删除的模板,则更新该页面将导致它恢复为默认模板 – andrew

4

WordPress的不提供任何挂钩,所以你不能从PHP中删除它。

我能想到的一个替代方法是,您可以使用JavaScript动态地将其删除。在add post页面中包含一段JavaScript代码,该页面将从select元素中删除该选项。

我知道这不是一个干净的解决方案,但我认为这是目前唯一可行的方法。

编辑

另一种选择是当插件被激活的模板文件复制到主题目录,当插件被停用删除模板文件。

这里假设模板只能用于这个插件。

+0

我同意,现在这可能是唯一的选择。 – bodi0

+0

我明白了。我担心这是事实。猜测js hack将不得不做这项工作。 ;) – jamietelin

+1

你也可以尝试我发布在我的答案中的第二个选项。 – Sudar