web-dev-qa-db-fra.com

Problème de boucle transitoire

J'ai ce qui suit qui fonctionne bien mais cache seulement la première valeur pour le premier post et ne stocke pas les données pour toutes les publications de film dans la base de données. Comment je peux résoudre ce problème? J'ai aussi un aperçu en direct de ce thème.

$cinemamoviename    = get_post_meta( $post->ID, "cinama_moviename", true );
$cinemamovieyear    = get_post_meta( $post->ID, "cinama_movieyear", true );
$cinemamovienames   = urlencode( $cinemamoviename );

$json   = file_get_contents( 'http://www.omdbapi.com/?t=' . $cinemamovienames . '&y=' . $cinemamovieyear . '&plot=short&r=json' );
$obj    = json_decode( $json );

$movies_title   = $obj->Title;
$movies_year    = $obj->Year;
$movies_datas   = array( $movies_title, $movies_year );     

set_transient( 'get_movies_data_intrans', $movies_datas, 365 * DAY_IN_SECONDS );

$movies_details = get_transient( 'get_movies_data_intrans' ); 

if( false === $movies_details ){ set_transient( 'get_movies_data_intrans', $movies_datas, 365 * DAY_IN_SECONDS ); }

  ?>

<ul>
    <li>
        <b>Title</b> :
      <?php
        if ( $movies_details[0] == null ) {
            echo "N/A";
        } else { 
            echo $movies_details[0];
        }
      ?>
    </li>
    <li>
        <b> Relase Date </b> : 
      <?php
        if ( $movies_details[1] == null ) {
            echo "N/A";
        }else{
            echo $movies_details[1];
        }
      ?>
    </li>
</ul>
1
Poorya

Si vous ne stockez que les premières données de publication, c'est parce que vous utilisez le même nom temporaire pour chaque publication. Si vous souhaitez stocker plusieurs films en transit, vous avez besoin de noms uniques pour chaque film.

En outre, la façon dont vous obtenez le transitoire annule le but d'utiliser les transitoires. Vous voulez d'abord essayer d'obtenir le transitoire et s'il n'est pas disponible, générer une valeur et la définir comme transitoire.

Voici comment je modifierais votre code:

<?php
  $cinemamoviename    = get_post_meta( $post->ID, "cinama_moviename", true );
  $cinemamovieyear    = get_post_meta( $post->ID, "cinama_movieyear", true );
  $cinemamovienames   = urlencode( $cinemamoviename );

  $transient_name = "get_movies_data_intrans_$cimemamoviename_$cinemamovieyear";
  if( false === ( $movies_details = get_transient( $transient_name ) ) ) {
    $args = array(
      't'    => $cinemamovienames,
      'y'    => $cinemamovieyear,
      'plot' => 'short',
      'r'    => 'json',
    );
    $url    = add_query_arg( $args, 'http://www.omdbapi.com/' );
    $json   = wp_remote_get( $url );
    $obj    = json_decode( $json );

    $movies_title   = $obj->Title;
    $movies_year    = $obj->Year;
    $movies_datas   = array( $movies_title, $movies_year );     

    set_transient( $transient_name, $movies_datas, 365 * DAY_IN_SECONDS );    
  }
?>
1
Nathan Johnson