J'ai ceci inclus… event-list.php
<?php
/**
* The loop that displays upcoming events
*/
?>
<ul class="event-items">
<?php
$yesterday = time() - 24*60*60;
$args = array(
'post_type' => 'wr_event',
'posts_per_page' => -1, // show all posts
'meta_key' => 'event_date',
'orderby' => 'meta_value_num',
'order' => 'ASC',
'meta_value' => $yesterday,
'meta_compare' => '>'
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
get_template_part( 'inc/event', 'item' );
endwhile;
wp_reset_postdata();
?>
</ul>
Comme vous pouvez le constater, il s’agit d’une requête personnalisée qui compare une méta_key à la date du jour et ne récupère que les publications "plus récentes" que la veille.
cependant, dans mes archives, je veux le faire à l'inverse.
Sur mon index.php j'ai ceci
<?php get_template_part( 'inc/event', 'list' ); ?>
Donc, ce modèle ci-dessus est en cours d'exécution et récupère uniquement les événements plus récents que les dernières 24 heures.
Dans mon archives.php
, j'aimerais inverser la valeur meta_compare
de ">" à "<" afin que je reçoive le reste des messages.
Y a-t-il un moyen intelligent de faire cela?
Donc, dans mes archives.php, j'ai aussi ceci…
<?php get_template_part( 'inc/event', 'list' ); ?>
Puis-je en quelque sorte passer la valeur 'meta_compare' à ce modèle? Je peux donc utiliser et utiliser le même fichier de modèle dans mon index.php et dans mon fichier archives.php, mais avec des valeurs 'meta_compare' différentes.
Des idées à ce sujet?
Pourquoi n'utilisez-vous pas une fonction simple avec un argument pour obtenir cela, le code ressemble à ceci:
function wpse63585_event_list( $fresh = true )
{
echo '<ul class="event-items">';
$yesterday = time() - 24*60*60;
$compare = $fresh ? '>' : '<';
$args = array(
'post_type' => 'wr_event',
'posts_per_page' => -1, // show all posts
'meta_key' => 'event_date',
'orderby' => 'meta_value_num',
'order' => 'ASC',
'meta_value' => $yesterday,
'meta_compare' => $compare,
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
get_template_part( 'inc/event', 'item' );
endwhile;
wp_reset_postdata();
echo '</ul>';
}
Et dans votre index.php
, appelez simplement:
<?php wpse63585_event_list(); ?>
et dans archives.php
:
<?php wpse63585_event_list( false ); ?>
Une autre solution Je peux penser est que vous pouvez enregistrer une variable globale, telle que $wpse63585_fresh = true
, et utiliser cette variable dans votre partie de modèle event-list.php
pour contrôler la condition, comme ceci:
Dans index.php
:
global $wpse63585_fresh;
$wpse63585_fresh = true;
get_template_part( 'inc/event', 'list' );
Dans archive.php
:
global $wpse63585_fresh;
$wpse63585_fresh = false;
get_template_part( 'inc/event', 'list' );
Dans event-list.php
:
<ul class="event-items">
<?php
global $wpse63585_fresh;
$compare = $wpse63585_fresh ? '>' : '<';
$yesterday = time() - 24*60*60;
$args = array(
'post_type' => 'wr_event',
'posts_per_page' => -1, // show all posts
'meta_key' => 'event_date',
'orderby' => 'meta_value_num',
'order' => 'ASC',
'meta_value' => $yesterday,
'meta_compare' => $compare
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
get_template_part( 'inc/event', 'item' );
endwhile;
wp_reset_postdata();
?>
</ul>