Riscrittura dello slug del post prima del salvataggio
Ho bisogno di recuperare un campo ACF all'interno del post e modificare lo slug (permalink) del post prima di salvarlo nel database. Qual è l'approccio per ottenere questo? Ho bisogno che lo slug venga modificato ad ogni operazione di creazione/modifica del post.

Quanto segue va considerato più come una prova di concetto piuttosto che una soluzione pronta per il copia/incolla.
Detto questo, ecco come potresti procedere:
L'save_post
azione viene eseguita ogni volta che un articolo viene aggiornato o creato. Puoi agganciare una funzione di callback utilizzando add_action
.
Quindi, il tuo caso dovrebbe essere simile a questo:
// hook iniziale
add_action( 'save_post', 'wpse105926_save_post_callback' );
function wpse105926_save_post_callback( $post_id ) {
// verifica che l'articolo non sia una revisione
if ( ! wp_is_post_revision( $post_id ) ) {
// scollega questa funzione per evitare un loop infinito
remove_action( 'save_post', 'wpse105926_save_post_callback' );
// aggiorna lo slug dell'articolo
wp_update_post( array(
'ID' => $post_id,
'post_name' => 'some-new-slug' // fai qui la tua modifica
));
// riaggancia questa funzione
add_action( 'save_post', 'wpse105926_save_post_callback' );
}
}
Ciò che potrebbe risultare un po' confuso nel codice sopra è lo scollegamento e il riaggancio della funzione al suo interno. Questo è necessario, poiché chiamiamo wp_update_post
per aggiornare lo slug, il quale a sua volta triggererà nuovamente l'azione save_post
.
Come nota a margine, se vuoi che WP generi automaticamente il nuovo slug basandosi sul titolo dell'articolo, passa semplicemente una stringa vuota:
wp_update_post( array(
'ID' => $post_id,
'post_name' => '' // lo slug sarà generato da WP basandosi sul titolo dell'articolo
));

La domanda si riferisce ad ACF, in particolare al "recupero" del campo (valore) e il tuo concetto funziona in php ma manca ESATTAMENTE ciò che hai commentato come "fai la tua cosa qui". Puoi fornire anche una prova di concetto per il recupero? (ricorda che il campo #postname non è nemmeno presente finché non viene cliccato il pulsante "modifica" (permalink). Lo stesso vale per il campo invisibile #new-post-slug)

Mi serviva la stessa cosa ma solo per la creazione dei post.
Ho implementato la soluzione qui (questa è pronta per il copia/incolla).
Basta rimuovere la riga che verifica che entrambe le date siano uguali, e aggiornerà lo slug anche per le operazioni di modifica. Tuttavia, non lo consiglio poiché cambierà l'URL del post e questo non è buono per la SEO, oltre ad altri problemi come link interrotti (404).
