Das Folgende ist eher als Proof of Concept zu verstehen als als eine Lösung zum Kopieren / Einfügen.
Davon abgesehen würden Sie so vorgehen:
Die Aktion wird immer dann ausgeführt, wenn ein Beitrag aktualisiert oder erstellt wird. Sie können eine Rückruffunktion mit anhängen .save_post
add_action
Daher müsste Ihr Fall ungefähr so aussehen:
// initial hook
add_action( 'save_post', 'wpse105926_save_post_callback' );
function wpse105926_save_post_callback( $post_id ) {
// verify post is not a revision
if ( ! wp_is_post_revision( $post_id ) ) {
// unhook this function to prevent infinite looping
remove_action( 'save_post', 'wpse105926_save_post_callback' );
// update the post slug
wp_update_post( array(
'ID' => $post_id,
'post_name' => 'some-new-slug' // do your thing here
));
// re-hook this function
add_action( 'save_post', 'wpse105926_save_post_callback' );
}
}
Was oben etwas verwirrend sein könnte, ist das Auf- und Abhängen der Funktion von innen. Dies ist erforderlich, da wir aufrufen wp_update_post
, um den Slug zu aktualisieren, wodurch die save_post
Aktion erneut ausgeführt wird.
Wenn WP den neuen Slug automatisch basierend auf dem Post-Titel generieren soll, übergeben Sie einfach eine leere Zeichenfolge:
wp_update_post( array(
'ID' => $post_id,
'post_name' => '' // slug will be generated by WP based on post title
));
wp_insert_post_data
Filter verwende, der nach dem Desinfizieren direkt vor dem Speichern ausgeführt wird? Was ist der größte Vorteil dieser Methode.Ich brauchte das gleiche, außer dass es nur für die Post-Erstellung war.
Ich habe die Lösung hier implementiert (diese ist kopier- / einfügefertig 😉).
Entfernen Sie einfach die Zeile, in der überprüft wird, ob beide Daten gleich sind, und der Slug wird auch für Bearbeitungsvorgänge aktualisiert. Ich empfehle dies jedoch nicht, da dadurch die URL des Beitrags geändert wird und dies nicht gut für die Suchmaschinenoptimierung ist, unter anderem für defekte Links (404).
quelle