Come usare if (is_page_template('')) in WordPress
Utilizzo il seguente codice nel mio functions.php. Voglio escludere tutte le pagine che utilizzano il template single.php.
function cat_menu() {
// Controlla se la pagina non usa il template single.php
if (!is_page_template('single.php')) {
$cur_cat = get_query_var('cat');
// Ottieni la lista delle categorie figlie
$new_cats = wp_list_categories('echo=false&child_of=' . $cur_cat .'&depth=1&title_li=&&show_count=0&hide_empty=1');
echo '<ul>' . $new_cats . '</ul>';
}}
// Aggiungi l'azione dopo l'header di Genesis
add_action ( 'genesis_after_header', 'cat_menu' );
Ma vedo il risultato anche sulle pagine che usano il single.php.
Qualcuno può aiutarmi con questo problema?

is_page_template()
verifica i template specifici per i tipi di post definiti dal tema utilizzando
/**
* Template Name: Il Mio Template
*/
all'inizio del file del template. Non si riferisce a qualsiasi file di template arbitrario. Per questo caso, potresti voler consultare le risposte su Ottieni il nome del file template corrente. Potresti prendere il codice dalla risposta accettata lì (get_current_template()
) per fare qualcosa quando single.php === get_current_template()
.

Devi utilizzare la seguente funzione:
is_singular()
Is singular verifica se la pagina corrente è single.php.

Mi sembra sempre strano quanto tempo impieghino i thread su WPSE per ricevere risposte accurate, ecco un esempio base su come utilizzarlo tratto da StackOverflow:
// se non è un template di pagina specifico
<?php if (!is_page_template('page-templates/all-sponsor-template.php')); ?>
// Contenuto
<?php endif; ?>
// se è un template di pagina specifico
<?php if (is_page_template('page-templates/all-sponsor-template.php')); ?>
// Contenuto
<?php endif; ?>
Rif: https://stackoverflow.com/questions/58531957/if-is-page-template-not-working-in-header-php

Questo è lo stesso problema che si ha con is_page_template()
. get_page_template_slug()
controlla solo i template personalizzati per i post (quelli con gli header /* Template Name: ... */
). Inoltre, is_single()
non garantisce al 100% che sia stato caricato single.php
, poiché altri template nella gerarchia potrebbero essere caricati prima di esso.
