Невозможно получить контент из $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
}
}
2 answers
Третьим параметром для transition_post_status
является объект post. Используйте его.
add_action( 'transition_post_status', 'dostuff', 10, 3 );
function dostuff( $new_status, $old_status, $post ) {
}
Если вы сомневаетесь, не используйте глобальные значения. Они ненадежны, они затрудняют тестирование и чтение вашего кода.
Я пока не могу комментировать, так как чувствую, что это может быть более подходящее место, чем опубликовать фактический ответ, в случае, если ваш код выше - опечатка, но ваша строка:
$content = $post-> post_title . "\n" . $post->post_content; //Title and content are empty :(
Может привести к ошибке, так как между $post->post_title есть пробел. Это должно быть
`$post->post_title`
(после нет места "->")