Zezwól członkowi na dostęp tylko do niestandardowego typu postu. Zezwolenie na edytowanie tylko własnych postów

29

OK, szukam najlepszego sposobu na zaatakowanie tego.

Bardzo dobrze czuję się w PHP i tworzeniu niestandardowych typów postów za pomocą niestandardowych pól meta w WordPress.

Oto, na co patrzę:

  1. Użytkownik rejestruje się i domyślnie jest ustawiony na subskrybenta.
  2. Użytkownik prosi administratora o zezwolenie na niestandardowy typ postu.
  3. Administrator przypisuje użytkownika do innej nazwy uprawnienia, na przykład „Właściciel sklepu”.
  4. Użytkownik może teraz zobaczyć niestandardowy typ postu i wprowadzić wpis do tego typu postu.
  5. Użytkownik może tylko wyświetlać i edytować swój post.

Potrzebuję pomocy w następujących kwestiach:

  1. Jak utworzyć nową „rolę” o nazwie „Właściciel sklepu”,
  2. Jak udzielić poprawnego uprawnienia do wspomnianej roli, aby widzieć i mieć dostęp do niestandardowego typu postu.
  3. Zezwalaj tylko użytkownikom na wyświetlanie i edytowanie własnych postów do tego niestandardowego typu postów.

Idealnie wolałbym, żeby to wszystko było zrobione z wp-admin, ale domyślam się, że może być konieczne zbudowanie interfejsu, aby uzyskać skończoną kontrolę, której szukam.

Wszelkie uwagi są mile widziane.

Z poważaniem

Brady
źródło

Odpowiedzi:

21

Użyj wtyczki Justina Tadlocka „ Członkowie ”. Daje to możliwość tworzenia nowych ról i edytowania istniejących ról, a także dodawania niestandardowych funkcji. Całą pracę, którą musisz wykonać, można zredukować do kilku kliknięć.

Wiem, że powiedziałeś w komentarzu do odpowiedzi ZaMoose, że „sam chcesz napisać funkcjonalność, więc mam pełną kontrolę nad wszystkim”. Brakuje sedna oprogramowania open source. Justin Tadlock wypuścił swoją wtyczkę, abyś mógł z niej korzystać dokładnie, aby MIEĆ całkowitą kontrolę nad wszystkim.

Jeśli naprawdę chcesz odkryć koło na nowo, potencjalnie marnując setki godzin własnego czasu, nie mogę cię powstrzymać, ale możesz przynajmniej zaoszczędzić sobie kłopotów i użyć wtyczki Tadlock, aby dowiedzieć się, jak robić to, co chcesz.

Gdy masz wtyczkę, która robi to, co chcesz, musisz zmienić 'map_meta_cap'flagę na truei 'capability_type'flagę w funkcji rejestracji typu postu, aby wyświetlało się w niej coś innego niż „post”, „strona” lub jakikolwiek inny „zarezerwowany” rodzaj. Następnie powielać wszystkie funkcje związane stanowisk (np edit_posts, edit_others_posts, publish_postsitp), stosując typ wydolności zamiast słupków. Pamiętaj, aby przypisać wszystkie te uprawnienia administratorom (nie będziesz mógł zobaczyć typu postu, dopóki tego nie zrobisz), a następnie utwórz swoją rolę, naśladując możliwości roli „współtwórcy” dla danego typu postu.

Na przykład, że Twój typ zdolność było foobars, co chcesz dać „właścicieli sklepów” o edit_foobars, delete_foobarsi readmożliwości. W ten sposób mogą tworzyć własne foobary robocze i usuwać te wersje robocze, ale ponieważ nie mają publish_foobarsmożliwości, muszą je przesłać do zatwierdzenia. Ponieważ nie mają edit_published_foobars, wszystkie modyfikacje zatwierdzonego foobar muszą zostać zatwierdzone.

John P. Bloch
źródło
OK, korzystam teraz z wtyczki Members, aby dowiedzieć się, jak działają uprawnienia członków. Ustawiłem 'map_meta_cap' => truei 'capability_type' => 'shopowner'na mój niestandardowy typ postu. Utworzyłem nową rolę o nazwie ShopOwneri nadałem jej możliwości odczytu, edycji_właściciela, usuwania_własności. Ustaw użytkownika na rolę ShopOwner i zaloguj się z tym użytkownikiem. Ten użytkownik nie widzi niestandardowego typu postu. Czy coś przeoczyłem?
Brady
2
zmień je na edit_shopownersi delete_shopowners. edit_shopowneri delete_shopownersą meta możliwościami, które nigdy nie są faktycznie porównywane. Są sprawdzane, gdy ktoś próbuje edytować lub usunąć określony element, a na koniec sprawdzają takie rzeczy, jak: „Czy ten użytkownik może usuwać tego rodzaju elementy? Czy mogą usuwać tylko własne lub inne elementy? Czy mogą usuwać opublikowane elementy?” itd.
John P Bloch,
Nie mogłem tego zrozumieć ... ale dostałem funkcjonalność, której szukam, ustawiając możliwości w moim niestandardowym typie postów i tworząc te możliwości we wtyczce członków. Przyznałem ci odpowiedzi, ponieważ twój post był dla mnie najbardziej użyteczny do wspólnego rozwiązania. Dzięki
Brady,
19

Typ wpisu rejestru ma parametr zwany „możliwościami”, więc możesz na przykład go mieć

'capability' => 'organize_shop',

http://codex.wordpress.org/Function_Reference/register_post_type

Aby utworzyć nowego użytkownika / rolę / funkcję, możesz użyć add_role, add_cap, na prosty przykład na początek:

// Add the role to WordPress list of roles
// Then add the capability 'organize_shop' to the 'shop_owner' role
$role = add_role( 'shop_owner', 'Shop Owner', ['edit_posts' => true]));
$role->add_cap( 'organize_shop' );


// If 'shop_owner' already exists make `$wp_roles` visible then 
// add the capability 'organize_shop' to the 'Show Owner' role
public $wp_roles;
$wp_roles->add_cap( 'shop_owner', 'organize_shop' );
Wyck
źródło
hmm ... Jestem trochę zdezorientowany, jaka jest różnica między 2 a 3 liniami? : S Czy to nie dodaje tej samej funkcji do roli „Właściciel sklepu”?
dashaluna
Tak, są takie same, ale pokazują różne sposoby, aby to zrobić, pierwszy zawiera rolę jako pierwszego parametru (Właściciel sklepu), drugi tylko ograniczenie, ponieważ używa $ roli.
Wyck
3
Czy masz przetłumaczyć zdolność / pozwolenie? to jest __('');
Svetoslav Marinov
@SvetoslavMarinov Zredagowałem odpowiedź, aby usunąć tłumaczenie.
MikeSchinkel
@dashaluna Zredagowałem odpowiedź, aby ją wyjaśnić.
MikeSchinkel
1

Czy zastanawiałeś się nad skorzystaniem z formularzy Gravity Forms lub TDO Mini Forms, aby obsłużyć faktyczne przesyłanie treści? Każdy z nich ma funkcjonalność, która ułatwi Ci prawidłowe przejście do treści przesłanych przez użytkowników.

ZaMoose
źródło
Dzięki za odpowiedź, ale nie tego szukam. Głównie dlatego, że są to wtyczki. Chcę napisać funkcjonalność samodzielnie, więc mam pełną kontrolę nad wszystkim.
Brady
0

Łatwiejszy i skuteczniejszy sposób, w jaki można to osiągnąć, instalując wtyczkę o nazwie „Advance Access Manager”, nie będziesz musiał pisać funkcji, ale nadal będziesz mieć przyzwoity poziom kontroli nad użytkownikami, rolami i tym, co mogą zrobić. Ta wtyczka pozwala uzyskać większość potrzebnych funkcji.

głupiutki
źródło