CPT, Metadaten, URL-Parameter

könnte jemand mir einen Vortrag zeigen, der mir erklären könnte, wie man einen “Filter” erstellt, der von einem hübschen Link passiert wurde?

Lassen Sie mich erklären, ich habe einen benutzerdefinierten Post-Typ namens “Spektakel” und ich habe einen Meta-Schlüssel, der eine Reihe von Daten für dieses Spektakel enthält. Ich weiß, wie man mein Datum extrahiert und sie filtert, wenn ich explizit einen Filter für meine Anzeige gebe, mein Problem kommt nicht von dort, was ich versuche zu erreichen, ist der Zugriff

http://myurl.com/spectacles (Show bevorstehende Spektakel – bereits getan ) http://myurl.com/spectacles/2014 (zeige alle 2014 Spektakel) http://myurl.com/spectacles/2014/01 (alle anzeigen Spektakel ab Januar 2014) http://myurl.com/spectacles/2014/01/01 (zeige alle Spektakel ab dem 1. Januar 2014) http://myurl.com/spectacle/name-of-the-spectacle (zeige dieses Spektakel – schon erledigt

Alles, was ich tun muss, ist eine Möglichkeit, diese Permalink zu aktivieren und diese Parameter zu extrahieren, als ich in der Lage bin zu tun, was ich will, ich habe bereits meine Filterfunktionen.

Das habe ich bisher gemacht:

// Register Custom Post Type function build_cpt() { $labels = array( 'name' => _x( 'Programmation', 'Post Type General Name', 'mlog_lang' ), 'singular_name' => _x( 'Spectacles', 'Post Type Singular Name', 'mlog_lang' ), 'menu_name' => __( 'Programmation', 'mlog_lang' ), 'all_items' => __( 'Tous les spectacles', 'mlog_lang' ), 'view_item' => __( 'Afficher ce spectacle', 'mlog_lang' ), 'add_new_item' => __( 'Ajouter un spectacle', 'mlog_lang' ), 'add_new' => __( 'Ajouter un spectacle', 'mlog_lang' ), 'edit_item' => __( 'Modifier un spectacle', 'mlog_lang' ), 'update_item' => __( 'Mettre à jour ce spectacle', 'mlog_lang' ), 'search_items' => __( 'Rechercher un spectacle', 'mlog_lang' ), 'not_found' => __( 'Aucun spectacle trouvé', 'mlog_lang' ), 'not_found_in_trash' => __( 'Aucun spectacle dans la corbeille', 'mlog_lang' ), ); add_rewrite_tag( '%event-year%', '(\d{4})' ); //add_rewrite_tag( '%event-month%', '(\d{2})' ); //add_rewrite_tag( '%event-day%', '(\d{2}|\d{1})' ); $rewrite = array( //'slug' => 'spectacles/%event-year%/%event-month%/%event-day%/', 'slug' => 'spectacles/%event-year%/', 'with_front' => true, 'pages' => true, 'feeds' => true, ); $args = array( 'label' => __( 'programmation', 'mlog_lang' ), 'description' => __( 'Liste des spectacles', 'mlog_lang' ), 'labels' => $labels, 'supports' => array( 'title', 'editor', 'revisions' ), 'taxonomies' => array(), 'hierarchical' => false, 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'show_in_nav_menus' => false, 'show_in_admin_bar' => false, 'menu_position' => 4, 'menu_icon' => 'dashicons-groups', 'can_export' => true, 'has_archive' => true, 'exclude_from_search' => false, 'publicly_queryable' => true, 'rewrite' => $rewrite, 'capability_type' => 'page', ); register_post_type( 'programmation', $args ); 

Jetzt kann ich zugreifen:

http://myurl.com/spectacles/2014

aber es zeigt die Homepage anstelle von archive-programmation.php

Und ich kann nicht zugreifen:

http://myurl.com/spectacles/name-of-the-spectacle

Solutions Collecting From Web of "CPT, Metadaten, URL-Parameter"

Die gute Antwort war von @Milo, aber er hat keinen Code gepostet, also poste ich hier mein Ergebnis, für Leute, die hierher kommen, um die richtige Antwort zu bekommen.

 /* Add query var to authorized query var... */ add_filter( 'query_vars', 'add_spectacles_query_vars' ); function add_spectacles_query_vars( $query_vars ) { $query_vars[] = 'spectacles-year'; $query_vars[] = 'spectacles-month'; $query_vars[] = 'spectacles-day'; return $query_vars; } /* Add rewrite rule */ add_action( 'init', 'add_spectacles_rewrite_rule' ); function add_spectacles_rewrite_rule() { add_rewrite_rule( 'spectacles\/(on){1}\/{1}(\d{4})+\/?(\d{2})?\/?(\d{2}|d{1})?', 'index.php?post_type=programmation&spectacles-year=$matches[2]&spectacles-month=$matches[3]&spectacles-day=$matches[4]', 'top' ); //flush_rewrite_rules(); } 

Dann kann ich in meiner Vorlage mitgehen

 $spectacle_year = get_query_var('spectacles-year'); $spectacle_month = get_query_var('spectacles-month'); $spectacle_day = get_query_var('spectacles-day'); 

PS Ich filtere meine Brille direkt auf der Archivseite, aber es könnte gemacht werden über:

 add_action( 'pre_get_posts', 'spectacles_archvies_pre_get_posts', 11 ); function spectacles_archvies_pre_get_posts($query) { if( !empty($query->query_vars['spectacles-year']) ) { /* Do your stuff here... */ } }