it-swarm.com.de

So geben Sie einem CPT (benutzerdefinierten Beitragstyp) eine datumsbasierte URL

Ich habe Ereignisse mit einem benutzerdefinierten Feld für das Ereignisdatum. Ich möchte eine datumsbasierte Seite erstellen, auf der alle Ereignisse für einen bestimmten Tag angezeigt werden, und ich hatte die Hoffnung, die URL zu verwenden, um dabei zu helfen.

Ich arbeite mit einem 7-Tage-Kalender und er zeigt ein "empfohlenes" Ereignis für einen bestimmten Tag. Dann möchte ich auf eine Seite verlinken, die alle Ereignisse für diesen Tag anzeigt.

Ich bin mir nicht sicher, ob dies überhaupt möglich ist, aber ich nahm an, dass die Genies in diesem Stapel es wissen würden.

5
TJ Sherrill

Angenommen, Ihr Event-Rewrite-Slug ist ein Event und Sie möchten, dass Ihre datumsbasierten URLs wie folgt aussehen: 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' );
2