Ist es möglich, die Slugs nach dem Ändern der Titel des Posts programmgesteuert zu regenerieren? Zahlreiche Post-Titel wurden aktualisiert und der Slug wurde nicht mit dem Titel aktualisiert, sodass ich all diese Slugs neu generieren muss.
14
Antworten:
Ja, es ist möglich.
Beispielcode, muss getestet und verfeinert werden:
Ich habe das gerade erfunden, es gibt wahrscheinlich einige Fehler und Fehlerfälle, aber es sollte Ihnen eine Idee geben. Dies kann auch eine Weile dauern, so dass es nützlich sein kann, das Update in kleinere Teile aufzuteilen.
quelle
post_name
Argument wirdwp_update_post
zumindest in der 3.9-Version des Kerns ignoriertpost_name
in derwp_update_post()
Funktion ignoriert , wird jedoch berücksichtigt, wenn der Aktualisierungsbeitrag diewp_insert_post()
Funktion aufruft. Dies bedeutet, dass die Übergabe des neuen Slugs an das Update dazu führt, dass dieser für den zu aktualisierenden Beitrag effektiv geändert wird.Dieses Plugin erledigt auch die Aufgabe: http://www.jerrytravis.com/598/wordpress-plugin-to-generate-post-slugs
Da dies jedoch nur für Posts gilt, die noch keinen Slug haben, können Sie die folgende Zeile im Plugin bearbeiten, wenn Sie Slugs neu generieren müssen:
if ($post->post_name == "") {
Sie könnten es zum Beispiel ändern in:
if (true) {
quelle
Ich habe die von Toscho vorgeschlagene Methode ausprobiert, die "instinktiv" ist, aber in vielen Fällen funktioniert sie nicht (siehe den Kerncode, um zu verstehen, was ich unter "vielen Fällen" verstehe).
Beim Durchsuchen des Codes habe ich den
wp_insert_post_data
Filter-Hook gefunden, der von derwp_update_post
Funktion direkt vor dem Einfügen des Posts in die Datenbank aufgerufen wurde.Durch Aufrufen dieses Filters und Ändern des Werts von
$data['post_name']
konnte ich dafür sorgen, dass dies ordnungsgemäß funktioniert. Wordpress ist cool, aber so schlecht dokumentiert ...Ich habe die Dokumentation bearbeitet , damit bei Bedarf mehr Personen diese Problemumgehung finden.
quelle
Sie können dies direkt in MySQL tun, wenn Sie benötigen. (Auf unserer Woocommerce-Website finden Sie Hunderttausende von Produkten):
where post_type = 'product' - Damit bleiben Ihre Updates nur für Woocommerce-Produkte erhalten. Sie sollten herausfinden, welche Grenzen Sie für diese Abfrage einhalten möchten.
quelle