Cómo usar if (is_page_template('')) en WordPress
Utilizo el siguiente código en mi functions.php. Quiero excluir todas las páginas que usan la plantilla single.php.
function cat_menu() {
if (!is_page_template('single.php')) {
$cur_cat = get_query_var('cat');
$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>';
}}
add_action ( 'genesis_after_header', 'cat_menu' );
Pero veo el resultado también en páginas que usan single.php.
¿Alguien puede ayudarme con esto?

is_page_template()
verifica las plantillas de tipo de post especificadas por el tema usando
/**
* Nombre de la plantilla: Mi Plantilla
*/
en la parte superior del archivo de plantilla. No cualquier archivo de plantilla arbitrario. Para esto, quizás quieras revisar las respuestas en Obtener el nombre del archivo de plantilla actual. Podrías tomar el código de la respuesta aceptada allí (get_current_template()
) para hacer algo cuando single.php === get_current_template()
.

Debes usar la siguiente función:
is_singular()
Is singular verifica si la página actual es single.php.

Siempre me parece extraño cuánto tiempo tardan los hilos de WPSE en recibir respuestas precisas, aquí hay un ejemplo básico de cómo usarlo de StackOverflow:
// si no es una plantilla de página específica
<?php if (!is_page_template('page-templates/all-sponsor-template.php')); ?>
// Contenido
<?php endif; ?>
// si es una plantilla de página específica
<?php if (is_page_template('page-templates/all-sponsor-template.php')); ?>
// Contenido
<?php endif; ?>
Ref: https://stackoverflow.com/questions/58531957/if-is-page-template-not-working-in-header-php

Este es el mismo problema que con is_page_template()
. get_page_template_slug()
solo verifica las plantillas de publicaciones personalizadas (aquellas con los encabezados /* Template Name: ... */
). Además, is_single()
no garantiza al 100% que se cargó single.php
, ya que otras plantillas en la jerarquía podrían cargarse antes.
