webentwicklung-frage-antwort-db.com.de

übergabe eines Arguments an get_template_part () oder eine bessere Methode zum Codieren

Ich habe dies beinhalten ... 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>

Wie Sie sehen, handelt es sich um eine benutzerdefinierte Abfrage, die einen meta_key mit dem aktuellen Datum vergleicht und nur Beiträge abruft, die "neuer" als gestern sind.

in meinen Archiven möchte ich es jedoch umgekehrt machen.

Auf meiner index.php habe ich das

<?php get_template_part( 'inc/event', 'list' ); ?>

Die obige Vorlage wird ausgeführt und ruft nur Ereignisse ab, die aktueller als die letzten 24 Stunden sind.

In meinem archives.php möchte ich jedoch den meta_compare-Wert von ">" auf "<" umkehren, damit ich den Rest der Posts erhalte.

Gibt es eine clevere Möglichkeit, dies zu tun?

Also habe ich das auch in meiner archives.php ...

<?php get_template_part( 'inc/event', 'list' ); ?>

Kann ich den Wert 'meta_compare' irgendwie an diese Vorlage übergeben? Ich kann also die gleiche Vorlagendatei in meiner index.php und in meiner archives.php haben und verwenden, aber mit unterschiedlichen 'meta_compare'-Werten.

Irgendwelche Ideen dazu?

3
mathiregister

Warum benutzt du nicht eine einfache Funktion mit einem Argument, um das zu erreichen? Der Code sieht ungefähr so ​​aus:

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>';
}

Und dann rufen Sie in Ihrem index.php einfach an:

<?php wpse63585_event_list(); ?>

und in archives.php:

<?php wpse63585_event_list( false ); ?>

Eine andere Lösung Ich kann darüber nachdenken, dass Sie eine globale Variable wie $wpse63585_fresh = true registrieren und diese Variable in Ihrem Vorlagenteil event-list.php verwenden können, um die Bedingung wie folgt zu steuern:

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:

<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>
3
Anh Tran