est-il possible de régénérer les slugs par programmation après avoir changé les titres de l'article? De nombreux titres de publication ont été mis à jour et le slug n'a pas été mis à jour avec le titre, j'ai donc besoin de régénérer tous ces slugs.
14
Réponses:
Oui c'est possible.
Un exemple de code doit être testé et affiné:
Je viens de l'inventer, il y a probablement des erreurs et des cas egde, mais cela devrait vous donner une idée. En outre, cela peut prendre un certain temps, il pourrait donc être utile de diviser la mise à jour en petits morceaux.
la source
post_name
argument est ignoré par lewp_update_post
, au moins dans la version 3.9 du noyaupost_name
est ignoré dans lawp_update_post()
fonction, mais il est pris en compte lorsque la publication de mise à jour appelle lawp_insert_post()
fonction: cela signifie que le passage du nouveau slug à la mise à jour entraînera une modification efficace pour la publication en cours de mise à jour.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 devez régénérer des slugs, modifiez la ligne suivante dans le plugin:
if ($post->post_name == "") {
par exemple, vous pouvez le changer en:
if (true) {
la source
J'essayais la méthode suggérée par Toscho, qui est "l'instinctive", mais dans de nombreux cas cela ne fonctionne pas (cf. le code de base pour obtenir ce que j'entends par "beaucoup de cas").
En cherchant dans le code, j'ai trouvé le
wp_insert_post_data
crochet du filtre, appelé par lawp_update_post
fonction juste avant d'insérer le post iunto dans la base de données.En appelant ce filtre et en modifiant la valeur de
$data['post_name']
, j'ai pu obtenir que cela fonctionne correctement. Wordpress est cool mais tellement mal documenté ...J'ai édité la documentation , afin que plus de personnes puissent trouver cette solution si nécessaire.
la source
vous pouvez le faire directement dans mysql si vous en avez besoin. (notre site woocommerce a des centaines de milliers de produits):
où post_type = 'product' - qui gardera votre mise à jour uniquement pour les produits de woocommerce; vous devez déterminer les limites que vous souhaitez conserver sur cette requête.
la source