Adăugarea unei valori meta în conținutul postării în WordPress în timpul save_post

8 ian. 2011, 05:12:02
Vizualizări: 1.8K
Voturi: 2

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?

2
Comentarii

Ai încercat să utilizezi filtrul wp_insert_post_data? (În ciuda numelui, acesta rulează atât la inserare cât și la actualizare.)

BoltClock BoltClock
8 ian. 2011 05:25:22

@BoltClock Aceasta era calea pe care am început-o imediat după ce am postat întrebarea - am dat peste un exemplu funcțional care fără îndoială ar putea fi îmbunătățit. Îl voi împărtăși mai jos.

Sampson Sampson
8 ian. 2011 07:17:32
Toate răspunsurile la întrebare 1
2

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

  1. add_filter() - "Filtrele sunt cârlige pe care WordPress le lansează..."
  2. wp_insert_post_data - "Un cârlig de filtru apelat de funcția wp_insert_post..."
  3. global keyword - "Domeniul de aplicare al unei variabile este contextul în care este definită..."
  4. get_post_meta() - "Această funcție returnează valorile câmpurilor personalizate..."
  5. stristr() - "Găsește prima apariție a unui șir de caractere (fără diferențiere între litere mari și mici)..."
8 ian. 2011 07:25:44
Comentarii

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

BoltClock BoltClock
8 ian. 2011 07:40:33

@BoltClock Corect. Am păstrat intenționat acest exemplu cât mai simplu. Versiunea mea de producție are toate verificările și echilibrările necesare implementate.

Sampson Sampson
8 ian. 2011 07:42:58