J'essaie d'obtenir l'ID (en dehors de la boucle) d'une page qui contient une boucle d'un autre CPT dans son contenu à l'aide d'un shortcode.
Si je fais un print_r
de get_queried_object()
, tout ce que je récupère est utilisé pour enregistrer le CPT
Si je echo
$post->ID
j'obtiens l'ID du dernier élément de la boucle secondaire.
Si je echo
get_queried_object_id()
, je reçois 0
tout le temps.
Voici le code que j'utilise actuellement
function get_meta_values() {
global $post;
$queried_object = get_queried_object();
echo '<pre>';
print_r( $queried_object ); //Returns args used to register the CPT
echo '<br> $queried_object->ID: ' . $queried_object->ID; //Returns Nothing
echo '<br>get_queried_object_id(): '. get_queried_object_id(); // Returns 0 all the time
echo.'<br>PageID: ' . $post->ID; // Returns the ID of last item in the secondary loop
echo '</pre>';
}
add_action( 'wp_footer', 'get_meta_values' );
Mon objectif est d'obtenir l'ID de la page (où se trouve le shortcode) afin de récupérer certaines valeurs de champs personnalisés.
EDIT: J'utilise WooCommerce, mais le code court qui produit les produits est personnalisé. Je sais que je pourrais contourner le problème par d'autres moyens, mais je voudrais juste savoir pourquoi cela ne fonctionne pas.
Comme d'autres l'ont déjà compris: si vous avez des plugins tiers avec des requêtes personnalisées, vous passerez une mauvaise journée!
Une solution pourrait être la mise en cache de vos résultats.
Modèle (par exemple: page.php)
while (have_posts()): the_post();
global $my_cached_data;
$post_id = get_the_ID();
/*
* If you have single meta keys, this array_map function
* makes them easy to access; otherwise just use:
*
* $my_cached_data[$post_id] = get_post_meta( $post_id)
*/
$my_cached_data[$post_id] = array_map(
function( $a )
{
return $a[0];
},
get_post_meta( $post_id)
);
endwhile;
footer.php
global $my_cached_data;
echo "<pre>".print_r($my_cached_data, true)."</pre>";
Résultat possible (avec les ID de page 2 et 15 ayant les mêmes métadonnées de publication)
array(2) {
[2]=>
array(2) {
["meta_key"]=>
string(10) "meta_value"
["another_key"]=>
string(10) "meta_value"
}
[15]=>
array(2) {
["meta_key"]=>
string(10) "meta_value"
["another_key"]=>
string(10) "meta_value"
}
}