Jak dodać zdolność do roli użytkownika?


14

Zarządzam siecią Wordpress i chciałbym dodać możliwość niefiltrowanego_html użytkownika do już zdefiniowanej roli administratora. W standardowej instalacji Wordpress konto administratora miałoby już taką możliwość, ale w instalacji MU taką możliwość mają tylko superadministratorzy. Role i możliwości Wordpress .

Jak mogę zwiększyć rolę administratora z poziomu motywu lub wtyczki?


1
wordpress.org/extend/plugins/unfiltered-mu wygląda na to, że może to pomóc. Ale działa dla administratorów i redaktorów. Jeśli nie jest to pożądane, może kod może zostać nieco ulepszony?
Ksiądz Voodoo


@Obrót silnika. Voodoo Dzięki za sugestię. Pomogło to rzucić nieco światła na ten temat, ponieważ dodanie możliwości unfiltered_html nie wystarcza, aby umożliwić roli innej niż Administrator lub Super admin możliwość publikowania osadzeń itp. Kluczem było wyłączenie filtrowania / zaczepiania KSES Wordpressa: kses_remove_filters ()
Jonnybojangles,

Szczegółowy blog: goo.gl/xNuafH
Suresh Kamrushi

Odpowiedzi:


14

Możesz użyć klasy WP_Role ,

// get the the role object
$role_object = get_role( $role_name );

// add $cap capability to this role object
$role_object->add_cap( $capability_name );

// remove $cap capability from this role object
$role_object->remove_cap( $capability_name );

Aby odpowiedzieć na pierwotne pytanie, jak umożliwić administratorom wprowadzanie tagów SCRIPT i IFRAME do treści postu, szukasz możliwości „unfiltered_html”, która w Multisite jest przyznawana tylko superadministratorom.

// get the the role object
$admin_role = get_role( 'administrator' );
// grant the unfiltered_html capability
$admin_role->add_cap( 'unfiltered_html', true );

lub możesz uruchomić to raz w swoich funkcjach:

/* Roles & Capabilities */
add_role('professional', 'Professional User', array(
    'read' => true, // True allows that capability, False specifically removes it.
    'edit_posts' => true,
    'delete_posts' => true,
    //'edit_published_posts' => true,
    //'publish_posts' => true,
    //'edit_files' => true,
    'upload_files' => true //last in array needs no comma!
));

Dzięki Philip. W odniesieniu do klasy WP_Role, kiedy należy wykonać kod? Zgaduję, że wpływa to na globalny obiekt roli? Cieszę się, że przywołałeś drugi blok kodu, w którym wspomniałem, że mógłbym to raz uruchomić w pliku funkcji. Znalazłem podobne rozwiązania na niektórych forach wsparcia Wordpress, ale dziwne jest, że raz uruchomiłem kod w motywie lub wtyczce. Zwłaszcza bez sprawdzenia, czy zmiana już istnieje. Być może napisanie roli jest w rzeczywistości znikome. Aby sprawdzić zdolność vs po prostu napisz zdolność do roli, jak pokazuje twój pierwszy przykład.
Jonnybojangles 30.03.11

Interesuje mnie również sposób wykonania klasy WP_Role, jeśli masz chwilę czasu, aby nam powiedzieć. Dzięki
Osu

1
@Jonnybojagles & @Osu, sprawdź to: Ostateczny przewodnik po rolach i możliwościach garyc40.com/2010/04/ultimate-guide-to-roles-and-capabilities
Philip

Przeczytałem już ten artykuł w mojej pogoni, ale skorzystałem z okazji, aby ponownie go przejrzeć, dziękuję! W końcu po przeanalizowaniu wtyczki unfiltered-mu (wspomnianej powyżej przez Rev. Voodoo) ostatecznie odkryłem, że zmiana ról poprzez dodanie możliwości nie wystarczy. Musiałem odfiltrować filtry KSES Wordpressa.
Jonnybojangles,

Wolę dodać przecinek do ostatniego elementu w tablicach. Chociaż może się to wydawać nieistotne, ponieważ nie jest konieczne, aby kod działał ani nie powodował błędów (błędów), jest przydatny przy użyciu kontroli wersji podczas wizualizacji modyfikacji; nie zobaczysz, że stary wiersz elementu tablicy został usunięty, ponownie dodany i podświetlony jako nowy, a przecinek został dodany lub wprowadzony w tej linii. Chociaż niewiele, pomaga zaoszczędzić dużo czasu podczas analizowania modyfikacji.
nyedidikeke

2

Aby umożliwić innej roli niż Super Administrator lub Administrator (w zależności od tego, czy instalacja Wordpress jest instancją sieci / MU, czy nie), aby dodać niefiltrowany HTML do postu lub komentarza, filtr KSES Wordpress musi zostać usunięty.

Sprawdź, czy użytkownik ma określone możliwości.

if ( current_user_can( 'unfiltered_html' ) ) {  }

Jeśli tak, to usuń KSES

kses_remove_filters();

Ta funkcja jest już zawarta w niefiltrowanym mu, co pozwala administratorom i edytorom dodawać niefiltrowany HTML.


Funkcjonalność jest również zapakowana w rejestrze wtyczek i wyrejestrowaniu, dzięki czemu logika nie musi być wykonywana przy każdej instancji WP.
Jonnybojangles,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.