Obtener el ID de la página actual desde una plantilla

19 feb 2018, 12:09:41
Vistas: 14.8K
Votos: 1

Estoy intentando obtener el ID de la página desde mi template-contact.php de esta manera:

global $post;
echo $post->ID;

Muestra 85 pero el ID de la página es 96, necesito obtener el ID correcto porque quiero recuperar los metadatos de la página actual.

Aquí está mi código de plantilla.

<?php /* Template Name: Página de Contacto */ ?>

<?php get_header() ?>
<?php 

global $post;
echo get_post_meta($post->ID, 'contact_page', true);


?>
<?php get_footer() ?>

Por favor ayuda

4
Comentarios

Ese código es correcto (aunque yo usaría get_the_ID() para hacer lo mismo). ¿Dónde exactamente en tu plantilla lo estás cargando? ¿Estás seguro de que lo estás llamando desde dentro de el loop?

swissspidy swissspidy
19 feb 2018 12:51:23

He editado la pregunta y añadido mi código de plantilla, cómo obtener la información meta para la página, en $post->ID estoy obteniendo el ID de una entrada en lugar del ID de la página actual

Anand Siddharth Anand Siddharth
19 feb 2018 13:24:02

Lo resolví, solo tenía que escribir the_post() antes de global $post.

Anand Siddharth Anand Siddharth
19 feb 2018 13:32:13

Quiero señalar que $wp_query->post->ID y get_the_ID() podrían estar en caché dependiendo de una variedad de temas, sistemas de constructores de temas, plugins y otras configuraciones. El post a continuación que usa get_queried_object_id funciona como el método más confiable fuera del loop desde una perspectiva "absoluta". Me he encontrado con un problema al "confiar" en get_the_ID() en muchos de estos temas modernos/sistemas de constructores porque pasan el ID a través de una serie de páginas/plantillas del constructor que oscurece el ID "REAL" de la página en la que crees que estás, dependiendo de lo que intentes hacer en la plantilla.

Christian Žagarskas Christian Žagarskas
7 ago 2022 00:59:38
Todas las respuestas a la pregunta 1
1

Para obtener el ID de la página que se está consultando desde fuera del loop o antes de que se establezca el objeto global post, utiliza get_queried_object_id().

<?php
/**
 * Nombre de la Plantilla: Página de Contacto
 */

get_header();
?>

<?php
$page_id = get_queried_object_id();
echo get_post_meta( $page_id, 'contact_page', true);
?>

<?php get_footer() ?>
19 feb 2018 13:39:21
Comentarios

Tu respuesta es la correcta. Quiero señalar que $wp_query->post->ID y get_the_ID() podrían estar en caché dependiendo de varios plugins o configuraciones. Estoy de acuerdo en que get_queried_object_id funciona.

Christian Žagarskas Christian Žagarskas
7 ago 2022 00:58:59