将参数传递给GET_TEMPLATE_PART()或更好的编码方式

时间:2012-08-30 作者:mathiregister

我有这个包括…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\\u键与当前日期进行比较,并且只检索比昨天“更新”的帖子。

然而,在我的档案中,我想反过来做。

在我的索引上。php我有这个

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

因此,上面的模板正在执行,只检索比过去24小时更新的事件。

在我的archives.php 虽然我想把meta_compare 值从“>”到“<;”所以我得到了其余的帖子。

有没有聪明的方法可以做到这一点?

所以在我的档案里。php我也有这个…

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

我是否可以通过某种方式将“meta\\u compare”值传递给此模板?因此,我可以在索引中使用相同的模板文件。php和我的档案中。php,但具有不同的“meta\\u compare”值。

有什么想法吗?

1 个回复
最合适的回答,由SO网友:Anh Tran 整理而成

为什么不使用一个带参数的简单函数来实现这一点,代码如下所示:

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 ); ?>
Another solution 我想你可以注册一个全局变量,比如$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>

结束

相关推荐

我们应该在函数文件中使用GET_TEMPLATE_PART()而不是INCLUDE_ONCE吗?

我使用主题检查插件来检查我的主题是否有错误和建议,我在标题等主题文件中使用get\\u template\\u part()。php和索引。php,但在函数中。我使用的php include\\u once()主题检查并不是指向这些,而是指向曾经在小部件中使用过的include\\u。函数中包含的php文件。php我的问题是,我们应该使用get\\u template\\u part()而不是all include\\u once()和include(),还是只用于获取常用标记?我知道只建议使用get\\