2012-11-26 15 views
5

Czy istnieje sposób na ukrycie pliku szablonu w admin?Jak ukryć szablon w Wordpressie?

Na przykład mam szablon, który powinien być dostępny tylko wtedy, gdy zainstalowana jest określona wtyczka i już wiem, jak sprawdzić, czy wtyczka jest aktywna. Ale jak ukryć szablon?

Na przykład chcę ukryć „Bloggera Przekierowanie” -template poniżej:

Image is just an example...

Znalazłem kilka linków, ale wszystkie z rozwiązań wydaje się przestarzała.

EDIT:Jeśli ktoś jest zainteresowany w jaki sposób mogę sprawdzić czy pluin jest aktywny to zrobić z następujących funkcji:

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

Mówisz, że chcesz się z administratorem, by nie widzieć szablon na liście, jeśli nie ma odpowiedniego wtyczki? – MrGlass

+0

@MrGlass TAK! Dokładnie. Jeśli wtyczka nie jest zainstalowana i wymaga tego szablon. Powiedzmy, że jeśli mam szablon, który korzysta z wtyczki Advanced Custom Fields, i nie jest zainstalowany, to plik szablonu nie powinien być opcjonalny. – jamietelin

+0

Nie sądzę, że to możliwe. Trzeba by mieć wordpress uruchamiać swój kod (aby ukryć szablon) bez wyboru twojego kodu (ponieważ koncepcja jest taka, że ​​nie mogą używać szablonu). – MrGlass

Odpowiedz

12

Update - słowo ostrzeżenia jak podkreślił Andrew w komentarzach poniżej:

użyć tego kodu z ostrożnością, Jeśli masz jakiekolwiek stron przy użyciu szablonu, który został wyjęty z select, aktualizacja strona spowoduje to, aby powrócić do domyślnego szablonu


nie jestem pewien, czy istnieje sposób, PHP to zrobić - musisz wyglądać w klasie WP_Theme, ale z mojego pierwsze spojrzenie może nie być możliwe, ponieważ w celu uzyskania wszystkich szablonów, klasa wykorzystuje wewnętrzną funkcję o nazwie scandir(), która skanuje bieżący katalog kompozycji i pobiera z niej wszystkie pliki .php. Następnie szuka odpowiedniego identyfikatora i jeśli jest obecny, zostaje dodany do listy szablonów.

Zamiast tego sugeruję, aby dodać trochę JS, który usunie tę opcję z szablonu strony wybierz. Oto fragment kodu:

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); 

Spowoduje to usunięcie szablonu sidebar-page.php z menu rozwijanego. Warunkowe są tak, że skrypt jest dodawany tylko na ekranach dodawania i edycji stron.

Dostosowanie do sprawy i cieszyć :)

+2

+1 za upewnienie się, że skrypt zawiera tylko ekrany dodawania i edycji. – Sudar

+2

+1 za wyjaśnienie, w jaki sposób WP sprawdza pliki szablonów. – jamietelin

+2

Używaj tego kodu z rozwagą. Jeśli masz strony korzystające z szablonu usuniętego z listy wyboru, aktualizacja strony spowoduje powrót do domyślnego szablonu – andrew

4

WordPress nie przewiduje żadnego haka, więc nie można usuń go z PHP.

Jedną z alternatyw, o której mogłem pomyśleć, jest to, że można ją usunąć dynamicznie za pomocą JavaScript. Dodaj fragment kodu JavaScript na stronie add post, który usunie opcję z elementu select.

Wiem, że to nie jest czyste rozwiązanie, ale myślę, że to jedyny możliwy sposób od teraz.

Edit:

Innym rozwiązaniem jest skopiowanie pliku szablonu do katalogu tematycznego, gdy wtyczka jest aktywowana i usunąć plik szablonu, gdy wtyczka jest wyłączona.

Zakłada się, że szablon jest używany tylko przez tę wtyczkę.

+0

Zgadzam się, na razie to może być jedyna opcja. – bodi0

+0

Rozumiem. Obawiałem się, że tak było. Zgadnij, że js hack będzie musiał wykonać pracę. ;) – jamietelin

+1

Możesz również wypróbować drugą opcję, którą zamieściłem w mojej odpowiedzi. – Sudar