如何为CPT(自定义帖子类型)提供基于日期的URL

时间:2011-06-10 作者:TJ Sherrill

我有一些具有事件日期自定义字段的事件。我想创建一个基于日期的页面来显示给定日期的所有事件,我希望使用url来帮助实现这一点。

我有一个7天的日历,它显示了给定一天的“特色”活动。然后我想链接到一个显示那天所有事件的页面。

我不确定这是否可能,但我想这堆天才们会知道的。

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

假设事件重写slug是event,并且希望基于日期的URL如下所示:http://domain.com/event/2011-06-14/

function custom_permalink_for_my_cpt( $rules ) {
    $custom_rules = array();

    // a rewrite rule to add our custom date based urls
    $custom_rules[\'event/([0-9]{4}-[0-9]{2}-[0-9]{2})/?$\'] = \'index.php?post_type=event&event-date=$matches[1]\';
    return $custom_rules + $rules;
}
add_filter( \'rewrite_rules_array\', \'custom_permalink_for_my_cpt\' );

// add a query var so we can read the date passed in url
function my_custom_query_vars( $query_vars ) {
    $query_vars[] = \'event-date\';
   return $query_vars; 
}
add_filter( \'query_vars\', \'my_custom_query_vars\' );

// modify the main wordpress query
function my_date_based_event_archives() {
    // only modify the wordpress query if its event archive and
    // we have got the event-date passed through the url
    if ( is_archive( \'event\' ) && get_query_var( \'event-date\' ) ) {
        global $wp_query;
        $meta_query = array(
            \'meta_query\' => array(
                array(
                    \'key\' => \'event-date\',
                    \'value\' => get_query_var( \'event-date\' )
                )
            )
        );
        $args = array_merge( $wp_query->query, $meta_query );
        query_posts( $args );
    }
}
add_action( \'get_template_part_loop\', \'my_date_based_event_archives\' );

结束

相关推荐

Changing attachment urls?

如何更改附件页URL的格式/[post-url]/[attachment-name]/ 到/media/[attachment-name]/? 我知道我可以覆盖get_attachment_link 通过attachment_link 过滤器,但我想我需要更改重定向结构,以便WordPress知道如何处理这些URL?