passare argomento a get_template_part () o un modo migliore per codificare

Ho questo include … event-list.php

  
    '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(); ?>

Come puoi vedere si tratta di una query personalizzata che confronta un meta_key con la data corrente e recupera solo i post che sono “più recenti” rispetto a ieri.

tuttavia nei miei archivi voglio farlo al contrario.

Sul mio index.php ho questo

Quindi questo modello sopra viene eseguito e recupera solo eventi più freschi degli ultimi 24 ore.

Nel mio archives.php anche se mi piacerebbe invertire il valore di meta_compare da “>” a “<" così ottengo il resto dei post.

C’è un modo intelligente per farlo?

Quindi nel mio archivio.php ho anche questo …

Posso in qualche modo passare il valore ‘meta_compare’ a questo modello? Quindi posso avere e usare lo stesso file template nel mio index.php e nel mio archives.php ma con diversi valori di “meta_compare”.

Qualche idea su questo?

Solutions Collecting From Web of "passare argomento a get_template_part () o un modo migliore per codificare"

Perché non usi una semplice funzione con un argomento per ottenerlo, il codice è qualcosa del genere:

 function wpse63585_event_list( $fresh = true ) { echo '
    '; $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 '
'; }

E poi nel tuo index.php , basta chiamare:

 < ?php wpse63585_event_list(); ?> 

e in archives.php :

 < ?php wpse63585_event_list( false ); ?> 

Un’altra soluzione a cui posso pensare è che puoi registrare una variabile globale, come $wpse63585_fresh = true , e usare quella variabile nella tua parte template event-list.php per controllare la condizione, in questo modo:

In index.php :

 global $wpse63585_fresh; $wpse63585_fresh = true; get_template_part( 'inc/event', 'list' ); 

In archive.php :

 global $wpse63585_fresh; $wpse63585_fresh = false; get_template_part( 'inc/event', 'list' ); 

In event-list.php :

 
    < ?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(); ?>