if (is_page(**ID DE PÁGINA**)) no funciona
Estoy siguiendo este tutorial sobre cómo añadir el código de Google Content Experiments a header.php
.
Agregué el siguiente código a header.php
:
<?php if (is_page('346') ):?>
<!-- Código de Google Analytics Content Experiment -->
...
<!-- Fin del código de Google Analytics Content Experiment -->
<?php endif; ?>
Esto no produjo el código del experimento de contenido en el front-end. Intenté:
<?php if (is_page(346) ):?>
<!-- Código de Google Analytics Content Experiment -->
...
<!-- Fin del código de Google Analytics Content Experiment -->
<?php endif; ?>
Esto tampoco funcionó.
¿Pueden ver por qué este código no está funcionando? Gracias.

¿Qué pasa si quiero agregar una función PHP en <!-- do stuff -->? ¿Simplemente uso `<?php if( $post->ID == 346) {
<!-- do your stuff here -->
} ?>`

¿La variable global $post siempre está disponible? ¿Siempre será un objeto con un ID? ¿Qué pasa en las páginas de archivo?

@Firsh-justifiedgrid.com sí, la variable siempre está disponible sin importar si es una página, entrada, adjunto o cualquier tipo de contenido personalizado.

Una solución más sencilla sería pasar el title
o el slug
como argumento en is_page()
. No tendrás problemas si duplicas esa página en otro servidor.
<?php
if (is_page( 'Título de la página' ) ):
# Haz lo que necesites
endif;
?>

Si el administrador decide cambiar el slug de la publicación en el futuro, ¿rompería esta condición?

@ViktorBorítás Sí, lo hará. Si normalmente usas las funciones de Importar/Exportar de WordPress durante el desarrollo, no tienes garantizado tener el mismo ID de página en todos tus servidores. Si despliegas toda la base de datos cada vez, entonces obtendrás el mismo ID de página. De lo contrario, puedes usar el título de la página o el slug.

@RRikesh cierto, sin embargo en mi opinión referenciar el ID de la página sigue siendo la estrategia más segura a largo plazo (especialmente si la redirección interna nativa de WP es sobrescrita por los desarrolladores), para romper la menor cantidad de cosas posible ante un posible cambio de slug/título/nombre. Eso puede pasar demasiado fácilmente. ;) Supongo/espero que en la mayoría de los casos los desarrolladores usualmente reflejan toda la base de datos, por lo que los IDs de página permanecen iguales.

Los hooks como init
no funcionarán en absoluto.
Debes enganchar al menos en parse_query
.
Todo lo siguiente funcionará:
is_page(198); # ID (entero)
is_page('198'); # ID (cadena)
is_page('Algún Título'); # Título, sensible a mayúsculas
is_page('algún-título'); # Slug
Pero debe estar enganchado al menos en parse_query
o cualquier otro hook posterior. Puedes ver el orden de los hooks de WordPress aquí: https://codex.wordpress.org/Plugin_API/Action_Reference

Primero debes conocer la diferencia entre una página y una entrada. Una vez que hayas entendido esto, podrás elegir si usar is_page o is_single.
Si estás trabajando con páginas de WordPress, escribe de la siguiente manera. Nota: este ejemplo utiliza un array por si necesitas implementarlo en múltiples páginas:
<?php if (is_page( array( 1, 529, 'o título de la página' ) ) ) : ?>
<!-- No hacer nada -->
<?php else : ?>
<!-- Inserta tu código aquí -->
<?php endif; ?>
Pero si necesitas que también afecte a tus entradas, añade estas líneas también:
<?php if (is_single( array( 1, 529, 'o título de la entrada' ) ) ) : ?>
<!-- No hacer nada -->
<?php else : ?>
<!-- Inserta tu código aquí -->
<?php endif; ?>

intenta usar is_single($post)
en tu caso is_single(346) o is_single('346') ambas deberían funcionar
