Oui, cela est possible, mais si le plugin crée un type de publication personnalisé à l'aide du rewrite => array('slug' => 'post_type')
paramètre, il est peu probable que vous puissiez remplacer le slug.
Chaque fois que des types de publication personnalisés sont créés, les règles de réécriture d'URL sont écrites dans la base de données. En fonction de l'action qui déclenche la création du type de publication personnalisé (telle que l' action init ), WordPress videra les règles de réécriture et restaurera les limaces du type de publication personnalisé quelles que soient les modifications que vous tentez d'apporter.
Cela dit, vous pouvez fournir des slugs personnalisés pour les types de publication personnalisés. L'exemple suivant suppose que vous avez un type de publication personnalisé de movies
et que vous essayez de changer le /movies/
slug en /films/
.
Pour être complet, voici la fonction de base utilisée pour définir le movies
type de publication personnalisé. Le plugin auquel vous faites référence devrait faire quelque chose comme ceci:
function movies_register_post_type() {
register_post_type(
'movies',
array(
'labels' => array(
'name' => __('Movies'),
'singular_name' => __('Movie')
),
'public' => true,
'has_archive' => true,
'rewrite' => array(
'slug' => 'movies'
)
)
);
} // end example_register_post_type
add_action('init', 'movies_register_post_type');
Vous pouvez modifier le tableau des options en fournissant vos propres règles personnalisées en fonction du type de publication existant.
Fondamentalement, nous ferons ceci:
- Prenez l'ensemble de règles existant, puis écrivez le nôtre avec nos propres slugs personnalisés
- Donnez à la nouvelle règle une priorité plus élevée que le slug du type de publication personnalisé
Voici comment procéder:
function add_custom_rewrite_rule() {
// First, try to load up the rewrite rules. We do this just in case
// the default permalink structure is being used.
if( ($current_rules = get_option('rewrite_rules')) ) {
// Next, iterate through each custom rule adding a new rule
// that replaces 'movies' with 'films' and give it a higher
// priority than the existing rule.
foreach($current_rules as $key => $val) {
if(strpos($key, 'movies') !== false) {
add_rewrite_rule(str_ireplace('movies', 'films', $key), $val, 'top');
} // end if
} // end foreach
} // end if/else
// ...and we flush the rules
flush_rewrite_rules();
} // end add_custom_rewrite_rule
add_action('init', 'add_custom_rewrite_rule');
Maintenant, vous aurez deux façons d'accéder à vos films:
/movies/Back-To-The-Future
/films/Back-To-The-Future
Notez que je ne recommande pas d'accrocher le add_custom_rewrite_rule
dans l' init
action car il se déclenchera trop fréquemment. C'est juste un exemple. Un meilleur endroit pour appliquer la fonction serait l'activation du thème, l'activation du plugin, peut-être l'action save_post, etc.
À ce stade, vous souhaiterez peut-être envisager de mettre à jour les permaliens pour le type de publication personnalisé afin d'utiliser le /movies/
slug. Par exemple, si vous accédez à /films/
, vous verrez une liste de tous vos films, mais le survol du titre révélera que le /movies/
slug est toujours utilisé.
Pour aller plus loin, vous pouvez techniquement créer une redirection 301 pour intercepter tous les liens /movies/
vers la redirection vers leur /films/
homologue, mais tout dépend de ce que vous essayez de faire.