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 );
function
my_bulk_action_handler(
$redirect_to
,
$doaction
,
$post_ids
) {
if
(
$doaction
!==
'moje_akce'
) {
return
$redirect_to
;
}
foreach
(
$post_ids
as
$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'
);
function
my_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.
Půjde tohle využít i na přidání hromadné odpovědi na komentáře?
Ano, stačí změnit screen id a bude se to provádět na jiné, tedy i u komentářů.
Šlo by nějak, aby při zvolení mé hromadné akce (Hromadná odpověď) se napřed zobrazila textarea s tlačítkem na odeslat. Já jen vyplnil text odpovědi a odeslal hromadnou odpověď, na vybrané komentáře.
Nejlépe okno s možností základního formování textu, jako je okno při kliknutí na „Odpovědět“.
To by určitě šlo, ale popis řešení by byl na další článek.