Con cosa si confronta is_page_template ()?


10

Guardando attraverso la documentazione di Wordpress , si dice che si is_page_template()confronta con un "nome modello", se fornito.

Ho un modello memorizzato in page-homepage.phpchiamato Homepage:

/*
 * Template Name: Homepage
 * Description: The template for displaying the homepage
 */

E ho un po 'di codice che vorrei eseguire nel mio function.php quando sto usando quel modello:

if (is_page_template('Homepage')) { 
   ...

Ma non viene attivato quando sono su una pagina che utilizza quel modello.

Quando guardo il codice per cui Wordpress esegue is_page_template(), sembra che in realtà controlla il nome del documento, non il nome del modello ...?

function is_page_template( $template = '' ) {

    $page_template = get_page_template_slug( get_queried_object_id() );

    if ( $template == $page_template )
        return true;

Nel mio caso sembra che $page_templatesia page-homepage.php- non il nome del modello, come la documentazione suggerisce ...?

Sto facendo qualcosa di sbagliato?


Buona osservazione riguardo alla documentazione.
birgire,

Risposte:


15

La tua condizione dovrebbe essere scritta in questo modo:

if (is_page_template('path/file.php')) { 
    // Do stuff
}

Credo che la confusione sia il risultato di due cose:

  1. I documenti si riferiscono al "nome" in modo ambiguo. Specificare "nome file" renderebbe la documentazione molto più chiara.
  2. Il codice dietro is_page_template()mostra la get_page_template_slug()funzione al suo interno. Questa funzione restituisce effettivamente un nome di file, non la lumaca di modello. https://codex.wordpress.org/Function_Reference/get_page_template_slug

Quando si specifica un argomento per la is_page_template()funzione (come nell'esempio sopra), il percorso del file è relativo alla radice del tema.

Questa funzione non funzionerà all'interno del loop.


2
Sarebbe bello avere una spiegazione su quale sia il percorso qui.
birgire,

1
Aggiunti ulteriori chiarimenti e dettagli sul perché ciò può essere fonte di confusione.
jdm2112,

3
Wow. Un doppio colpo di confusione. Riesco a capire che i documenti sono un po 'ambigui (anche se dovrebbe davvero essere risolto), ma sono davvero sorpreso che in get_page_template_slug()realtà non restituisca una lumaca!
Django Reinhardt,

Concordato. Dare ulteriore supporto all'idea che "nominare le cose" è una delle cose più difficili quando si scrive un codice.
jdm2112,

Questa risposta contiene la soluzione "best practice". Tuttavia, se la tua pagina utilizza il "modello predefinito" (ma in realtà è un modello di pagina), questa risposta potrebbe interessarti.
Rinogo,

7

Penso che la cosa migliore da dire sia che controlla il nome del FILE e nel tuo caso sarebbe page-homepage.php. così:

if (is_page_template('page-homepage.php')) { 
  ...

Altre cose a cui pensare è se il file modello è effettivamente archiviato in un'altra cartella all'interno del tema. leggi di più

Un'altra cosa, Template Name: Homepageè generalmente quello che è usato per identificare il modello quando si crea una pagina o un post.


Come sottolinea un'altra risposta, prende anche in considerazione il percorso. page-templates/page-homepage.phpè diverso dal modello nella radice del tema.
Howdy_McGee

Interessante e qualcosa che non sapevo, solo per confermare, posso memorizzare i modelli di pagina al di fuori della cartella del tema o del tema figlio?
Malisa,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.