Capacités et types de messages personnalisés
4 réponses
- votes
-
- 2013-07-30
Après une discussion rapide avec Magicroundabout qui amisen évidence une ressource utile de Justin Tadlock ,il s'avère que lesfonctionnalitéspour lestypes depublicationpersonnalisésn'existentpas réellement,sauf si vous utilisez add_cappour le rôle,parexemplepour letype depublicationpersonnalisé suivant:
add_action( 'init', 'register_cpt_gallery' ); function register_cpt_gallery() { $labels = array( 'name' => __( 'Galleries', 'gallery' ), 'singular_name' => __( 'Gallery', 'gallery' ), 'add_new' => __( 'Add New', 'gallery' ), 'add_new_item' => __( 'Add New Gallery', 'gallery' ), 'edit_item' => __( 'Edit Gallery', 'gallery' ), 'new_item' => __( 'New Gallery', 'gallery' ), 'view_item' => __( 'View Gallery', 'gallery' ), 'search_items' => __( 'Search Galleries', 'gallery' ), 'not_found' => __( 'No galleries found', 'gallery' ), 'not_found_in_trash' => __( 'No galleries found in Trash', 'gallery' ), 'parent_item_colon' => __( 'Parent Gallery:', 'gallery' ), 'menu_name' => __( 'Galleries', 'gallery' ), ); $args = array( 'labels' => $labels, 'hierarchical' => true, 'description' => 'Image galleries for teachers classes', 'supports' => array( 'title', 'editor', 'author'), 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'menu_icon' => get_bloginfo('template_url') . '/images/imagegallery.png', 'show_in_nav_menus' => true, 'publicly_queryable' => true, 'exclude_from_search' => false, 'has_archive' => true, 'query_var' => true, 'can_export' => true, 'rewrite' => true, 'capabilities' => array( 'edit_post' => 'edit_gallery', 'edit_posts' => 'edit_galleries', 'edit_others_posts' => 'edit_other_galleries', 'publish_posts' => 'publish_galleries', 'read_post' => 'read_gallery', 'read_private_posts' => 'read_private_galleries', 'delete_post' => 'delete_gallery' ), // as pointed out by iEmanuele, adding map_meta_cap will map the meta correctly 'map_meta_cap' => true ); register_post_type( 'gallery', $args ); }
Lesfonctionnalités supplémentaires doivent être ajoutées à un rôlepour que les autorisationsfonctionnent réellement dans lebackend,y compris «l'administrateur» -parexemple:
function add_theme_caps() { // gets the administrator role $admins = get_role( 'administrator' ); $admins->add_cap( 'edit_gallery' ); $admins->add_cap( 'edit_galleries' ); $admins->add_cap( 'edit_other_galleries' ); $admins->add_cap( 'publish_galleries' ); $admins->add_cap( 'read_gallery' ); $admins->add_cap( 'read_private_galleries' ); $admins->add_cap( 'delete_gallery' ); } add_action( 'admin_init', 'add_theme_caps');
J'espère que cela sera utile aux autres.
Deplus,lafonction detraduction
_x()
s'attend à ce que le deuxième argument soitstring $context
,quiest une courte description,et letroisième àstring $domain
. Lorsque vousne fournissezpas de description,utilisez lafonction detraduction__()
à laplace qui a lastring $domain
comme deuxième argument.After a quick chat with Magicroundabout who pointed out a useful resource from Justin Tadlock, it turns out that capabilities for custom post types don't actually exist unless you use add_cap to the role, for example for the following custom post type:
add_action( 'init', 'register_cpt_gallery' ); function register_cpt_gallery() { $labels = array( 'name' => __( 'Galleries', 'gallery' ), 'singular_name' => __( 'Gallery', 'gallery' ), 'add_new' => __( 'Add New', 'gallery' ), 'add_new_item' => __( 'Add New Gallery', 'gallery' ), 'edit_item' => __( 'Edit Gallery', 'gallery' ), 'new_item' => __( 'New Gallery', 'gallery' ), 'view_item' => __( 'View Gallery', 'gallery' ), 'search_items' => __( 'Search Galleries', 'gallery' ), 'not_found' => __( 'No galleries found', 'gallery' ), 'not_found_in_trash' => __( 'No galleries found in Trash', 'gallery' ), 'parent_item_colon' => __( 'Parent Gallery:', 'gallery' ), 'menu_name' => __( 'Galleries', 'gallery' ), ); $args = array( 'labels' => $labels, 'hierarchical' => true, 'description' => 'Image galleries for teachers classes', 'supports' => array( 'title', 'editor', 'author'), 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'menu_icon' => get_bloginfo('template_url') . '/images/imagegallery.png', 'show_in_nav_menus' => true, 'publicly_queryable' => true, 'exclude_from_search' => false, 'has_archive' => true, 'query_var' => true, 'can_export' => true, 'rewrite' => true, 'capabilities' => array( 'edit_post' => 'edit_gallery', 'edit_posts' => 'edit_galleries', 'edit_others_posts' => 'edit_other_galleries', 'publish_posts' => 'publish_galleries', 'read_post' => 'read_gallery', 'read_private_posts' => 'read_private_galleries', 'delete_post' => 'delete_gallery' ), // as pointed out by iEmanuele, adding map_meta_cap will map the meta correctly 'map_meta_cap' => true ); register_post_type( 'gallery', $args ); }
The additional capabilities should be added to a role for the permissions to actually work in the backend, including the 'administrator' - for example:
function add_theme_caps() { // gets the administrator role $admins = get_role( 'administrator' ); $admins->add_cap( 'edit_gallery' ); $admins->add_cap( 'edit_galleries' ); $admins->add_cap( 'edit_other_galleries' ); $admins->add_cap( 'publish_galleries' ); $admins->add_cap( 'read_gallery' ); $admins->add_cap( 'read_private_galleries' ); $admins->add_cap( 'delete_gallery' ); } add_action( 'admin_init', 'add_theme_caps');
I hope this is useful to others.
Additionally, the
_x()
translation function expects the second argument to bestring $context
, which is a short description, and the third to bestring $domain
. When not providing a description, use the__()
translation function instead which has thestring $domain
as the second argument.-
`add_theme_caps ()`ne doit être appelé qu'une seulefois,pas à chaquefois qu'unepage d'administrationest chargée.Il seraitpréférable d'utiliser `switch_theme` comme hookpour l'activation duthème ou` register_activation_hook` lors de l'activation duplugin.`add_theme_caps()` should be called one time only, not everytime an admin page is loaded. It would be better to use `switch_theme` as hook for theme activation or `register_activation_hook` on plugin activation.
- 14
- 2015-04-13
- d79
-
Agréable!J'aime utiliser wp clipour ajouter lesfonctionnalités s'il s'agit d'un siteentièrementpersonnalisé/unique car c'est une action quine doit seproduire qu'une seulefois.Nice! I like to use wp cli to add the capabilities if it's a completely custom/unique site since it's an action that only needs to happen once.
- 0
- 2017-12-01
- squarecandy
-
-
- 2013-07-30
Àmon humble avis,vousne cartographiezjamais vospropres capacités. Assurez-vous d'utiliser lepluginmapmeta cappour cefaire. http://codex.wordpress.org/Function_Reference/map_meta_cap
J'aipassé desjours àessayer demappermanuellementmes casquettespersonnalisées avec du code. Installez simplement ceplugin,mappez vos casquetteset désactivez unefois que voustravaillez. Si vous créez des rôlespersonnalisés,vous aurezbesoin duplugin Members .
Lafaçon dontje testepour ASSURER quemon rôle a ces capacités (parfois vousjurez que vous lefaitesmaisne lefaitespas réellement) créez unepage de débogage avec:
if( !function_exists( 'current_user_has_role' ) ){ function current_user_has_role( $role ){ $current_user = new WP_User( wp_get_current_user()->ID ); $user_roles = $current_user->roles; $is_or_not = in_array( $role, $user_roles ); return $is_or_not; } }
Cela vousmontrera quellesfonctionnalités vous avezen fait.
IMHO you never map your own capabilities. Make sure to use map meta cap plugin to do so. http://codex.wordpress.org/Function_Reference/map_meta_cap
I spent days trying to map my custom caps manually with code. Just install that plugin, map your caps and deactivate once working. If creating custom roles you WILL need Members plugin.
The way I test to MAKE sure my role has those capabilites (sometimes you swear you do but don't actually) make a debugging page with:
if( !function_exists( 'current_user_has_role' ) ){ function current_user_has_role( $role ){ $current_user = new WP_User( wp_get_current_user()->ID ); $user_roles = $current_user->roles; $is_or_not = in_array( $role, $user_roles ); return $is_or_not; } }
This will show you which capabilities you do in fact have.
-
- 2019-04-20
Pour lestypes demessagespersonnalisés,je NE PAS suggère d'utiliser le crochet:
add_action( 'registered_post_type', 'your_func', 10, 2 );
à laplace,je suggère d'utiliser:
add_filter( 'register_post_type_args', 'your_func', 10, 2 ); function your_func( $args, $name ) { if ( $name == "your_custom_post_name" ) ... }
For Custom Post Types, I DON'T suggest using hook:
add_action( 'registered_post_type', 'your_func', 10, 2 );
instead I suggest using:
add_filter( 'register_post_type_args', 'your_func', 10, 2 ); function your_func( $args, $name ) { if ( $name == "your_custom_post_name" ) ... }
-
la suggestionestbonne,maisellene répondpas à la question.the suggestion is a good one, but it does not answer the question.
- 0
- 2019-11-11
- Aurovrata
J'ai untype depublicationpersonnalisé dontje voudrais restreindre l'accès à certains rôles,cependant,j'ai déjà ajouté du contenu à l'aide dutype depublicationpersonnaliséet je doismaintenant les restreindre. Letype de capacité était "post"
Ce quiestbien car le contenu apparaît dans lebackend. Cependant,dès quej'ajoute desfonctionnalités,le contenu disparaît dubackend?
code complet:
J'ai égalementtesté cela avec untoutnouveautype depublicationpersonnaliséet quel que soit letype de capacité,j'obtiens lemêmeproblème,parexemplemême sije le supprimeet ajoutemonpersonnalisé: