Función devuelve valor diferente cuando se llama desde 'save_post' que al cargar la página

1 nov 2010, 20:02:25
Vistas: 261
Votos: 1

La función "word_count" mostrada abajo devuelve valores diferentes dependiendo de dónde se llame. ¿Por qué ocurre esto?

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); //devuelve "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; //siempre devuelve "1"
    }
}

register_activation_hook(__FILE__, 'myPlugin');
0
Todas las respuestas a la pregunta 1
9

Probablemente revisiones. Verifica $post->post_type.

1 nov 2010 20:09:28
Comentarios

Bingo. Echo $post->post_type = "revision". ¿Cuál es la solución? ¿Cómo puedo pasar el objeto post original a la función?

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

Deberías verificar el tipo de post cuando uses la acción save_post añadiendo: if(wp_is_post_autosave($post_id) || wp_is_post_revision($post_id)) { return $post_id; }

prettyboymp prettyboymp
1 nov 2010 20:15:38

Gracias por la ayuda. He revisado mi pregunta con el código actualizado, pero sigo obteniendo un valor incorrecto de la función.

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

@Scott B: ¿por qué no pasas directamente el post_content a tu función de conteo de palabras word_count($post->post_content); en lugar de usar un global $text?

sorich87 sorich87
1 nov 2010 20:28:27

@sorich, eso funciona. Solo pensé que sería demasiado costoso llamarlo cada vez en comparación con almacenarlo en global.

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

Me alegro de que ahora funcione. ¿Ese código resuelve tu pregunta anterior: http://wordpress.stackexchange.com/questions/3514/how-to-capture-word-count-from-the-post-object-inside-of-editor? Si es así, quizá quieras publicarlo allí para que la pregunta no quede sin resolver.

sorich87 sorich87
1 nov 2010 20:48:59

@sorich, todavía tengo el problema de que $post->ID devuelve el ID de la revisión en lugar del ID de la publicación original.

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

Prueba usando $post = get_post($post_ID); como @Denis mencionó anteriormente.

sorich87 sorich87
1 nov 2010 21:16:47

Eso funciona. ¡Gracias! Todavía tengo problemas con mis otras funciones cuando se llaman a través de este hook de guardado, los publicaré más tarde.

Scott B Scott B
1 nov 2010 21:19:21
Mostrar los 4 comentarios restantes