Riscrittura dello slug del post prima del salvataggio

10 lug 2013, 09:50:41
Visualizzazioni: 26.7K
Voti: 12

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.

0
Tutte le risposte alla domanda 2
3
26

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
));
10 lug 2013 11:46:23
Commenti

grazie per il concetto, mi ha aiutato a capire meglio il processo

Vit Kos Vit Kos
10 lug 2013 13:31:43

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)

sergio sergio
9 lug 2015 09:54:00

Non potrei farlo anche usando il filtro wp_insert_post_data, che viene eseguito dopo la sanificazione, proprio prima del salvataggio? Qual è il vantaggio principale di questo metodo.

toni_lehtimaki toni_lehtimaki
3 set 2017 12:22:33
0

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).

11 feb 2016 01:15:37