Не удалять мои сообщения

Я добавил этот код в function.php, чтобы заменить post_date на поле ACF каждый раз, когда я обновляю mu custom post. Он отлично работает!

НО

Теперь в WP admin я не могу удалить (удалить) любую пользовательскую запись в списке

Может ли кто-нибудь помочь мне, пожалуйста? благодаря

add_action('save_post', 'change_content'); global $post; global $wpdb; function change_content($post_id) { if(get_post_type($post_type) == 'mycustompost' && get_field ('dates_0_date_spectacle') != '' ) { $datefield = get_post_meta($post_id,'dates_0_date_spectacle',true); $post_date = date("Ymd H:i:s", strtotime($datefield)); $my_post = array(); $my_post['ID'] = $post_id; $my_post['post_date'] = $post_date; $my_post['post_status'] = 'publish'; remove_action('save_post', 'change_content'); wp_update_post( $my_post ); add_action('save_post', 'change_content'); } } 

Конечно, ваши пользовательские сообщения не могут быть уничтожены. Они даже не могут быть change_content() к частному или черновику или что-то еще, а затем publish потому что ваш callback change_content() всегда устанавливает статус publish для publish каждый раз, когда сообщение (вашего настраиваемого типа сообщения) сохраняется. Однако перехват сообщения просто означает настройку его статуса на trash .

Я не уверен, чего вы хотите достичь с помощью этой строки кода:

 $my_post['post_status'] = 'publish'; 

но если вы хотите отслеживать изменения статуса, вам придется подключиться к hook_post_status. Вот быстрый, но непроверенный пример о том, как это сделать:

 namespace WPSE186226; class TrackPostStatus { private $tashedPostsIds = []; /** * @wp-hook transition_post_status * @param string $newStatus * @param string $oldStatus * @param \WP_Post $post */ public function post_status_transition( $newStatus, $oldStatus, \WP_Post $post ) { //eg register when a post gets trashed: if ( 'trash' !== $old_status && 'trash' === $new_status ) $this->trashedPostsIds[] = $post->ID; } /** * @wp-hook save_post * @param int $postId */ public function handle_post( $postId ) { if ( ! in_array( $postId, $this->trashedPostIds ) ) return; // call your logic here. } } $postStatusTracker = new TrackPostStatus; add_action( 'transition_post_status', [ $postStatusTracker, 'post_status_transition' ], 10, 3); add_action( 'save_post', [ $postStatusTracker, 'handle_post' ] ); 

Примечание: в этом примере используется синтаксис PHP 5.4 и несовместим с PHP 5.3 или ниже

Этот способ обеспечивает более гибкую обработку с переходами статуса сообщения. Однако есть более простой крючок, когда вы просто хотите отслеживать новый статус: {$new_status}_{$post_type}