J'ai créé un tableau de suggestion automatique que je souhaite stocker dans un transitoire. Mon code ressemble à ceci:
<?php
// Get any existing copy of our transient data
$suggest = get_transient('suggest');
if ( false === ( $suggest = get_transient( 'suggest' ) ) ) {
// It wasn't there, so regenerate the data and save the transient
$suggest = array();
// We will loop a custom post type and fetch custom meta from each post to be added into the autosuggest array
$query = new WP_Query( array( 'post_type' => 'my_custom_post_type', 'posts_per_page' => -1, ) );
$posts = $query->posts;
foreach($posts as $post) {
$value1 = get_post_meta( get_the_ID() , '_town', true );
$value2 = get_post_meta( get_the_ID() , '_quarteroftown', true );
$value3 = get_post_meta( get_the_ID() , '_street_name', true );
$value4 = get_post_meta( get_the_ID() , '_supplier_postcode', true );
if (!in_array($value1, $suggest))
{
$suggest[] = $value1;
}
if (!in_array($value2, $suggest))
{
$suggest[] = $value2;
}
if (!in_array($value3, $suggest))
{
$suggest[] = $value3;
}
if (!in_array($value4, $suggest))
{
$suggest[] = $value4;
}
}
set_transient( 'suggest', $suggest, HOUR_IN_SECONDS );
}; ?>
Si je ne mets pas de transitoire et que j'utilise simplement l'objet $ suggest, toutes les valeurs sont correctement présentes dans le tableau. Lorsque j'ajoute la fonctionnalité transitoire comme vu ci-dessus, le transitoire n'aura que des chaînes $ value1 et $ value2, aucune de _streetname ou _supplier_postcode.
Encore plus de carburant pour mon wtf-fire: si je commande simplement la suppression du transitoire à chaque fois, il commence à fonctionner! Voir le code ci-dessous:
<?php
// Get any existing copy of our transient data
delete_transient('suggest'); // ADDING THIS AND FORCING REGEN OF TRANSIENT EVERY TIME FIXES THE PROBLEM!
$suggest = get_transient('suggest');
Je n'arrive pas. Que diable peut être à l'origine de ce comportement?
Vous utilisez get_the_id()
balise de modèle sans boucle appropriée.
Votre code devrait ressembler à ceci
<?php
// Get any existing copy of our transient data
$suggest = get_transient('suggest');
if ( false === ( $suggest = get_transient( 'suggest' ) ) ) {
// It wasn't there, so regenerate the data and save the transient
$suggest = array();
// We will loop a custom post type and fetch custom meta from each post to be added into the autosuggest array
$query = new WP_Query( array( 'post_type' => 'my_custom_post_type', 'posts_per_page' => -1, ) );
$posts = $query->posts;
foreach($posts as $the_post) {
$value1 = get_post_meta( $the_post->ID , '_town', true );
$value2 = get_post_meta( $the_post->ID , '_quarteroftown', true );
$value3 = get_post_meta( $the_post->ID , '_street_name', true );
$value4 = get_post_meta( $the_post->ID , '_supplier_postcode', true );
if (!in_array($value1, $suggest))
{
$suggest[] = $value1;
}
if (!in_array($value2, $suggest))
{
$suggest[] = $value2;
}
if (!in_array($value3, $suggest))
{
$suggest[] = $value3;
}
if (!in_array($value4, $suggest))
{
$suggest[] = $value4;
}
}
set_transient( 'suggest', $suggest, HOUR_IN_SECONDS );
}; ?>
Il y a un problème avec votre code. Vous interrogez les publications et les parcourez sans définir la variable globale $post
. Dans ce type de boucles, vous ne pouvez pas utiliser la fonction get_the_ID()
, car elle renverra l'ID de la variable $post
Actuellement globale qui, dans votre cas, pourrait être n'importe quoi, selon le contexte de votre code.
Regarde la différence:
$query = new WP_Query( [ 'post_type' => 'my_custom_post_type', 'posts_per_page' => - 1, ] );
// First case
if ($query->have_posts()) {
while($query->have_posts()) {
// This actually sets the global $post variable to the current post in the loop
$query->the_post();
// Here you can use context-dependable functions
$ID = get_the_ID();
$title = get_the_title();
}
}
// You should reset the globals to the previous state
wp_reset_query();
// The Second case
// Please don't use $post variable in your loops, it can sometimes interfere
// with the global $post variable
$my_posts = $query->get_posts();
foreach ($my_posts as $my_post) {
// here $post is not the global variable, so we can't use the same functions
$ID = $my_post->ID;
$title = $my_post->post_title;
}
Vous pouvez en savoir plus sur le WP_Query
Sur le WP documentation officielle .