2012-11-26 14 views
5

C'è un modo per nascondere un file modello in admin?Come nascondere un modello in Wordpress?

Ad esempio, ho un modello che dovrebbe essere disponibile solo se è installato un plug-in specifico e so già come verificare se il plug-in è attivo. Ma come nascondo il modello?

Per esempio voglio nascondere "Blogger Redirection" muggito -template:

Image is just an example...

ho trovato diversi collegamenti, ma tutte le soluzioni sembra deprecato.

EDIT:Se qualcuno è interessato a come posso controllare se pluin è attivo lo faccio con la seguente funzione:

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

Stai dicendo che si desidera che l'amministratore non vedere il modello elencato, se non ha il plugin corretto? – MrGlass

+0

@MrGlass SÌ! Esattamente. Se un plugin non è installato e questo modello lo richiede. Diciamo che se ho un template che usa il plugin Advanced Custom Fields, e non è installato, quel file template non dovrebbe essere un'opzione. – jamietelin

+0

Non penso che sia possibile. Avresti bisogno di avere wordpress per eseguire il tuo codice (per nascondere il modello) senza che il tuo codice sia selezionato (poiché il concetto qui è che non possono usare il modello). – MrGlass

risposta

12

Update - una parola di cautela, come sottolineato da Andrew nei commenti qui sotto:

Usa questo codice con cautela, se si dispone di tutte le pagine utilizzando il modello che è stato rimosso dalla selezione, aggiornamento nella pagina lo farà per tornare al modello predefinito


non sono sicuro se c'è un modo PHP di fare questo - si dovrà cercare nella classe WP_Theme, ma dal mio per prima cosa potrebbe non essere possibile perché per ottenere tutti i template, la classe utilizza una funzione interna chiamata scandir() che analizza la directory del tema corrente e ottiene tutti i file .php da lì. Quindi cerca l'identificatore Template Name: corrispondente e, se presente, viene aggiunto all'elenco dei modelli.

Quindi, invece, suggerisco di aggiungere un piccolo JS che rimuoverà questa opzione dal modello di pagina selezionato. Ecco un frammento di codice:

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

Questo eliminerà il modello sidebar-page.php dal menu a discesa. I condizionali sono in modo tale che lo script venga aggiunto solo su aggiungi e modifica schermate di pagine.

adattarsi al vostro caso e godere :)

+2

+1 per assicurarsi che lo script sia incluso solo aggiungere e modificare schermate. – Sudar

+2

+1 per spiegare come WP verifica i file modello. – jamietelin

+2

Utilizzare questo codice con cautela, se si dispone di pagine che utilizzano il modello rimosso dalla selezione, l'aggiornamento della pagina comporta il ripristino del modello predefinito – andrew

4

WordPress non fornisce alcun gancio, così non si può rimuovilo da PHP.

Un'alternativa che potrei pensare è che è possibile rimuoverlo in modo dinamico utilizzando JavaScript. Includere uno snippet di JavaScript nella pagina add post che rimuoverà l'opzione dall'elemento select.

So che questa non è una soluzione pulita, ma penso che questo sia l'unico modo possibile sin d'ora.

Edit:

Un'altra opzione è quella di copiare il file di modello per la cartella del tema quando viene attivato il plugin e rimuovere il file del modello quando il plugin è disattivato.

Ciò presuppone che il modello sia utilizzato solo da questo plug-in.

+0

Sono d'accordo, per ora questa potrebbe essere l'unica opzione. – bodi0

+0

Vedo. Temevo che fosse così. Credo che un jshack dovrà fare il lavoro. ;) – jamietelin

+1

Puoi anche provare la seconda opzione che ho postato nella mia risposta. – Sudar

Problemi correlati