J'ai un type de message personnalisé 'citations' et j'aimerais afficher chaque jour une entrée aléatoire sur la page d'accueil.
C'est le code que je dois actuellement afficher le contenu:
<?php query_posts( 'post_type=quote&orderby=Rand&showposts=1' ); ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php if ( has_post_thumbnail() ) {
the_post_thumbnail( 'thumbnail-quote' );
} else { ?>
<img src="<?php bloginfo('template_directory'); ?>/img/thumb1.jpg" alt="x" class="quote_person" />
<?php } ?>
<div class="quote_container">
<span class="quote_intro hstack">Quote of the day:</span><a class="quote_Tweet hstack" href="#">Tweet this quote <i class="fa fa-Twitter"></i></a>
<div class="quote_message white gstack"><?php the_field('quote'); ?></div>
<div class="quote_source white hstack"><?php the_field('attribution'); ?></div>
</div>
<?php endwhile; endif; ?>
MODIFIER:
Suite aux suggestions utiles, j'ai maintenant quelque chose qui ressemble à ce qui suit:
<?php
if ( false === ( $quotes = get_transient( 'random_quote' ) ) ) {
// It wasn't there, so regenerate the data and save the transient
$args = array(
'post_type' => 'quote',
'orderby' => 'Rand',
'posts_per_page' => '1'
);
$quotes = get_posts( $args );
//Now we store the array for one day.
//Just change the last parameter for another timespan in seconds.
$seconds_until_next_day = strtotime('tomorrow') - time();
set_transient( 'random_quote', $quotes, $seconds_until_next_day );
}
foreach ( $quotes as $post ) : setup_postdata( $post );
if ( have_posts()) : while (have_posts()) : the_post();
if ( has_post_thumbnail() ) {
the_post_thumbnail( 'thumbnail-quote' );
} else { '<img src="' . bloginfo('template_directory') .'/img/thumb1.jpg" alt="University of Lincoln" class="quote_person" />'
echo '<div class="quote_container">
<span class="quote_intro hstack">Quote of the day:</span><a class="quote_Tweet hstack" href="#">Tweet this quote <i class="fa fa-Twitter"></i></a>
<div class="quote_message white gstack" id="thequote">' . the_field('quote') . '</div>
<div class="quote_source white hstack">' . the_field('attribution') . '</div>
</div>
'; }
endforeach;
wp_reset_postdata();
?>
Je ne suis pas tout à fait sûr d'avoir bien compris la déclaration foreach.
Tout d’abord, vous ne devriez vraiment pas utiliser query_posts()
. Lisez cette excellente explication pourquoi.
Il s’agit alors d’un cas d’utilisation idéal pour transitoires .
Vous ne recevez la publication qu'une seule fois, puis vous la mettez en cache pendant 24 heures à l'aide de l'API Transients.
if ( false === ( $quotes = get_transient( 'random_quote' ) ) ) {
// It wasn't there, so regenerate the data and save the transient
$args = array(
'post_type' => 'quote',
'orderby' => 'Rand',
'posts_per_page' => '1'
);
$quotes = get_posts( $args );
//Now we store the array for one day.
//Just change the last parameter for another timespan in seconds.
set_transient( 'random_quote', $quotes, DAY_IN_SECONDS );
}
Si votre objectif était de le lier à des jours calendaires et non 24 heures à compter de la dernière demande, remplacez la dernière ligne par la suivante. ( accessoires to chaos )
$seconds_until_next_day = strtotime('tomorrow') - time();
set_transient( 'random_quote', $quotes, $seconds_until_next_day );
Après avoir obtenu les données, vous pouvez simplement les afficher comme vous le souhaitez:
foreach ( $quotes as $post ) : setup_postdata( $post );
[...]
the_title();
[...]
endforeach;
wp_reset_postdata();
Voir ce lien pour plus d'exemples.
EDIT:
Cela devrait faire l'affaire dans votre situation particulière:
foreach ( $quotes as $post ) : setup_postdata( $post );
if ( has_post_thumbnail() ) {
the_post_thumbnail( 'thumbnail-quote' );
} else { ?>
<img src="<?php echo get_stylesheet_directory_uri (); ?>/img/thumb1.jpg" alt="x" class="quote_person" />
<?php } ?>
<div class="quote_container">
<span class="quote_intro hstack">Quote of the day:</span><a class="quote_Tweet hstack" href="#">Tweet this quote <i class="fa fa-Twitter"></i></a>
<div class="quote_message white gstack"><?php the_field('quote'); ?></div>
<div class="quote_source white hstack"><?php the_field('attribution'); ?></div>
</div>
<?php endforeach;
wp_reset_postdata();