【WordPress】固定ページの編集権限を特定のユーザーに制限する方法(プラグインなし)

WordPressでは、特定の固定ページのみを特定のユーザーに編集させたい場合、プラグインを使用せずにテーマのfunctions.phpファイルにカスタムコードを追加することで実現できます。この記事では、その具体的な手順を解説します。

functions.phpファイルの編集

まず、WordPressテーマのfunctions.phpファイルを開きます。このファイルにカスタムコードを追加することで、固定ページの編集権限を制御します。

カスタムコードの追加

次に、以下のコードをfunctions.phpファイルに追加します。このコードは、特定の固定ページの編集を特定のユーザーにのみ許可するものです。

function restrict_page_editing($allcaps, $cap, $args) {
    // 編集を許可する特定のユーザーID
    $allowed_user_ids = array(1, 2, 3); // 例: ユーザーID 1, 2, 3 のみ許可

    // 編集を許可する特定の固定ページID
    $allowed_page_ids = array(10, 20, 30); // 例: 固定ページID 10, 20, 30 のみ許可

    // 現在のユーザーIDを取得
    $current_user_id = get_current_user_id();

    // 編集しようとしている投稿のIDを取得
    $post_id = isset($args[2]) ? $args[2] : 0;

    // 投稿のタイプを取得
    $post_type = get_post_type($post_id);

    // 固定ページ編集の権限を制限
    if ($post_type == 'page' && in_array($post_id, $allowed_page_ids) && in_array($current_user_id, $allowed_user_ids)) {
        // 権限を与える
        $allcaps['edit_post'] = true;
        $allcaps['delete_post'] = true;
    } elseif ($post_type == 'page') {
        // 権限を取り上げる
        $allcaps['edit_post'] = false;
        $allcaps['delete_post'] = false;
    }

    return $allcaps;
}
add_filter('user_has_cap', 'restrict_page_editing', 10, 3);

コードの解説

  • ユーザーIDとページIDの設定
    $allowed_user_ids配列には、編集を許可するユーザーのIDを設定します。
    $allowed_page_ids配列には、編集を許可する固定ページのIDを設定します。
  • ユーザーとページのチェック
    現在のユーザーIDと編集しようとしている固定ページのIDを取得し、これらが許可されたIDリストに含まれているかをチェックします。
  • 権限の設定
    許可されたユーザーが許可されたページを編集しようとする場合、edit_postおよびdelete_post権限を与えます。それ以外の場合は、これらの権限を取り上げます。

許可されたユーザーがすべての固定ページを編集可能にする

以下のコードを追加します。このコードは、特定のユーザーに対してすべての固定ページの編集を許可するものです。

function allow_user_edit_all_pages($allcaps, $cap, $args) {
    // 編集を許可する特定のユーザーID
    $allowed_user_ids = array(1, 2, 3); // 例: ユーザーID 1, 2, 3 のみ許可

    // 現在のユーザーIDを取得
    $current_user_id = get_current_user_id();

    // 投稿のタイプを取得
    $post_type = isset($args[2]) ? get_post_type($args[2]) : '';

    // 固定ページ編集の権限を設定
    if ($post_type == 'page' && in_array($current_user_id, $allowed_user_ids)) {
        // 権限を与える
        $allcaps['edit_pages'] = true;
        $allcaps['edit_others_pages'] = true;
        $allcaps['delete_pages'] = true;
        $allcaps['delete_others_pages'] = true;
    }

    return $allcaps;
}
add_filter('user_has_cap', 'allow_user_edit_all_pages', 10, 3);

注意事項

カスタムコードを追加する際は、必ず事前にバックアップを取ってから行ってください。また、ユーザーIDや固定ページIDは実際のものに合わせて調整してください。