V případě, že se v administraci e-shopu pohybuje více lidí, musíte v ně mít důvěru, nebo jim omezovat to co vidí a mohou zobrazit. A do toho mohou patřit i specifické objednávky.
Uvažujme, že prodáváme například velmi specifické produkty, u nichž je příprava vychystání objednávky svěřena různým lidem. Takže uživatel A, se má věnovat objednávkám, v kterých je zboží, které má na starosti a ostatní nepotřebuje vidět.
Tento snippet jako takový neřeší označení objednávky pro určitého uživatele, protože to je mimo rámec tohoto článku. Pro představu, při vytvoření objednávky si někdo koupí vodní skůtr a vy do databáze zapíšete custom field, který označí, že tuto objednávku vyřizuje Karel. Ten by tak měl vidět jen své objednávky.
Pro testování si tedy k objednávce přidáme specifické post meta:
Když se Karel přihlásí do administrace, vidí všechny objednávky:
Pro omezení zobrazení, použijeme akci pre_get_posts:
if ( is_admin() ) {
add_action('pre_get_posts', 'musilda_hide_orders' );
function musilda_hide_orders( $query ) {
$current_screen = get_current_screen();
if ( 'edit-shop_order' == $current_screen->id ) {
$user_id = get_current_user_id();
if ( 1 == $user_id ) {
$meta_query = $query->get( 'meta_query' );
if ( is_array( $meta_query ) ) {
$meta_query[] = array(
'key' =>'user_name',
'value' =>'Karel',
'compare'=>'='
);
} else {
$meta_query = array(
array(
'key' =>'user_name',
'value' =>'Karel',
'compare'=>'='
)
);
}
$query->set( 'meta_query', $meta_query );
}
}
return $query;
}
}
Nejprve si ověřím, že jde o adminsitraci, pak si ověříme, zda se nacházíme na výpisu objednávek, ověříme, že jde o správného uživatele a pak upravíme meta query.
Podmínky při úpravě meta query je nezbytná, protože meta query již může existovat a pak jej rozšiřujete.
Výsledek:
A Karel vidí jen jednu (svoji) objednávku.
Mimochodem, takto zjednodušeně fungují multi vendor pluginy.