web-dev-qa-db-fra.com

Set Transient ne fait rien

J'essaie de définir un transitoire sur ma requête personnalisée, mais cela ne semble pas fonctionner. Chaque fois que je rafraîchis la page, elle affiche toujours des messages différents à chaque fois.

Après avoir lu sur l'api des transitoires, je suis venu à croire que la définition d'un transitoire stockerait ma première requête avec les mêmes messages qu'il avait interrogés et les afficherait à nouveau la prochaine fois sans refaire toute la requête.

Ai-je tort ou qu'est-ce que je fais mal?

Voici ma requête complète MISE À JOUR :

if(isset($_COOKIE['myCookie']) && $_COOKIE['myCookie'] == $f_a){

// Check for transient. If none, then execute WP_Query
if ( false === ( $akerargs = get_transient( 'county_query' ) ) ) {

    $akerargs = array(
    'posts_per_page' => 4,
    'nopaging' => false,
    'order'    => 'ASC',
    'orderby'  => 'Rand',
    'tax_query' => array(
        array(
            'taxonomy' => 'Count',
            'field' => 'slug',
            'terms' => $f_a,
        )
    )

);

// Put the results in a transient. Expire after 10 minutes.
set_transient( 'county_query', $akerargs, 10 * MINUTE_IN_SECONDS );

}

ob_start();?>

<div class="container-fluid">

<?php

$akerquery = new WP_Query( $akerargs );

?>

<div class="row">

<?php if ( $akerquery->have_posts() ) {

while ( $akerquery->have_posts() ) {
    $akerquery->the_post();
?>  

   <div class="col-6 mt-4">  

        <a href="<?php the_field('county_link'); ?> ">
                <img src="<?php echo the_field('county_img'); ?>" />
       </a>  

    </div> 

<?php

}

$akerquery->wp_reset_postdata();

} else {

echo 'Oops! Something went wrong.';

}

?>

</div>
</div>

<?php

return ob_get_clean();

MISE À JOUR

J'ai essayé plusieurs solutions possibles maintenant et cela ne fonctionne toujours pas. Selon le codex WordPress, voici comment cela pourrait être accompli:

// Check for transient. If none, then execute WP_Query
if ( false === ( $featured = get_transient( 'foo_featured_posts' ) ) ) {

      $featured = new WP_Query(
       array(
        'category' => 'featured',
        'posts_per_page' => 5
       ));

    // Put the results in a transient. Expire after 12 hours.
    set_transient( 'foo_featured_posts', $featured, 12 * HOUR_IN_SECONDS );
} ?>

// Run the loop as normal

Et voici ce que j'ai essayé maintenant:

if(isset($_COOKIE['myCookie']) && $_COOKIE['myCookie'] == $f_a){

    // Check for transient. If none, then execute WP_Query
if ( false === ( $akerargs = get_transient( 'county_query' ) ) ) {


    $akerargs = array(
    'posts_per_page' => 4,
    'nopaging' => false,
    'order'    => 'ASC',
    'orderby'  => 'Rand',
    'tax_query' => array(
        array(
            'taxonomy' => 'Count',
            'field' => 'slug',
            'terms' => $f_a,
        )
    )
);


$akerquery = new WP_Query( $akerargs );

    // Put the results in a transient. Expire after 10 minutes.
set_transient( 'county_query', $akerargs, 10 * MINUTE_IN_SECONDS );
}
// Run the loop as normal

Mais il exécute toujours la requête et récupère les nouveaux messages au lieu d'enregistrer les 4 messages qui sont interrogés au début dans le transitoire.

1
Steve Rodgers

Et c'est exactement comme ça que ça va fonctionner, parce que c'est ce que vous avez codé;)

Vous réglez correctement le transitoire, mais ...

Vous ne mettez là que des arguments de requête. Et cela n'a pas beaucoup de sens - c'est juste un tableau PHP qui est très facile et rapide à créer.

Et la requête elle-même est toujours exécutée - elle est en dehors du if. Alors oui - les résultats de la requête sont obtenus à chaque demande. Et parce que vous utilisez Rand comme ordonné, vous obtenez des publications aléatoires à chaque demande.

Si vous souhaitez utiliser des transitoires pour mettre en cache les résultats de la requête et afficher les mêmes messages pendant 10 minutes (ou toute autre période), vous devrez conserver ces résultats dans les transitoires.

1
Krzysiek Dróżdż