J'ai un modèle de page qui a une boucle pour afficher les messages de blog. À l'intérieur de la boucle, la fonction get_template_part('content', 'custom')
permet d'inclure le modèle (content-custom.php) qui affiche le contenu d'un article de blog. Est-il possible d'obtenir l'ID de la page actuelle dans le fichier content-custom.php
?
Vous pouvez utiliser toutes les balises template à l'intérieur de ce fichier. Pour obtenir l'ID, utilisez simplement get_the_ID()
(ou the_ID()
pour l'afficher).
get_the_ID()
récupérera l'ID numérique de la publication en cours. Il n'a pas de paramètre et renvoie l'ID de la publication en cours.
the_ID()
affichera l'ID numérique de la publication en cours. Il n'a également aucun paramètre.
Si vous souhaitez accéder à l'ID de la page contenant votre boucle personnalisée, vous pouvez le faire comme suit:
Dans votre modèle de page:
<?php
global $parent_page_id;
$parent_page_id = get_the_ID();
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array( 'post_type' => 'post', 'paged' => $paged );
$temp = $wp_query;
$wp_query = null;
$wp_query = new WP_Query( $args );
$wp_query->query( $args );
?>
<?php if ( $wp_query->have_posts() ) : ?>
<?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
<?php get_template_part( 'content', 'custom' ); ?>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php else : ?>
<?php get_template_part( 'no-results', 'index' ); ?>
<?php endif; ?>
Et dans votre modèle post-contenu:
...
global $parent_page_id; // now you can use parent_page_template variable
...
Dans votre modèle de page:
<?php
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array( 'post_type' => 'post', 'paged' => $paged );
$my_custom_query = new WP_Query( $args );
?>
<?php if ( $my_custom_query->have_posts() ) : ?>
<?php while ( $my_custom_query->have_posts() ) : $my_custom_query->the_post(); ?>
<?php get_template_part( 'content', 'custom' ); ?>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php else : ?>
<?php get_template_part( 'no-results', 'index' ); ?>
<?php endif; ?>
Et dans votre modèle post-contenu:
...
... $wp_query->queried_object_id; // it will contain object queried in original wp_query
...
Per cette réponse vous pouvez utiliser get_queried_object_id()
qui ne figure pas encore dans le Codex, mais qui est lié à get_queried_object()
$page_id = get_queried_object_id();
Pour obtenir l'identifiant de la page, vous pouvez utiliser la publication globale.
global $ post; echo "pageid:". $ post-> ID;
Ci-dessus, vous retrouverez l'identifiant de la page actuelle et non l'identifiant.
Solution 1: (Mauvaise solution)
$p = $GLOBALS['wp_the_query']->get_queried_object_id();
//$p will be your page id
Remarque: vous ne devez jamais utiliser l'objet global wp_the_query.
EDIT: si vous n'avez pas falsifié l'objet global wp_query, c'est-à-dire que vous n'avez pas utilisé query_posts () etc., les solutions de helgatheviking fonctionneront: code:
get_queried_object_id();
or
$GLOBAL['wp_query']->get_queried_object_id();
Solution 2: Comme le suggère le commentaire, vous pouvez stocker l'identifiant de la page en dehors de la boucle et y accéder à l'intérieur de la boucle. la question de la portée de l'accès à celui-ci dans le fichier de pièce modèle peut être résolue en la déclarant globale.
Code:
//1. in the template file befor the loop
global $myglobal_page_id;
$mygloba_page_id = get_the_ID();
//you can start the loop here
get_template_part('content', 'custom');
// 2. in the template part file
global $myglobal_page_id; //inside the loop or otherwise
//this will have your page_id
Explication # Solution 1:
Une fois dans la boucle, l'objet de publication global est défini sur votre publication actuelle. Par conséquent, lorsque vous appelez the_ID (), get_the_ID () (qui utilisait la fonction get_post ()), vous obtiendrez l'id de la publication en cours, et non la publication principale.
vous devez donc accéder à l'objet principal wp_the_query (qui est une copie de l'objet de requête principal utilisé pour réinitialiser la requête réf: wp_reset_query ()), car il contient votre requête d'origine.