add_rewrite_rule ne produisant rien dans $ _GET

4

Essayer de créer de jolis permaliens pour un plug-in affichant des événements

J'ai ceci:

function my_add_rewrite_rules() {

  global $wpdb;
  $org_options = get_option('event_settings');      
  // get id for events page     
  $event_page_id = $org_options['event_page_id'];   

  $SQL = 'SELECT post_name  FROM wp_posts WHERE ID = %d';
  $event_page = $wpdb->get_var( $wpdb->prepare( $SQL, $event_page_id ));

  add_rewrite_rule( $event_page . '/([^/]+)?/$', 'index.php?pagename=' . $event_page . '&event_slug=$matches[1]', 'top' );
  add_rewrite_rule( $event_page . '/([^/]+)?$', 'index.php?pagename=' . $event_page . '&event_slug=$matches[1]', 'top' ); 

}
add_action( 'init', 'my_add_rewrite_rules' );

et ceci:

function add_query_vars( $query_vars ) {
  $query_vars[] = 'event_slug';
  return $query_vars;
}
add_filter( 'query_vars', 'add_query_vars' );   

les règles de réécriture sont vidées dans l'administrateur lorsque les options "event_settings" sont mises à jour.

J'utilise un plugin incroyable de Jan Fabry appelé "Monkeyman Rewrite Analyzer" qui peut vous montrer comment vos règles de réécriture sont traitées (vérifiez-le, c'est génial).

Voici les résultats de ce qui précède:

Test URL
    http://localhost/events/some-event

Pattern
    events/([^/]+)?$    

Substitution 
    pagename: events
    event_slug: some-event

semble également fonctionner avec une barre oblique supplémentaire:

Test URL
    http://localhost/events/some-event/

Pattern
    events/([^/]+)?/$   

Substitution 
    pagename: events
    event_slug: some-event

Ces résultats semblent fonctionner correctement, mais lorsque je saisis "http: // localhost / events / some-event" dans mon navigateur, la redirection n’est pas effectuée correctement.

Les tableaux $ _GET et $ _REQUEST résultants sont vides.

Qu'est-ce que je fais mal ???

Toute aide est grandement appréciée, mais les réponses correctes seront appréciées davantage; )

Merci

    
posée Brent Christensen 01.02.2012 - 21:32

1 réponse

5

Vous pouvez utiliser la fonction get_query_var() .

Comme si:

$event_slug = get_query_var('event_slug');

Plus d'infos du Codex .

    
réponse donnée Rob Vermeer 01.02.2012 - 21:40

Lire d'autres questions sur les étiquettes