web-dev-qa-db-ja.com

get_template_part()に人数を渡すか、コードを書くよりよい方法

私はこれが含まれています…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>

ご覧のとおり、これはmeta_keyと現在の日付を比較し、昨日より「新しい」投稿のみを取得するカスタムクエリです。

しかし私のアーカイブでは私はそれを逆にしたいと思っています。

私のindex.phpに私はこれを持っている

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

したがって、上記のこのテンプレートは実行されており、過去24時間よりも新しいイベントのみを取得します。

私のarchives.phpでは、meta_compareの値を ">"から "<"に反転したいので、残りの投稿を取得します。

これを行う賢い方法はありますか?

だから私のarchives.php私もこれを持っている…

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

どういうわけか 'meta_compare'値をこのテンプレートに渡すことができますか?だから私は私のindex.phpと私のarchives.phpで同じテンプレートファイルを持つことができますが、 'meta_compare'の値が異なります。

それについて何かアイデアはありますか?

3
mathiregister

それを達成するために引数を指定した単純な関数を使用しないでください。コードは次のようになります。

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

そしてあなたのindex.phpの中で、ただコールしてください:

<?php wpse63585_event_list(); ?>

そしてarchives.phpでは:

<?php wpse63585_event_list( false ); ?>

もう1つの解決策 $wpse63585_fresh = trueのようにグローバル変数を登録し、その変数をテンプレート部分event-list.phpで使用して条件を制御することができます。

index.php内:

global $wpse63585_fresh;

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

archive.php内:

global $wpse63585_fresh;

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

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