URL pages WordPress utilisant catégories et sous catégories
Pour des raisons de référencement, il est important de soigner les URLS de ses pages catégories. Par exemple si les pages catégories doivent être référencées sur des zones géographiques et le nom de la catégorie, il faut que l’URL soit construite comme /zone-geographique/categorie. Zone-geographique et categorie étant des taxonomie personnalisées.
Définition d’une règle de réécriture
Nous allons dans un premier temps définir une règle de ré-écriture d’URL dans WordPress.
function custom_rewrite_rules() {
flush_rewrite_rules();
add_rewrite_rule(
'^prefixe/([^/]*)/([^/]*)?',
'index.php?zone-geographique=$matches[1]&categorie=$matches[2]',
'top'
);
add_rewrite_tag('%zone-geographique%','([^&]+)');
}
add_action('init', 'custom_rewrite_rules');
Cette fonction déclare à WordPress l’ajout d’une URL de type :
www.mon-domaine.com/prefixe/zone-geographique/categorie
et permet aussi de déclarer le paramètre zone-geogrpahique pour pouvoir le réutiliser dans les template.
Modification de la wp_query pour récupérer les posts
Dans le template PHP associé à l’URL, qui devrait être le template correspondant à la taxonomie categorie (donc soit taxonomie.php soit taxonomie-categorie.php, on peut maintenant récupérer la catégorie, qui est renvoyé par la fonction get_queried_object(), et la zone-geographique qui est renvoyé par get_query_var(‘zone-geographique‘). Il faut alors modifier la tax_query pour récupérer les posts associé :
$args = array(
'post_type' => 'custom-post-type',
'tax_query' => array(
'relation' => 'AND',
array (
'taxonomy' => 'zone-geographique',
'field' => 'slug',
'terms' => $around, // single post title corresponds with term
),
array(
'taxonomy' => 'categorie',
'field' => 'id',
'terms' => get_queried_object()->term_id,
)
),
);