La funzione restituisce un valore diverso quando chiamata da 'save_post' rispetto al caricamento della pagina

1 nov 2010, 20:02:25
Visualizzazioni: 261
Voti: 1

La funzione "word_count" qui sotto restituisce valori diversi a seconda di dove viene chiamata. Perché?

add_action('save_post', 'my_custom_save', 10, 2);

function myPlugin($post)
{
    global $rockScore;
    global $text;
    $text = strip_tags($post->post_content);
    echo word_count($post); //restituisce "350"
}

function word_count($post)
{
    global $text;
    $word_count = explode(' ', $text);
    $word_count = count($word_count);
    return $word_count;
}

function my_custom_save($postID, $post){
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return $postID;
    }
    else
    {
        if($parent_id = wp_is_post_revision($postID))
        {
            $postID = $parent_id;
        }
        echo word_count($post);die; //continua a restituire "1"
    }
}

register_activation_hook(__FILE__, 'myPlugin');
0
Tutte le risposte alla domanda 1
9

Probabilmente revisioni. Controlla $post->post_type.

1 nov 2010 20:09:28
Commenti

Esatto. Echo $post->post_type = "revision". Qual è la soluzione? Come posso passare l'oggetto post originale alla funzione?

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

Dovresti verificare il tipo di post quando usi l'azione save_post aggiungendo if(wp_is_post_autosave($post_id) || wp_is_post_revision($post_id)) { return $post_id; }

prettyboymp prettyboymp
1 nov 2010 20:15:38

Grazie per l'aiuto. Ho rivisto la mia domanda con il codice aggiornato, ma continuo a ottenere un valore errato dalla funzione.

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

@Scott B: perché non passi semplicemente il post_content alla tua funzione di conteggio parole word_count($post->post_content); invece di usare un global $text?

sorich87 sorich87
1 nov 2010 20:28:27

@sorich, in effetti funziona. Pensavo solo che fosse troppo costoso chiamarla ogni volta rispetto a memorizzarla in una variabile globale.

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

Felice che ora funzioni. Questo codice risolve la tua domanda precedente: http://wordpress.stackexchange.com/questions/3514/how-to-capture-word-count-from-the-post-object-inside-of-editor? Se sì, potresti pubblicarlo lì in modo che la domanda non rimanga senza risposta.

sorich87 sorich87
1 nov 2010 20:48:59

@sorich, ho ancora il problema che $post->ID restituisce l'ID della revisione invece dell'ID originale del post.

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

Prova a usare $post = get_post($post_ID); come aveva suggerito @Denis.

sorich87 sorich87
1 nov 2010 21:16:47

Funziona. Grazie! Ho ancora problemi con le altre funzioni quando vengono chiamate tramite questo hook di salvataggio, ne parlerò più tardi.

Scott B Scott B
1 nov 2010 21:19:21
Mostra i restanti 4 commenti