Comment puis-je limiter la modification d'une page du backend à un utilisateur spécifique?
J'ai essayé quelques plugins mais je pensais que le faire sans plugins serait la voie à suivre pour moi.
Quelles mesures puis-je prendre pour résoudre ce problème?
Cela peut être fait en deux étapes. Tout d’abord, ajoutez un crochet à la page /wp-admin/edit.php?post_type=page
pour empêcher la page souhaitée d’apparaître pour les autres utilisateurs. Et un autre point d'ancrage pour rediriger les utilisateurs non autorisés d'essayer d'accéder directement à la page /wp-admin/post.php?post=ID&action=edit
.
Ici, le type de message est page
, mais vous pouvez le remplacer par un autre. Faites les ajustements indiqués dans les commentaires:
/**
* Adjust the following:
* post_type
* User ID
* Post ID
*/
add_action( 'load-edit.php', 'load_custom_filter_wpse_94387' );
add_action( 'load-post.php', 'block_page_access_wpse_94387' );
/**
* Executed only in /wp-admin/edit.php
*
* Checks current post type and bail if not correct
*/
function load_custom_filter_wpse_94387()
{
global $typenow;
// Not the correct post type, do nothing
if( 'page' != $typenow ) // <--- adjust
return;
add_filter( 'posts_where' , 'posts_where_wpse_94387' );
}
/**
* If not authorized user, remove page from listing
*/
function posts_where_wpse_94387( $where )
{
$current_user = wp_get_current_user();
if ( 2 == $current_user->ID ) // <--- adjust
return $where;
$where .= ' AND ID != 119'; // <--- adjust
return $where;
}
/**
* Check if unauthorized user is trying to access restricted page
*/
function block_page_access_wpse_94387()
{
// Check for post=119, if it is not this one, do nothing
if( !isset( $_GET['post'] ) || '119' != $_GET['post'] ) // <--- adjust
return;
// Check for user, if allowed user, do nothing
$current_user = wp_get_current_user();
if ( 2 == $current_user->ID ) // <--- adjust
return;
// Invalid attempt to edit the page, redirect
wp_redirect( admin_url( 'edit.php?post_type=page' ) );
exit();
}
Questions-réponses pertinentes:
- Où mettre mon code: plugin ou functions.php?
- Mettre à jour le décompte des publications (publié, brouillon, non attaché) dans l'interface d'administration