добавьте фильтр в "меню быстрого редактирования" в администраторе wordpress


В настоящее время я работаю над плагином WordPress. плагин включает таблицу базы данных, которая обновляется каждый раз, когда создается, редактируется или удаляется сообщение с данными этого сообщения. один из столбцов в этой таблице - "post_status", и мне нужно, чтобы он обновлялся со статусом записи всякий раз, когда он меняется. прямо сейчас я использую этот код:

function filter_transition_post_status( $new_status, $old_status, $post ) { 
    global $post;
    global $wpdb;
    $wpdb->query(" UPDATE my_table SET post_status='$new_status' WHERE post_id=$post->ID");
}
add_action('transition_post_status', 'filter_transition_post_status', 10, 3);

Приведенный выше код отлично работает, когда я изменяю статус публикации на странице "редактировать публикацию". когда я изменю статус из сообщения изменение происходит и в моей таблице. однако код не работает, когда я использую режим "быстрое редактирование" для изменения статуса публикации или массового изменения нескольких записей. изменение не происходит в моей таблице. любая помощь в решении этой проблемы будет очень признательна. спасибо

Author: Eyal, 2012-04-30

1 answers

Вы не хотите ссылаться на глобальный $post, но на сообщение, которое вам дано в качестве одного из аргументов. Вам просто нужно удалить global $post;

Не забудьте также очистить имена функций ввода и префиксов.

function wpse50651_filter_transition_post_status( $new_status, $old_status, $post ) { 

    global $wpdb;

    $wpdb->query( 
        $wpdb->prepare( 
          "UPDATE my_table SET post_status=%s WHERE post_id=%d", 
           $new_status,$post->ID
         ) 
     );
}
add_action('transition_post_status', 'wpse50651_filter_transition_post_status', 10, 3);
 0
Author: Stephen Harris, 2012-05-01 15:31:31