2016-03-09 4 views
0

Мне нужен крючок на тот момент, когда администратор обновляет сообщение. (Нажмите кнопку обновления). После успешного обновления сообщения.Wordpress Update Post Hook in Admin View

Причина в том, что я должен вызвать функцию, чтобы что-то обновить для другого плагина.

Все, что я пробовал до сих пор, не работает.

add_action('save_post', 'wpse41912_save_post'); 
add_action('edit_post', 'wpse41912_edit_post'); 
add_action('transition_post_status', 'wpse41912_transition_post_status'); 
add_filter("edit_post_{$field}", 'filter_edit_post_field', 10, 2); 
add_action('admin_head-post.php', 'admin_head_post_editing'); 
add_action('admin_head-post-new.php', 'admin_head_post_new'); 
add_action('admin_head-edit.php', 'admin_head_post_listing'); 

В функции «Все» я написал это, и я не видел эха или окно предупреждения.

echo "my_update_user_meta"; 
$text = "my_update_user_meta"; 
echo '<script type="text/javascript">alert("' . $text . '")</script>'; 

Редактировать: мне не хватало 3,4-го параметра. Мой код прямо сейчас

add_action('save_post', 'mmx_save_post_action', 10, 3); 
function mmx_save_post_action($post_id, $post, $update) { 
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { // keine Aktion bei Autosave 
    //autosave 
    }else{ 
    //no autosave 
    if (is_admin() && current_user_can('manage_options') ) { 
     //admin panel && permission ok 
    //call function 
    } 
    } 
} 

ответ

2

Когда пост обновляется есть некоторые крючки, срабатывающие:

  • 'pre_post_update' это действие выстрелил только перед тем пост обновляется, аргумент, передаваемый в 2: $post_ID и $data, а именно массив все другая база данных colours столфа
  • 'transition_post_status' - крючок, активированный при обновлении, и передает 3 аргумента: $ new_post_status, $old_post_status и $post (объект).
  • Тогда есть еще 2 переходных крючка, но они динамически названы, это означает, что действующее действие срабатывает в зависимости от старого и нового статуса сообщения. "{$old_status}_to_{$new_status}" и "{$new_status}_{$post->post_type}". Сначала передайте только объект post в качестве аргумента, второй - идентификатор сообщения и объект post. Найти документацию here.
  • 'edit_post', которые проходят 2 аргумента: $post_ID и $post (объект)
  • 'post_updated', которые проходят 3 аргумента: $post_ID, $post_after (почтовый объект после обновления), $post_before (после объекта перед обновлением)
  • Другой динамический крюк: "save_post_{$post->post_type}", который зависит от типа сообщения, например для стандартных сообщений - 'save_post_post', а для страниц 'save_post_page' этот крючок пропускает 3 аргумента: $post_ID, $post (объект) и $update, который является логическим (истинным или ложным), который является истинным при выполнении обновления, на самом деле этот крючок также запускается когда сообщение сохраняется в первый раз.
  • save_post, который запускается как при обновлении, так и при первом сохранении и передает те же 3 аргументы предыдущего крючка.
  • 'save_post_{$post_type}', который запускается как при обновлении, так и при первом сохранении и передает те же первые 2 аргумента предыдущего крючка.
  • Наконец-то у вас есть 'wp_insert_post', который запускается как при обновлении, так и при первом сохранении и передает те же 3 аргумента из двух предыдущих крючков.

Эти крючок увольняют каждый раз, когда пост обновляется, как через администратора страницы в интерфейсе, так и через при обновлении «вручную» с помощью wp_update_post или wp_insert_post функции.

Когда пост обновляется с помощью администратора страницы есть дополнительные крючки уволят, примером может служить 'update_post_redirect' или 'post_updated_messages'. (См. this и this Ответы WPSE на примеры использования).

Обратите внимание, что если вы хотите использовать какой-либо аргумент hooks, это не первый, вам нужно явно объявить его в вызове add_action.

E.g. если вы хотите использовать '$update' аргумент (то есть третья) от 'save_post' крючка вам нужно добавить 3 в $accepted_args парам на add_action (see docs):

// if you don't add 3 as as 4th argument, this will not work as expected 
add_action('save_post', 'my_save_post_function', 10, 3); 

function my_save_post_function($post_ID, $post, $update) { 
    $msg = 'Is this un update? '; 
    $msg .= $update ? 'Yes.' : 'No.'; 
    wp_die($msg); 
} 

Последнее замечание Что касается времени: вы должны быть уверены, что add_action называется до, действие инициируется, или оно ничего не сделает.

E.g. этот код:

wp_update_post($post); 
add_action('save_post', 'my_function', 10, 3); 

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

+0

Привет, спасибо за ответ. Мне не хватало 3,4 аргумента (, 10,3). Может быть, ты сможешь помочь мне с этим сейчас. Я просто хочу, чтобы функция, которую я вызовет, просто уволен, если im в режиме администратора, администратор (или другая роль) зарегистрирован, нет автосохранения. – Michael

+0

У меня уже есть это, чтобы проверить разрешение if (current_user_can ('manage_options')) { echo "current_user_can manage options1"; } else { echo "current_user_cant manage options1"; } – Michael