2012-11-26 113 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