Функция возвращает разные значения при вызове из 'save_post' и при загрузке страницы

1 нояб. 2010 г., 20:02:25
Просмотры: 261
Голосов: 1

Функция "word_count" ниже возвращает разные значения в зависимости от того, откуда она вызывается. Почему?

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); //возвращает "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; //всегда возвращает "1"
    }
}

register_activation_hook(__FILE__, 'myPlugin');
0
Все ответы на вопрос 1
9

Возможно, ревизии. Проверьте $post->post_type.

1 нояб. 2010 г. 20:09:28
Комментарии

Бинго. Echo $post->post_type = "revision". В чем решение? Как я могу передать оригинальный объект записи в функцию?

Scott B Scott B
1 нояб. 2010 г. 20:11:34

Вам следует проверять тип записи при использовании действия save_post, добавив: if(wp_is_post_autosave($post_id) || wp_is_post_revision($post_id)) { return $post_id; }

prettyboymp prettyboymp
1 нояб. 2010 г. 20:15:38

Спасибо за помощь. Я обновил свой вопрос с исправленным кодом, но до сих пор получаю некорректное значение из функции.

Scott B Scott B
1 нояб. 2010 г. 20:27:17

@Scott B: почему бы просто не передать post_content в вашу функцию подсчета слов word_count($post->post_content); вместо использования global $text?

sorich87 sorich87
1 нояб. 2010 г. 20:28:27

@sorich, это действительно работает. Я просто подумал, что вызывать её каждый раз будет слишком затратно по сравнению с хранением в глобальной переменной.

Scott B Scott B
1 нояб. 2010 г. 20:37:19

Рад, что теперь всё работает. Решает ли этот код ваш предыдущий вопрос: http://wordpress.stackexchange.com/questions/3514/how-to-capture-word-count-from-the-post-object-inside-of-editor? Если да, возможно, стоит опубликовать его там, чтобы вопрос не оставался без решения.

sorich87 sorich87
1 нояб. 2010 г. 20:48:59

@sorich, у меня всё ещё остаётся проблема, что $post->ID возвращает ID ревизии, а не ID оригинальной записи.

Scott B Scott B
1 нояб. 2010 г. 21:11:49

Попробуй использовать $post = get_post($post_ID);, как ранее указывал @Denis.

sorich87 sorich87
1 нояб. 2010 г. 21:16:47

Это работает. Спасибо! У меня всё ещё есть проблемы с другими функциями при вызове через этот хук сохранения, я напишу о них позже.

Scott B Scott B
1 нояб. 2010 г. 21:19:21
Показать остальные 4 комментариев