Привет. Наверняка, если вы пользуетесь WordPress знаете, что есть такие массовые действия (bulk actions), которые позволяют сделать какое-то действие сразу с несколькоми записями/страницами/типами записей. Например, можно отметить галочками несколько постов и одновременно удалить их, или наоборот опубликовать.

Сегодня мы научимся как добавить свое массовое действие в WordPress админку.

Как добавить свое массовое действие в WordPress?

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

Именно при помощи добавления собственного кода в один из хуков мы и решим задачу как добавить свое массовое действие в WordPress.
Рассмотрим на примере экспорта выбранных записей.

add_action('admin_footer-edit.php', 'custom_bulk_admin_footer');
 
function custom_bulk_admin_footer() {
 
  global $post_type;
 
  if($post_type == 'post') {
    ?><?php } }

Итак, в выпадающем списке (select) массовых действий уже появился пункт Export.

Как видите, мы навязали выполнение нашей функции на хук admin_footer-edit.php. В этой функции мы проверяем, что тип записи сейчас post, то есть соответствует типу Запись и добавили JS, который добавил в оба выпадающих списка нужный код.

В месте, где проверяется тип записи вы можете проверить на соответствие другому типу записи, например, выводить только на страницах, или только на ваших пользовательских типах записи.

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

  • проверит что выбранное действие — наше
  • выполнит действие
  • переведет пользователя обратно
add_action('load-edit.php', 'custom_bulk_action');
 
function custom_bulk_action() {
 
  // ...
 
  // 1. определить тип действия
  $wp_list_table = _get_list_table('WP_Posts_List_Table');
  $action = $wp_list_table->current_action();
 
 // 2. проверить наше действие или не наше
  switch($action) {
    // 3. выполнить действие
    case 'export':
 
      $exported = 0;
 
      foreach( $post_ids as $post_id ) {
        if ( !$this->perform_export($post_id) )
          wp_die( __('Error exporting post.') );
        $exported++;
      }
 
      // построить ссылку для возврата
      $sendback = add_query_arg( array('exported' => $exported, 'ids' => join(',', $post_ids) ), $sendback );
 
    break;
    default: return;
  }
 
  // ...
 
  // 4. вернуть пользователя обратно
  wp_redirect($sendback);
 
  exit();
}

В месте, где указано $exported++ естественно должно выполняться ваше действие с выбранными постами. Допустим добавлять данные из выбранных постов в общий список для экспорта, или наоборот выбранных дополнение постов данными.

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


 

Если остались вопросы о том как добавить свое массовое действие в WordPress — пишите в комментарии или обратитесь в службу поддержку сайтов на Worpdress Доделко.

Если же вам нужно создать сайт с нуля, то рекомендуем обратиться к CREAT-SITE Создание сайтов. Профессионализм и скорость исполнения – вот основные преимущества этой компании.