サポート » 使い方全般 » 投稿したユーザー以外の編集、閲覧禁止

  • 単一のWordpressの投稿に複数のユーザーが投稿、編集するサイトを構築しています。(マルチサイトではないです)
    ユーザーは10人以上で後から追加する可能性もあります。

    この状態で登録したユーザーは編集者権限を持たせて、ユーザーAが投稿した投稿aは
    ユーザーAと管理者のみが編集、閲覧が可能な状態を目指しています。
    (各ユーザーは自分の投稿しか見られず管理者はすべての投稿が見られる)

    過去の投稿を参考にして投稿一覧(edit.php)に自分以外の投稿の非表示及び
    投稿詳細の編集(post.php)は作成者が自分以外の場合アクセス不可に設定はできたのですが、メディアの挿入でメディアを選択する際にユーザーBの画像も表示されてしまうことが分かりました。
    (サイドバーからメディア一覧に表示する場合は表示及びアクセス不可能になっている)

    メディアを挿入の画像も自分のアップロードした画像のみを表示にしたいのですが何かいい方法はないでしょうか?
    また、ここ以外にも他ユーザーの投稿関係が閲覧、編集できてしまう可能性のある箇所は存在するでしょうか?

    参考までに現在このようなソースをfunctions.phpに書き込んでいます

    <?php
    //自分以外の投稿を非表示
    function my_pre_get_posts_filter(&$wp_query)
    {
        global $pagenow;
        $user = wp_get_current_user();
    
        if (WP_ADMIN && ($post_type = $wp_query->get('post_type'))) {
            if (in_array($pagenow, array('media-upload.php', 'upload.php')) && $post_type == 'attachment') {
                // メディアの表示情報を制限
                $wp_query->set('author', $user->ID);
            }
    
            if (in_array($pagenow, array('edit.php', 'edit-tags.php')) && $post_type == 'post' && !current_user_can( 'administrator' )) {
    			//特定のポストタイプの時に一覧を変更
                $wp_query->set('author', $user->ID);
            }		
    
    		if(in_array($pagenow, array('post.php'))){
    			//管理者ではなく、かつ投稿者がちがう場合エラーを吐く
    			$p = get_post($_REQUEST["post"]);
    			if($user->ID != $p->post_author && !current_user_can( 'administrator' )){
    				wp_die( __('You are not allowed to edit posts.'));
    			}
    		}
        }
    }
    
    add_action('pre_get_posts', 'my_pre_get_posts_filter', 10, 1);
    
    ?>

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • モデレーター jim912

    (@jim912)

    ajax_query_attachments_args フックを使うと、メディアを追加で表示されるメディアライブラリーの抽出条件をカスタマイズ可能です。以下は、アップロードしたユーザーのIDが1のものに絞り込むためのコードです。

    function filter_ajax_query_attachments( $query ) {
    	$query['author'] = 1;
    	return $query;
    }
    add_filter( 'ajax_query_attachments_args', 'filter_ajax_query_attachments' );
    トピック投稿者 gogoweb

    (@gogoweb)

    jim912さんのコードを参考に試したところ希望通りの動作になりました。
    ありがとうございます。

    その後気がついたけどメディアや投稿の抽出を制限してもすべての件数は全体表示になってしまいますね。ここも修正が必要そうです。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「投稿したユーザー以外の編集、閲覧禁止」には新たに返信することはできません。