Come usare if (is_page_template('')) in WordPress

24 gen 2017, 19:35:17
Visualizzazioni: 17.7K
Voti: 0

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?

0
Tutte le risposte alla domanda 4
0

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().

24 gen 2017 20:23:18
1

Devi utilizzare la seguente funzione:

is_singular()

Is singular verifica se la pagina corrente è single.php.

Riferimento alla funzione

24 gen 2017 21:19:35
Commenti

is_singular() non garantisce al 100% che single.php sia stato caricato, poiché altri template nella gerarchia potrebbero essere caricati prima di esso.

swissspidy swissspidy
25 gen 2017 15:05:18
0

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

17 ago 2023 13:34:41
1
-1

get_page_template_slug() - Restituisce solo il template della pagina

 global $post;    
    $template = get_page_template_slug($post->ID);         
    if ($template == 'page-template.php') {....}

Probabilmente vale la pena verificare più facilmente con

if(is_single()){....}
24 gen 2017 20:35:06
Commenti

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.

swissspidy swissspidy
25 gen 2017 15:05:07