Je vais essayer de résumer ce que j'essaie de réaliser. J'ai un type de message personnalisé nommé "article" et il existe également une taxonomie nommée "article_catégorie". J'ai maintenant besoin de réécrire l'URL, de supprimer complètement "item" de l'URL et de mettre "item_category" à la place de cela.
"item_category", bien sûr peut avoir des valeurs différentes comme la nourriture ou le sport, par exemple:
http: nom_site.com/item/nom_poste -> http: nom_site.com/food/nom_poste
http: sitename.com/item/post_name -> http: sitename.com/sport/post_name
Je devrais donc vérifier la taxonomie (valeur de "item_category") et remplacer le nom du type de message personnalisé ("item" dans ce cas) par cette taxonomie. Je ne peux pas enregistrer différents types d'articles ni effectuer de modifications de code plus volumineuses car le thème est installé sur le client et contient beaucoup de contenu; cette option est donc désactivée.
Est-ce possible?
Oui c'est possible. Une partie de ma question reçoit une réponse ici et le code complet est saisi ici.
J'ai une fonction plus importante qui vérifie la taxanomie (dans ce cas, les catégories personnalisées pour le type de publication personnalisé). Ensuite, nous vérifions s'il existe une taxonomie particulière et nous modifions la structure des URL.
add_filter('post_type_link', 'replace_link', 1, 3);
function replace_link( $link, $post = 0 ){
//custom post type "item"
if ( $post->post_type == 'item' ){
//registered taxonomy for custom post type "item_category"
$terms = get_the_terms( $post->ID, 'item_category' );
if ( $terms && ! is_wp_error( $terms ) ) :
$links = array();
//put all taxanomy asigned to that post into one array
foreach ( $terms as $term )
{
$links[] = $term->name;
}
$links = str_replace(' ', '-', $links);
endif;
//check if there is particular taxonomy and change URL structure
if (in_array("Food", $links)) {
return home_url('food/'. $post->post_name);
}
if (in_array("Sport", $links)) {
return home_url('sport/'. $post->post_name);
}
} else {
return $link;
}
}
Il existe maintenant deux fonctions car nous avons besoin de règles de réécriture correspondantes pour définir les vars de requête appropriés pour ces requêtes. S'il n'y avait pas ces fonctions, nous aurions 404 pages.
function custom_rewrite_rule1() {
add_rewrite_rule('food/([^/]+)/?$','index.php?item=$matches[1]','top');
}
add_action('init', 'custom_rewrite_rule1', 10, 0);
function custom_rewrite_rule2() {
add_rewrite_rule('sport/([^/]+)/?$','index.php?item=$matches[1]','top');
}
add_action('init', 'custom_rewrite_rule2', 10, 0);