Intereting Posts

save_post не работает с вложениями

Я создал Meta Box для сообщений и страниц, а также при тестировании добавленных вложений. Но, с любопытством, крючок save_post не срабатывает.

 $cpts = apply_filters( 'my_filter', array( 'post', 'page' ) ); // Added attachment through filter foreach( $cpts as $pt ) { add_meta_box( 'my_metabox_id', __( 'Meta Box' ), array( $this, 'my_metabox_callback' ), $pt, 'side' ); } add_action( 'save_post', array( $this, 'save_metabox_data' ) ); 

Почему это? Не является ли attachment также типом сообщений и, следовательно, подвержено тем же перехватам, что и другие типы сообщений?

Solutions Collecting From Web of "save_post не работает с вложениями"

На самом деле, привязанности по-прежнему не являются «полноценными типами сообщений». Мэнни Флерумонд очень хорошо говорит в этой теме :

Думал об этом за последние несколько дней: в настоящее время любые медиафайлы, загруженные на сайт WordPress, по умолчанию имеют статус post inherit , который является фиксацией, когда вложения в медиа были именно такими. СМИ были прикреплены к определенному сообщению, поэтому он унаследовал статус сообщения. Мы начинаем уходить от прикрепления СМИ непосредственно к сообщениям сейчас и даже заставляем их публиковать, например, разрешая мета-ящики и таксономии в последних версиях WP. Я думаю, что следующим логическим шагом является предоставление статусов медиа-сообщений, отличных от inherit . Я могу придумать несколько случаев, когда создание образа или файла может быть полезным, среди прочего.


Я нашел решение в этой статье «Переполнение стека»: крюк «save_post» не работает с приложением типа post . Мы должны использовать hook edit_attachment :

 add_action( 'edit_attachment', array ( $this, 'save_attachment_mb_data'), 10, 1 ); public function save_attachment_mb_data( $post_id ) { // do_our_thing(); } 

Обратите внимание, что для этого требуется только один параметр $post_id , поэтому мы не можем повторно использовать тот же обратный вызов, что и другие типы сообщений. Ну, если мы не $post_object второй ( $post_object ) для обычных типов сообщений.