Adăugarea unei valori meta în conținutul postării în WordPress în timpul save_post
Problema pare destul de simplă: Când acțiunea save_post
este declanșată, aș dori să adaug valoarea unei chei meta la sfârșitul post_content
dacă aceasta nu este deja prezentă în postare.
Am încercat să apelez wp_update_post()
dintr-o funcție legată de save_post
, dar așa cum mulți dintre voi veți obiecta imediat, wp_update_post()
conține do_action('save_post')
și astfel creează o buclă infinită.
Ce altă metodă (folosind API-ul) există pentru a actualiza conținutul unei postări pe baza valorilor sale personalizate, după ce postarea a fost salvată/editată, fără a provoca o buclă infinită îngrozitoare?
Prima soluție pe care am găsit-o este să atașez un filtru la o acțiune precum wp_insert_post_data
și să extrag alte informații despre postare din obiectul global $post
.
// Atașează filtrul nostru la acțiunea wp_insert_post_data
add_filter( 'wp_insert_post_data', 'my_appender' );
function my_appender( $content ) {
// Adu obiectul global $post în scopul funcției
global $post;
// Obține valoarea meta pentru cheia 'key_name'
$meta_value = get_post_meta( $post->ID, 'key_name', TRUE );
// Dacă valoarea nu se află în conținut, adaug-o la sfârșit
if ( stristr( $content['post_content'], $meta_value ) === FALSE )
$content['post_content'] .= $meta_value;
// Returnează conținutul filtrat
return $content;
}
Sunt sigur că această soluție poate fi îmbunătățită.
Referințe
add_filter()
- "Filtrele sunt cârlige pe care WordPress le lansează..."wp_insert_post_data
- "Un cârlig de filtru apelat de funcția wp_insert_post..."global
keyword - "Domeniul de aplicare al unei variabile este contextul în care este definită..."get_post_meta()
- "Această funcție returnează valorile câmpurilor personalizate..."stristr()
- "Găsește prima apariție a unui șir de caractere (fără diferențiere între litere mari și mici)..."

Pare rezonabil pentru mine. Presupun că modul în care implementezi verificarea ar depinde de ce valoare exactă are acel post meta.
