Dodajemy nową rolę użytkownika do zarządzania własnym typem postu

Na początek muszę uderzyć się w pierś – ostatni post na blogu napisałem ponad 4 miesiące temu. Na szczęście mamy czas noworocznych postanowień „Nowy Rok, nowy Ja” 🙂  i tak dalej, więc w tym roku postaram się pisać częściej. Chciałbym pisać nowy artykuł raz na tydzień, ale z powodu innych zajęć będzie to bardzo trudne. Zachęcam, żebyście podsuwali mi jakieś ciekawe tematy, którymi mógłbym się zająć.

Ostatnio zajmowałem się ciekawym projektem, który w skrócie ma służyć do zarządzania planami treningowymi. Plany treningowe utworzyłem w WordPressie jako własny typ postu (Custom Post Type). Specyfikacja uwzględniała użytkownika, który może zarządzać swoimi planami, ale nie może mieć dostępu do innych treści w zapleczu WordPressa, takich jak strony, wpisy itd, dodatkowo może on przeglądać plany innych użytkowników (bez możliwości edycji i usuwania). Do tego celu dodałem w WordPressie nową rolę „Trener”. Na polskich stronach o tematyce WP nie znalazłem informacji, jak można to zrobić bez użycia wtyczek, więc opiszę sposób w tym krótkim artykule.

Dodajemy własny typ postu (Custom Post Type)

Aby dodać własny typ postu (w tym przypadku nasz plan treningowy), do pliku functions.php trzeba dodać poniższy fragment kodu. Więcej parametrów do funkcji register_post_type znajdziemy tutaj, jeśli później chcemy dodać rolę użytkownika, która będzie tym typem zarządzać, ważne są dwie wyróżnione linie w poniższym kodzie:

add_action( 'init', 'plany_treningowe_cpt' );

function plany_treningowe_cpt() {

register_post_type( 'plan', array(
'labels' => array(
'name' => 'Plany treningowe',
'singular_name' => 'Plan treningowy',
'edit_item' => 'Edytuj Plan',
'new_item' => 'Nowy Plan',
'view_item' => 'Zobacz Plan',
'add_new' => 'Dodaj nowy plan',
),
'description' => 'Plany treningowe dodawane przez trenerów.',
'public' => true,
'menu_position' => 10,
'menu_icon' => 'dashicons-universal-access-alt',
'supports' => array( 'title', 'editor', 'comments','author' ),
'publicly_queryable' => true,
'capability_type' => array('plan','plans'),
'map_meta_cap' => true,
));
}

Dodajemy nową rolę

Raz dodana rola, zostaje zapisana w bazie danych i będzie dostępna nawet po zmianie motywu, czy wyłączeniu wtyczki (jeśli trzymamy kod w plikach wtyczki), dlatego warto dodać również akcję, która będzie usuwać rolę. Poniższy kod dodajemy do pliku functions.php, więc wykorzystamy akcje zmiany motywu. Jeśli dodajemy nasz kod za pomocą wtyczki, musimy użyć akcji dla aktywacji i deaktywacji wtyczki – register_activation_hook, register_deactivation_hook.


// Register activation hook to add Trener role
add_action( 'after_switch_theme', 'trener_role_activation' );

// Register deactivation hook to remove Trener role
add_action( 'switch_theme' , 'trener_role_deactivation' );

function trener_role_activation() {
$caps = [
//* Meta capabilities
'read' => true,
'edit_plan' => true,
'read_plan' => true,
'delete_plan' => true,

//* Primitive capabilities used outside of map_meta_cap()
'edit_plans' => true,
'edit_others_plans' => false,
'publish_plans' => true,
'read_private_plans' => false,

//* Primitive capabilities used within of map_meta_cap()
'delete_plans' => true,
'delete_private_plans' => true,
'delete_published_plans' => true,
'delete_others_plans' => false,
'edit_private_plans' => false,
'edit_published_plans' => true,
];

add_role( 'wpinfo_trener', 'Trener', $caps );
}

function trener_role_deactivation() {
remove_role( 'wpinfo_trener' );
}

I to wszystko, teraz możemy przydzielić rolę „trener” naszym użytkownikom. Przykładowo jeśli chcemy, aby trenerzy mogli edytować plany innych trenerów, musimy zmienić wartość w linii 17 w powyższym kodzie na „true”. Podobnie możemy postąpić z innymi uprawnieniami. Szczegóły znajdziemy tutaj: https://codex.wordpress.org/Function_Reference/register_post_type w sekcji „capabilities”.

×

Interesujesz się WordPressem?

Polub nas na Facebooku, będziesz na bieżąco!

facebook