En fait, je construis un type personnalisé sur WP et je dois pouvoir limiter l'accès ultérieur à un rôle d'utilisateur, par exemple. dans la zone d'administration, les collaborateurs peuvent voir les publications mais ne peuvent pas les modifier, il suffit de les ouvrir en lecture seule. J'ai utilisé des plugins (Adminimize et User Role Editor) mais, autant que je sache, ils ne répondent pas à mes besoins.
Quelqu'un me donne-t-il des instructions pour résoudre ce problème?
la suggestion de brasolfilo de supprimer la méta-boîte d'envoi n'est qu'un élément de ce que je considérerais comme une solution complète. Je peux pirater un bouton "soumettre" dans cette page à l'aide de FireBug ou de quelques autres outils, en quelques minutes.
Je voudrais...
post-new.php
pour ce type de publication pour les utilisateurs qui ne devraient avoir qu'un accès en lecture seule.Le code suivant utilise le type de message "Livre" qui se trouve dans Codex . Vous pouvez le modifier pour correspondre à votre CPT.
post-new.php
function conditional_redirect_post_new_wpse_94776() {
global $_REQUEST,$pagenow;
if (!empty($_REQUEST['post_type'])
&& 'book' == $_REQUEST['post_type']
&& !empty($pagenow)
&& 'post-new.php' == $pagenow
&& !current_user_can('administrator'))
{
wp_safe_redirect(admin_url('edit.php?post_type=book'));
}
}
add_filter('admin_menu','conditional_redirect_post_new_wpse_94776');
function remove_add_new_menu_wpse_94776() {
if (!current_user_can('administrator')) {
remove_submenu_page('edit.php?post_type=book','post-new.php?post_type=book');
}
}
add_action('admin_menu','remove_add_new_menu_wpse_94776');
function reset_post_new_link_wpse_94776() {
global $post_new_file,$post_type_object;
if (!isset($post_type_object) || 'book' != $post_type_object->name) return false;
if (!current_user_can('administrator')) {
$post_type_object->labels->add_new = 'Return to Index';
$post_new_file = admin_url('edit.php?post_type=book');
}
}
add_action('admin_head','reset_post_new_link_wpse_94776');
function stop_submit_wpse_94776() {
if (!empty($_POST) && $_POST['post_type'] == 'book' && !current_user_can('administrator')) {
if (true === DOING_AJAX) {
exit;
}
if (!empty($_POST['post_ID'])) {
wp_safe_redirect(admin_url('post.php?post='.$_POST['post_ID'].'&action=edit'));
exit;
} else {
wp_safe_redirect(admin_url('edit.php?post_type=book'));
exit;
}
}
}
add_action('admin_init','stop_submit_wpse_94776');
Je pense l'a eu. Cela semble fonctionner comme je l'ai testé, mais je ne serais pas surpris qu'il y ait des bogues, en particulier dans ce dernier bloc de code, ni s'il y avait des façons plus élégantes de faire les mêmes choses. Caveat Emptor . Pas de remboursement.
Si vous supprimez simplement la méta-boîte, il n'y a aucun moyen de sauvegarder/mettre à jour le message. Testé ici avec le type de poste régulier:
add_action( 'do_meta_boxes', 'remove_publish_mbox_wpse_94776', 10, 3 );
function remove_publish_mbox_wpse_94776( $post_type, $position, $post )
{
remove_meta_box( 'submitdiv', 'post', 'side' );
}
Il pourrait y avoir problèmes avec sauvegarde automatique et révisions.
Une autre solution serait de rendre les champs en lecture seule avec jQuery, mais ce n’est peut-être pas très solide.
Enfin, une autre option serait supprimer les champs Titre et contenu et imprimer texte simple en remplacement.