Функция возвращает разные значения при вызове из 'save_post' и при загрузке страницы
Функция "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');

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

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

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

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

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

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

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

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