Tag condizionale per verificare se viene usato 'page.php'?

17 giu 2014, 00:40:54
Visualizzazioni: 17.5K
Voti: 11

Sto cercando di verificare se il template page.php è in uso o meno. Ho provato is_page_template( 'page.php' ) ma non funziona.

Non posso usare is_page() perché voglio eseguire qualcosa solo quando viene usato page.php, e non quando viene usato qualche altro template personalizzato per Pagine.

Fatemi sapere come risolvere, grazie!

Modifica: Avrei dovuto specificare che ho un file chiamato common-options.php che viene incluso in quasi tutti i template (come index.php, page.php, single.php e page_blog.php), in questo file sto provando a fare il controllo con questo codice:

if ( is_page_template( 'page.php' ) ) {
    echo "successo!";
}

Ma non funziona quando apro una pagina che usa il "Template Predefinito".

4
Commenti

is_page_template() è la funzione corretta ma dici che "non funziona". Stai controllando all'interno del loop?

jdm2112 jdm2112
17 giu 2014 01:15:00

Ciao, sto verificando in un file che includo (usando 'include()') all'inizio di page.php e altri file. Per favore vedi la modifica alla mia domanda.

user1981248 user1981248
17 giu 2014 03:40:49

Purtroppo non riesco a rispondere alla mia domanda dalla tua modifica. Troppe possibilità senza vedere più del tuo codice. Se stai testando la condizione all'interno del loop, is_page_template non funzionerà. La mia raccomandazione è di scoprire quale template viene usato e poi capire il perché. Questa funzione mostrerà il file template corrente su ogni pagina a un amministratore loggato. http://pastebin.com/wkNv9Eug. Inseriscila nel tuo functions.php e ricarica la pagina. Finché il tuo tema chiama wp_head() dovresti vedere il template in cima a ogni pagina quando sei loggato.

jdm2112 jdm2112
17 giu 2014 05:58:14

La domanda più importante qui è: stai controllando all'interno del loop? Stai chiamando the_post nel tuo file template prima di chiamare is_page_template? (is_page_template( 'page.php' non funzionerà in ogni caso, ma questa rimane una domanda importante per rispondere alla tua domanda originale)

engelen engelen
17 giu 2014 10:47:06
Tutte le risposte alla domanda 7
5
12

Anch'io mi sono imbattuto nello stesso problema e la mia soluzione è stato questo codice:

if(basename(get_page_template()) === 'page.php'){

}

basename(get_page_template()) ottiene il nome del file del template della pagina (secondo https://codex.wordpress.org/Function_Reference/get_page_template) e poi verifichiamo se è uguale a 'page.php'

20 set 2016 18:15:06
Commenti

Potresti approfondire ulteriormente il funzionamento di questo codice?

Ethan Rævan Ethan Rævan
20 set 2016 18:29:21

Sono d'accordo, questa è una soluzione solida ma potrebbe essere ampliata. +1

Howdy_McGee Howdy_McGee
20 set 2016 19:48:26

Almeno per me, questo restituisce true per qualsiasi pagina, anche se uso un template personalizzato (diverso da page.php)

Jabel Márquez Jabel Márquez
26 set 2017 06:20:44

È fantastico perché funziona anche se la pagina utilizza il suo template predefinito.

rinogo rinogo
10 ago 2018 02:10:01

Funziona alla perfezione per me nel file functions.php con l'hook wp enqueue. is_page_template( 'page.php' ) non è stato attivato... Mi chiedo se qualcuno possa trovare una spiegazione...

Friedrich Siever Friedrich Siever
28 ago 2018 23:41:11
2

Hai due funzioni utili: is_page() e is_page_template().

La funzione is_page() restituirà true quando ti trovi su una pagina, mentre la funzione is_page_template() restituirà false se il post corrente (che può essere una pagina) non utilizza un template personalizzato.

Quindi, ti basta utilizzare entrambe queste funzioni insieme:

if ( is_page() && !is_page_template() ) {
  // il tuo codice
}
24 set 2018 08:53:00
Commenti

Penso che questa sia la risposta più solida.

Hannah Smith Hannah Smith
17 nov 2020 18:42:14

Funziona ancora perfettamente alla data odierna. Grazie!

rwzdoorn rwzdoorn
12 gen 2021 18:12:05
2

Vecchia domanda, ma interessante.

In generale non è comune verificare il template in WordPress. Il template è il risultato della query principale eseguita e che imposta il contesto della richiesta.

Se necessario, probabilmente imposterei un flag all'inizio di page.php, come dichiarare una costante per esso, per avere il mio contesto personalizzato.

Tuttavia, nel complesso mi fa pensare che qualsiasi logica che richieda questo tipo di approccio dovrebbe essere valutata per allinearla con meccanismi e condizionali più comuni.

20 set 2016 19:01:52
Commenti

+1 Qualsiasi codice che necessita di questa condizione potrebbe probabilmente essere inserito incondizionatamente all'interno di page.php

Andy Macaulay-Brook Andy Macaulay-Brook
20 set 2016 20:16:11

Non sono d'accordo. Nel mio caso, sto cercando di caricare uno script JS solo sulla page.php di default, all'interno di functions.php. Perché far caricare all'utente lo script su altre pagine se non ne ha bisogno? Penso che ci siano effettivamente casi d'uso per questo.

Jordan Carter Jordan Carter
26 lug 2018 21:55:53
1

In realtà è molto semplice. Basta usare:

is_page_template()

Se restituisce true, allora non viene utilizzato page.php e viceversa :)

2 apr 2018 09:07:46
Commenti

Non restituirebbe false sulle pagine degli articoli, però?

Jordan Carter Jordan Carter
26 lug 2018 21:57:01
0
$bulkitnt_custom_page_control = is_page_template( 'custom-page.php' );

    if( $bulkitnt_custom_page_control != true ){
        do_action('bulkitnt_header_action');
    }
29 lug 2018 13:22:27
2

Questo funziona per me nella searchbar.php

basename(get_page_template()) === ( 'page.php' )

Questo è il mio codice completo:

if ( is_page_template( 'tpl-ads-home.php' ) || basename(get_page_template()) === ( 'page.php' ) || is_page_template( 'tpl-refine-search.php' ) || is_page_template( 'tpl-categories.php' ) || is_search() || is_404() || is_tax( APP_TAX_CAT ) || is_tax( APP_TAX_TAG ) || is_singular( APP_POST_TYPE ) ) :

    $args = cp_get_dropdown_categories_search_args( 'bar' );
27 lug 2020 18:11:47
Commenti

Codice completo

<?php if ( is_page_template( 'tpl-ads-home.php' ) || basename(get_page_template()) === ( 'page.php' ) || is_page_template( 'tpl-refine-search.php' ) || is_page_template( 'tpl-categories.php' ) || is_search() || is_404() || is_tax( APP_TAX_CAT ) || is_tax( APP_TAX_TAG ) || is_singular( APP_POST_TYPE ) ) :

$args = cp_get_dropdown_categories_search_args( 'bar' ); ?>

Robin Robin
27 lug 2020 18:15:51

Dovresti aggiungere il tuo codice nella risposta, non come commento

mozboz mozboz
27 lug 2020 18:26:58
2
-2

Utilizza semplicemente un array vuoto al posto di 'page.php' esempio: is_page_template(array(''));

1 feb 2019 15:14:22
Commenti

Per favore [modifica] la tua risposta, e aggiungi una spiegazione: perché potrebbe risolvere il problema?

fuxia fuxia
1 feb 2019 15:48:36

Potresti anche fornire un esempio.

RiddleMeThis RiddleMeThis
1 feb 2019 16:06:13