Funcția returnează valori diferite când este apelată din 'save_post' față de încărcarea paginii
Funcția "word_count" de mai jos returnează valori diferite în funcție de locul de unde este apelată. De ce?
add_action('save_post', 'my_custom_save', 10, 2);
function myPlugin($post)
{
global $rockScore;
global $text;
$text = strip_tags($post->post_content); // Elimină tagurile HTML din conținutul postării
echo word_count($post); //returnează "350"
}
function word_count($post)
{
global $text;
$word_count = explode(' ', $text); // Desparte textul în cuvinte folosind spațiul ca delimitator
$word_count = count($word_count); // Numără cuvintele
return $word_count;
}
function my_custom_save($postID, $post){
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return $postID; // Returnează ID-ul postării dacă este salvare automată
}
else
{
if($parent_id = wp_is_post_revision($postID))
{
$postID = $parent_id; // Obține ID-ul original dacă este o revizie
}
echo word_count($post);die; //returnează tot "1"
}
}
register_activation_hook(__FILE__, 'myPlugin'); // Înregistrează funcția la activarea plugin-ului

Exact. Echo $post->post_type = "revision". Care este soluția? Cum pot transmite obiectul postării originale către funcție?

Ar trebui să verifici tipul postării când folosești acțiunea save_post prin adăugarea if(wp_is_post_autosave($post_id) || wp_is_post_revision($post_id)) { return $post_id; }

Mulțumesc pentru ajutor. Am actualizat întrebarea mea cu codul modificat, dar încă primesc o valoare incorectă de la funcție.

@Scott B: de ce nu transmiți pur și simplu post_content la funcția ta de numărare a cuvintelor word_count($post->post_content);
în loc să folosești un global $text
?

@sorich, asta funcționează. M-am gândit doar că este prea costisitor să o apelezi de fiecare dată în loc să o stochezi în global.

Mă bucur că acum funcționează. Acel cod rezolvă întrebarea ta anterioară: http://wordpress.stackexchange.com/questions/3514/how-to-capture-word-count-from-the-post-object-inside-of-editor? Dacă da, poți dori să o postezi acolo, astfel încât întrebarea să nu rămână fără răspuns.

@sorich, încă am problema că $post->ID returnează ID-ul revizuirii în loc de ID-ul postării originale.

Încearcă să folosești $post = get_post($post_ID);
cum a menționat @Denis anterior.
