是否通过元关键字来分类Archive.php中的自定义帖子?

时间:2012-04-11 作者:mathiregister

这个问题与此密切相关question 我已经得到了一个有效的答案。

我有一个名为“wr\\u event”的自定义帖子模板和一个名为“event\\u type”的自定义分类法。

这个“事件帖子”有一个元框,我在其中设置事件日期,我使用这个…

function change_order_for_events( $query ) {
    //only show future events and events in the last 24hours
    $yesterday = time() - 24*60*60; 

    if ( $query->is_main_query() && is_tax(\'event_type\') ) {
        $query->set( \'meta_key\', \'_wr_event_date\' );
        $query->set( \'orderby\', \'meta_value_num\' );
        $query->set( \'order\', \'ASC\' );
        $query->set( \'meta_value\', $yesterday );
        $query->set( \'meta_compare\', \'>\' );
    }

}

add_action( \'pre_get_posts\', \'change_order_for_events\' );
…根据事件日期对所有“事件帖子”进行排序。

这很好用,完全符合我的要求。

到目前为止,唯一不起作用的是“archive.php”,我希望它能在这里生效。

我补充道\'has_archive\' => \'events\' 到我的自定义帖子模板。/events 现在显示我已经使用的“archive.php”文件is_post_type_archive(\'wr_event\') 作为我的标题。

但是,我希望我的存档事件也按正确的日期顺序排列。所以上面的函数相同change_order-for_events() 应该可以使用我的“archive.php”模板。当然,在这种情况下,函数应该只显示已经发生的旧事件。

你知道我该怎么做吗?

update:我将时间戳存储在MetaBox and CustomFields Class

$meta_boxes[] = array(
    \'id\'         => \'event_date\',
    \'title\'      => \'Event Date\',
    \'pages\'      => array( \'wr_event\', ),
    \'context\'    => \'normal\',
    \'priority\'   => \'high\',
    \'fields\'     => array(
        array(
            \'name\' => \'Event Date Picker\',
            \'desc\' => \'The date the event takes place\',
            \'id\'   => $prefix . \'event_date\',
            \'type\' => \'text_date_timestamp\',
        )
    ),
);
我使用在模板文件中查询它

$wr_event_fields = get_post_custom();
$wr_event_fields[\'_wr_event_date\'][0];

2 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

只需使用appropriate conditionals:

function change_order_for_events( $query ) {
    //only show future events and events in the last 24hours
    $yesterday = current_time(\'timestamp\') - 24*60*60; 

    if ( $query->is_main_query() && (is_tax(\'event_type\') || is_post_type_archive(\'wr_event\')) ) {
        $query->set( \'meta_key\', \'_wr_event_date\' );
        $query->set( \'orderby\', \'meta_value_num\' );
        $query->set( \'order\', \'ASC\' );

        //Get events after 24 hours ago
        $query->set( \'meta_value\', $yesterday );
        $query->set( \'meta_compare\', \'>\' );

       //Get events before now
       //$query->set( \'meta_value\', current_time(\'timestamp\') );
       //$query->set( \'meta_compare\', \'<\' );
    }

}

add_action( \'pre_get_posts\', \'change_order_for_events\' );
这将更改分类法术语存档的主查询event_type 以及岗位类型的档案wr_event.

SO网友:Steve Fischer

我会在WP\\u查询中使用meta\\u查询参数heres the link

试着这样做:

$args = array(
\'orderby\' => \'meta_value_num\',
    \'order\' => \'ASC\',
\'meta_query\' => array(      
    array(
        \'key\' => \'_wr_event_date\',
        \'value\' => $yesterday,
        \'compare\' => \'>\'
    )
)
 );
$query = new WP_Query( $args );

结束

相关推荐

显示Archives.php中的所有自定义帖子类型

我该怎么做?archive.php 只有以下内容:wp_get_archives(\'type=monthly\'); 以及wp_get_archives() 没有显示所有帖子类型的参数。我也认为archive-[post_type].php 不是我要找的,因为我希望所有帖子类型都显示在一个归档页面中。谢谢W