2012-04-30 2 views
0

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

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); 

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

+0

Может быть, это поможет http://codex.wordpress.org/Plugin_API/Action_Reference/save_post –

+0

спасибо Shelikh. Я нашел решение в указанной вами ссылке. Я добавил свой ответ ниже. – Eyal

ответ

0

Я нашел решение. При использовании режима «быстрого редактирования» для обновления сообщения идентификатор сообщения не может быть получен с использованием глобальной $ post, как на странице «Редактировать сообщение», но с помощью $ _GET ['ID]. Поэтому для того, чтобы охватить оба варианта, «быстрого редактирования» и «Редактировать сообщение» Я использую функцию ниже:

function filter_transition_post_status($new_status, $old_status, $post) { 
    global $wpdb; 
    global $post; 
    $my_id = get_post($_GET['ID']); 
    is_array($my_id) ? $post_id = $my_id[ID] : $post_id = $post->ID; 
    $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); 

Функция проверяет, если $ my_id получить что-нибудь от $ _GET [ID] (в «быстрое редактирование «page), и если это так, то он будет использовать его, иначе он будет использовать глобальную $ post для получения идентификатора.

UPDATE:.

я получил гораздо лучшее решение, чем в Stephen Harris - «Вы не хотите, чтобы ссылаться на глобальный $ пост, но пост, который дается вам в качестве одного из аргументов Вам просто нужно удалить глобальный $ пост»

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); 
Смежные вопросы