Funcția returnează valori diferite când este apelată din 'save_post' față de încărcarea paginii

1 nov. 2010, 20:02:25
Vizualizări: 261
Voturi: 1

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
0
Toate răspunsurile la întrebare 1
9

Probabil revizii. Verifică $post->post_type.

1 nov. 2010 20:09:28
Comentarii

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

Scott B Scott B
1 nov. 2010 20:11:34

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; }

prettyboymp prettyboymp
1 nov. 2010 20:15:38

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

Scott B Scott B
1 nov. 2010 20:27:17

@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?

sorich87 sorich87
1 nov. 2010 20:28:27

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

Scott B Scott B
1 nov. 2010 20:37:19

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.

sorich87 sorich87
1 nov. 2010 20:48:59

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

Scott B Scott B
1 nov. 2010 21:11:49

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

sorich87 sorich87
1 nov. 2010 21:16:47

Funcționează. Mulțumesc! Totuși, încă am probleme cu celelalte funcții când sunt apelate prin acest hook de salvare, voi posta mai târziu.

Scott B Scott B
1 nov. 2010 21:19:21
Arată celelalte 4 comentarii