it-swarm.com.de

Beschränken Sie den Zugriff auf eine Seite im Backend

Wie kann ich die Bearbeitung einer Seite vom Backend nur auf einen bestimmten Benutzer beschränken?

Ich habe ein paar Plugins ausprobiert, aber ich dachte, es wäre der richtige Weg für mich, es ohne Plugins zu machen.

Welche Maßnahmen kann ich ergreifen, um dies zu lösen?

3
Sankalp Mishra

Dies kann in zwei Schritten erfolgen. Fügen Sie zunächst der Seite /wp-admin/edit.php?post_type=page einen Haken hinzu, um zu verhindern, dass die gewünschte Seite für andere Benutzer angezeigt wird. Ein weiterer Haken, der nicht autorisierte Benutzer davon abhält, direkt auf die Seite zuzugreifen, ist /wp-admin/post.php?post=ID&action=edit.

Hier ist der Beitragstyp page, er kann jedoch in einen anderen geändert werden. Nehmen Sie die in den Kommentaren angegebenen Anpassungen vor:

/**
 * 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();
}

Relevante Fragen und Antworten:
- Wo soll ich meinen Code ablegen: plugin oder functions.php?
- Aktualisiere die Anzahl der Posts (veröffentlicht, Entwurf, nicht angehängt) in der Admin-Oberfläche

2
brasofilo