Další novinkou, se kterou se ve WordPress 4.7 potkáme, je možnost vytvoření vlastní hromadné úpravy.
Hromadná úprava je známá featura WordPressu, kde si můžeme v selectu vybrat, co chceme udělat s vybranými posty.
Vytvoření vlastní akce, můžeme rozdělit do tří kroků:
- Přidání akce do výběru
- Callback funkce pro provedení zamýšlených úprav
- Admin notice pro tuto akci
Přidání funkce do výběru:
Pro registraci funkce použijeme filter bulk_actions-{screen-id} a na konec pole výběru přidáme naši položku:
add_filter( 'bulk_actions-edit-post', 'register_my_bulk_actions' );function register_my_bulk_actions($bulk_actions) { $bulk_actions['moje_akce'] = __( 'Moje akce', 'lang_domain'); return $bulk_actions;}Callback funkce:
Jako další krok, vytvoříme callback funkci. Použijeme filter handle_bulk_actions-{screen-edit} a ve funkci můžeme pracovat s $redirect_to, $doactions a $post_ids. V redirectu máme vloženou url, čehož využijeme k přidání parametrů, po úspěšném provedení akce. V doaction je klíč z pole, jenž jsme rozšířili, v tomto případě – moje_akce. Jako poslední proměnná je zde seznam id všech postů, jenž máme označené.
V případě, že se jedná o správnou akci, projdeme všechny posty a uložíme například nějaký custom field, nebo cokoliv budeme chtít upravit.
Na závěr přesměrujeme na upravenou url.
add_filter( 'handle_bulk_actions-edit-post', 'my_bulk_action_handler', 10, 3 );functionmy_bulk_action_handler( $redirect_to, $doaction, $post_ids) { if( $doaction!== 'moje_akce') { return$redirect_to; } foreach( $post_idsas$post_id) { update_post_meta( $post_id, '_check_post_by_admin', 'zkontrolováno' ); } $redirect_to= add_query_arg( 'bulk_moje_akce_posts', count( $post_ids), $redirect_to); return$redirect_to;}Vložení admin notice:
Admin notice, je upozornění, zobrazované například, po aktualizaci pluginu. A my si vytvoříme vlastní.
add_action( 'admin_notices', 'my_bulk_action_admin_notice');functionmy_bulk_action_admin_notice() { if( ! empty( $_REQUEST['bulk_moje_akce_posts'] ) ) { $posts_count= intval( $_REQUEST['bulk_moje_akce_posts'] ); printf( '<div id="message" class="updated fade">'. _n( 'Zkotrolováno %s článků.', 'Zkotrolováno %s článků.', $posts_count , 'moje_akce' ) . '</div>', $posts_count ); }}Myslím, že toto vylepšení bude mít velké použití, pro zjednodušení práce s větším množství obsahu.