J'ai des catégories telles que:
/europe/postname
/usa/postname
Pour différentes raisons, je voudrais réécrire ces mots pour être:
/news/view/postname
J'ai essayé quelques plugins de ré-acheminement mais je n'ai pas eu de succès. Est-ce possible?
Cela peut être fait en écrivant un code sur le filtre post_link
. Ce filtre vous permet de changer le lien de publication final.
Puisque vous affichez des catégories dans votre lien permanent, je suppose donc que votre structure de lien permanent contient %category%
.
Le code ci-dessous vous aidera à obtenir des liens comme vous le souhaitez.
add_filter( 'post_link', 'wdm_change_category_permalink_structure', 10, 3 );
function wdm_change_category_permalink_structure( $post_link, $post, $leavename ) {
$array_of_cats_to_be_replaced = array( 'europe', 'usa' ); //array of category slugs. Add more slugs here
$get_permalink_structure = get_option( 'permalink_structure' );
if ( strpos( $get_permalink_structure, '%category%' ) !== false ) {
$cats = get_the_category( $post->ID ); //get categories assocaited with the post
if ( $cats ) {
usort( $cats, '_usort_terms_by_ID' ); // order by ID
$category_object = get_term( $cats[0], 'category' ); //Take first category
$category = $category_object->slug; //Get slug of category
if ( in_array( $category, $array_of_cats_to_be_replaced ) ) { //If category we want is in the array
$rewritecode = array(
'%year%',
'%monthnum%',
'%day%',
'%hour%',
'%minute%',
'%second%',
$leavename ? '' : '%postname%',
'%post_id%',
'%category%',
'%author%',
$leavename ? '' : '%pagename%',
);
$rewritereplace = array(
$date[0],
$date[1],
$date[2],
$date[3],
$date[4],
$date[5],
$post->post_name,
$post->ID,
'news/view', //Replace category with news/view
$author,
$post->post_name,
);
$post_link = home_url( str_replace( $rewritecode, $rewritereplace, $get_permalink_structure ) );
$post_link = user_trailingslashit( $post_link, 'single' );
}
}
}
return $post_link;
}
J'espère que ça aide :)