Невозможно получить контент из $post при первой публикации


Я пытаюсь получить заголовок и содержимое из глобальной переменной $post, когда пользователь публикует новое сообщение (для отправки во внешнюю веб-службу, которая, в свою очередь, должна передавать дополнительные данные для добавления в сообщение).

Крючки, которые я пытался использовать до сих пор ('transition_post_status' и 'publish_post'), все, похоже, запускаются до того, как сообщение будет вставлено в базу данных. Это приводит к пустой строке каждый раз, когда мой код пытается прочитать данные из $post, как (я предполагать?) эта переменная извлекается из базы данных Wordpress, и - поскольку применима новая запись - для начала в базе данных еще ничего не сохранено.

Есть ли крючок, который срабатывает после перехода статуса сообщения , к которому я могу подключить функцию? В качестве альтернативы, возможно ли каким-то образом получить заголовок и содержимое сообщения из редактора TinyMCE с помощью PHP?

Буду признателен за любую помощь!

Пример того, с чем я сейчас сижу:

add_action('transition_post_status','dostuff',10,2);

function dostuff( $new_status, $old_status ) {
    if ($new_status == 'publish' && $old_status != 'publish') {
        global $post;
        $content = $post-> post_title . "\n" . $post->post_content; //Title and content are empty :(
        //Do more stuff with $content
    }
}
Author: player.mdl, 2014-10-19

2 answers

Третьим параметром для transition_post_status является объект post. Используйте его.

add_action( 'transition_post_status', 'dostuff', 10, 3 );

function dostuff( $new_status, $old_status, $post ) {
}

Если вы сомневаетесь, не используйте глобальные значения. Они ненадежны, они затрудняют тестирование и чтение вашего кода.

 3
Author: fuxia, 2014-10-20 06:00:23

Я пока не могу комментировать, так как чувствую, что это может быть более подходящее место, чем опубликовать фактический ответ, в случае, если ваш код выше - опечатка, но ваша строка:

$content = $post-> post_title . "\n" . $post->post_content; //Title and content are empty :(

Может привести к ошибке, так как между $post->post_title есть пробел. Это должно быть

`$post->post_title`

(после нет места "->")

 0
Author: matr07, 2014-10-19 20:31:20