est-il possible de régénérer les slugs par programmation après avoir changé les titres de la publication? De nombreux titres d'articles ont été mis à jour et le slug n'a pas été mis à jour avec le titre, je dois donc régénérer tous ces slug.
Oui c'est possible.
Exemple de code, doit être testé et amélioré:
// get all posts
$posts = get_posts( array ( 'numberposts' => -1 ) );
foreach ( $posts as $post )
{
// check the slug and run an update if necessary
$new_slug = sanitize_title( $post->post_title );
if ( $post->post_name != $new_slug )
{
wp_update_post(
array (
'ID' => $post->ID,
'post_name' => $new_slug
)
);
}
}
Je viens d'inventer cela, il y a probablement des erreurs et des cas, mais cela devrait vous donner une idée. En outre, cela peut prendre un certain temps, il peut donc être utile de scinder la mise à jour en morceaux plus petits.
Ce plugin fait également le travail: http://www.jerrytravis.com/598/wordpress-plugin-to-generate-post-slugs
Cependant, comme il ne le fait que pour les publications qui n'ont pas encore de slug, si vous avez besoin de régénérer des slugs, éditez la ligne suivante dans le plugin:
if ($post->post_name == "") {
par exemple, vous pouvez le changer en:
if (true) {
J'essayais la méthode suggérée par Toscho, qui est la "méthode instinctive", mais dans de nombreux cas, cela ne fonctionne pas (voir le code principal pour obtenir ce que je veux dire par "beaucoup de cas").
En cherchant dans le code, j'ai trouvé le crochet de filtre wp_insert_post_data
, appelé par la fonction wp_update_post
juste avant l'insertion de la publication dans la base de données.
En appelant ce filtre et en modifiant la valeur de $data['post_name']
, j'ai pu le faire fonctionner correctement. Wordpress est cool mais tellement mal documenté ...
J'ai édité la documentation , afin que davantage de personnes puissent trouver cette solution de contournement si nécessaire.