Tuto officiel du Codex - Exemple utile - Penser à flush les permaliens à chaque fois pour voir les changements
<?php class ArchiveFilter { public function __construct() { add_filter('query_vars', array($this, 'realisation_queryvars') ); add_action('pre_get_posts', array($this, 'realisation_pre_get_posts') ); add_action('generate_rewrite_rules', array($this, 'realisation_add_rewrite_rules') ); return true; } public function realisation_queryvars ( $qvars ) { $qvars[] = 'realisation'; // On ajoute le paramètre GET realisation à Wordpress return $qvars; } public function realisation_pre_get_posts ( $query ) { if( is_admin() ) { return; // Pas touche aux requêtes en admin } // Si la variable realisation est passée dans l'url et qu'elle a la bonne valeur, on modifie la requête if( isset($query->query_vars['realisation']) ) { if($query->query_vars['realisation'] == 'terrains-a-vendre' || $query->query_vars['realisation'] == 'realisations') { $query->set('meta_key', 'terrain_a_vendre'); $query->set('meta_value', $query->query_vars['realisation']); } } } public function realisation_add_rewrite_rules ( $wp_rewrite ) { $new_rules = array( 'terrains-a-vendre\/([^/]+)' => 'index.php?terrain-region=$matches[1]&post_type=terrains&realisation=terrains-a-vendre', 'realisations\/([^/]+)' => 'index.php?terrain-region=$matches[1]&post_type=terrains&realisation=realisations', 'terrains-a-vendre$' => 'index.php?post_type=terrains&realisation=terrains-a-vendre', 'realisations$' => 'index.php?post_type=terrains&realisation=realisations', ); // Add the new rewrite rule into the top of the global rules array $wp_rewrite->rules = $new_rules + $wp_rewrite->rules; } }
http://www.rexegg.com/regex-capture.html ⇒ il est impossible de récupérer plusieurs groupe récursivement et de les appliquer à différentes variables, le REGEX n'est pas fait pour ça. On peut les rentrer en dur ou juste récupérer un mot clé et renvoyer tout ce qui suit et le parser.
Pour faire ça :
'service-technique\/(.+)' => 'index.php?service_technique=$matches[1]', // ... $st_slug = explode( '/', $st_slug );