Dashboard wordpress aanpassen op verschillende rollen
Ik ben zelf Admin van een WordPress-website....receptenwebsite.
Als ik inlog heb ik uiteraard alle functies in mijn dashboard zitten.
Nu zit ik met een issue. Ik wil mijn SUBSCRIBERS alleen toestemming geven voor het zien en plaatsen van Recepten, Media, Contact, Reacties...
Ik zoek een code waarmee ze wel Recepten kunnen plaatsen maar geen Berichten (=blogs).
Ik wil niet dat ze Berichten kunnen plaatsen!!
Via Google een code gevonden maar dan kan de Admin ook geen Recepten meer plaatsen (1) en tevens kunnen kun ze dan nog bovenin (bij het plusje +). Ook nog gewoon berichten en of recepten toevoegen. Iemand een idee voor aanpassing/toevoeging van code in functions.php???
Om te beginnen moet je onderscheid maken tussen de verschillende user roles. Je wilt dat subscribers minder privileges hebben dan (super)admins.
Je wilt dus controleren welke user er is ingelogd en dan kijken wat zijn role is.
Probleem is een beetje dat een post altijd wordt gezien als een post, ongeacht of het een custom post type is of niet. Wordpress maakt dus geen onderscheid tussen Recepten en blog posts als het gaat over user roles.
Je zult dus een zgn 'custom capability' moeten aanmaken, iets als 'plaats_recept'.
Vervolgens kun je in de admin alles verbergen voor users die geen admin zijn, behalve de dingen die je wilt dat ze wel kunnen zien/doen. Het menu item voor 'berichten' verberg je dan voor subscribers, het menu item voor 'Recepten' (ervan uitgaande dat dit een custom post type is) verberg je niet.
Of je dit vervolgens in functions.php moet doen is de vraag, omdat die aan je theme gelinkt is en deze functionaliteit niets met je theme te maken heeft. Persoonlijk zou ik er voor kiezen hier een losse plugin voor te maken.
Dat is wel een duidelijk verhaal.
Maar geen idee wat/welke plugin ik dan moet pakken?
Ik heb echt goed gezocht maar ik heb er nu een stuk of 20 geprobeerd maar steeds houden ze geen rekening met de verschillende roles en of custum types.............zucht!
Je kan die plugin natuurlijk ook zelf maken.
Hoe dan?
Wat je zoekt om de admin op te schonen zijn deze functies:
$wp_admin_bar->remove_menu( 'new-content' ); etc die je koppelt aan de admin_bar_menu hook, en deze:
remove_menu_page('users.php'); die je koppelt aan de admin_menu hook.
Dit moet je in een if statement zetten die je koppelt aan of de user dit mag doen. (via de current_user_can() functie)
Misschien kun je met deze plugin custom user roles toekennen?
https://nl.wordpress.org/plugins/user-role-editor/
Toevoeging op 28/03/2017 21:14:24:
Jjriet petersen op 28/03/2017 17:59:08:
Hoe dan?
Ik zie je vraag nu pas. Ik zal morgen even wat opschrijven. Ik heb voor een site die ik beheer een soortgelijke plugin gemaakt alleen die selecteert mij eruit op mijn email adres en niet de admin op user role. (omdat ik toch de enige admin ben en er uberhaupt maar 2 accounts zijn)
In principe is dat verder wel ongeveer wat je nodig hebt, alleen dat stukje moet even aangepast worden.
Toevoeging op 29/03/2017 09:14:13:
Probeer deze code eens. Maak een mapje aan met de gewenste plugin naam en upload die naar de map wp-content/plugins op je server. In het mapje zet je een bestand met de naam index.php en daar zet je deze code in:
(let op, verander op de bovenste regel de Plugin Name naar de gewenste plugin naam, zoals je ook de map genoemnd hebt.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
/*
Plugin Name: Vul hier een plugin naam in
Plugin URI: -
Description: De admin aanpassen zodat subscribers geen posts kunnen maken maar wel recepten
Version: 1.0
License: GPLv2 or later
*/
//plusje met 'new' weghalen uit de admin bar
function schoonmaken_admin_bar( $wp_admin_bar ) {
if ( !current_user_can( 'manage_options' ) ) {
$wp_admin_bar->remove_menu( 'new-content' );
}
}
add_action( 'admin_bar_menu', 'schoonmaken_admin_bar', 999 );
//menu links weghalen voor iedereen behalve de administrator
function remove_admin_menu_links(){
if ( !current_user_can( 'manage_options' ) ) {
remove_menu_page( 'edit.php' );
}
}
add_action( 'admin_menu', 'remove_admin_menu_links' );
?>
/*
Plugin Name: Vul hier een plugin naam in
Plugin URI: -
Description: De admin aanpassen zodat subscribers geen posts kunnen maken maar wel recepten
Version: 1.0
License: GPLv2 or later
*/
//plusje met 'new' weghalen uit de admin bar
function schoonmaken_admin_bar( $wp_admin_bar ) {
if ( !current_user_can( 'manage_options' ) ) {
$wp_admin_bar->remove_menu( 'new-content' );
}
}
add_action( 'admin_bar_menu', 'schoonmaken_admin_bar', 999 );
//menu links weghalen voor iedereen behalve de administrator
function remove_admin_menu_links(){
if ( !current_user_can( 'manage_options' ) ) {
remove_menu_page( 'edit.php' );
}
}
add_action( 'admin_menu', 'remove_admin_menu_links' );
?>
Dit is overigens niet een hele nette oplossing, wel veruit de makkelijkste. Het verwijderd de menu options voor het maken van een nieuwe blog post voor iedereen behalve de administrator en super admin bij multi sites. Als een subscriber in zijn browser echter direct de link voor het aanmaken van een blogpost in typt dan komt hij nog steeds gewoon in het scherm voor het aanmaken van een blog post.
Dat is dus een beetje een gok die je neemt, hoe graag willen jouw users stiekum blog posts aanmaken en hoe erg is het als het een keer gebeurd? Wil je dat risico echt niet nemen dan moet je recepten (er nog steeds van uit gaande dat dat een custom post type is) gaan aanpassen en custom capabilities geven die je vervolgens handmatig moet koppelen aan de user roles.