Rescrierea slug-ului articolului înainte de salvare
Am nevoie să preiau un câmp ACF din articol și să modific slug-ul (permalink-ul) articolului înainte de a-l salva în baza de date. Care este abordarea pentru a realiza acest lucru? Am nevoie ca slug-ul să fie modificat la fiecare operațiune de creare/editare a articolului.

Următoarele informații trebuie considerate mai mult ca un concept demonstrativ decât o soluție gata de copiat/lipește.
Cu toate acestea, iată cum ai putea aborda problema:
Acțiunea save_post
action rulează de fiecare dată când un articol este actualizat sau creat. Poți conecta o funcție callback la ea folosind add_action
.
Prin urmare, cazul tău ar trebui să arate cam așa:
// conectare inițială
add_action( 'save_post', 'wpse105926_save_post_callback' );
function wpse105926_save_post_callback( $post_id ) {
// verifică dacă postarea nu este o revizie
if ( ! wp_is_post_revision( $post_id ) ) {
// deconectează această funcție pentru a preveni bucla infinită
remove_action( 'save_post', 'wpse105926_save_post_callback' );
// actualizează slug-ul postării
wp_update_post( array(
'ID' => $post_id,
'post_name' => 'un-nou-slug' // faci modificarea ta aici
));
// reconectează această funcție
add_action( 'save_post', 'wpse105926_save_post_callback' );
}
}
Ceea ce poate fi puțin confuz în exemplul de mai sus este deconectarea și reconectarea funcției din interiorul ei. Acest lucru este necesar deoarece apelăm wp_update_post
pentru a actualiza slug-ul, ceea ce la rândul său va declanșa rularea acțiunii save_post
din nou.
Ca o observație suplimentară, dacă dorești ca WordPress să genereze automat noul slug pe baza titlului postării, pur și simplu treci un șir gol:
wp_update_post( array(
'ID' => $post_id,
'post_name' => '' // slug-ul va fi generat de WP pe baza titlului postării
));

întrebarea se referă la ACF, mai exact la "preluarea" câmpului (valorii) iar conceptul tău funcționează în php și tocmai ce ai comentat ca "do your thing here" lipsește. Poți să arunci și o dovadă de concept pentru preluare? (ține minte că câmpul #postname nu există până când butonul "edit" (permalink) este apăsat. La fel și cu câmpul invizibil #new-post-slug)

Am avut nevoie de același lucru, dar doar pentru crearea de articole.
Am implementat soluția de aici (aceasta este gata de copiat/lipește).
Doar elimină linia care verifică dacă ambele date sunt egale, și va actualiza slug-ul și pentru operațiunile de editare. Totuși, nu recomand acest lucru deoarece va schimba URL-ul articolului, iar acest lucru nu este bun pentru SEO, printre alte probleme precum legătruile stricate (404).
