質問: ### 概要 WordPressで作成したメディアサイトがあります。 商品ページ(投稿)が複数あります。 そこで (1) 1商品につき1ユーザーがログインして詳細情報を入れられるようにしたい (2) 編集ページのカスタムフィールドに記入してもらいたい (3) 他のあらゆるpost(カスタム投稿など)を見れなくしたい ### 問題点 (1) 「特定の投稿のみ」編集できる権限のユーザーを作りたい(複数) (2) 本文記入できないようにしたい (3) 商品はメインのpost。カスタム投稿他を非表示にする方法は ### 手応え ユーザー管理権限をいじればなんとかなるだろうとは感じています。 (2)(3)はfunction.phpで調整できそうですが、(1)がわからない。 ### 試したこと (1)のユーザー権限について プラグイン「User Roll Editor」では希望までの絞り込みができませんでした。 似たプラグインもだめでした。(Permission Groups、User Access Manager) 「特定の1投稿のみ」に編集許可を与えるという条件指定を達成する方法が知りたい。 他の方の質問を見ていたら、プラグイン「WP-Members」で会員サイト形式にする方法も可能性を感じましたが、触ったことがなく、そもそもフロントエンドからの編集ができるのか不明。可能ならば手段にこだわりはありません。 こんな私にどうか助言をいただけますと幸いです。
回答: 自分だったらどうするか、概要だけ書いておきます。 (product投稿タイプと仮定) 【追記】雰囲気が分かるようにしてみました。 ・ログインユーザーのみアクセス可能なpage-editlist.phpを用意し、編集専用ユーザーがログインすると、そのページに強制リダイレクトするように設定。 =>省略 ・編集専用ユーザーは管理画面に入ろうとしても、page-editlist.phpのページにリダイレクトするように設定。 =>省略 ・page-editlist.phpでは、カスタムフィールドで事前に割り振られた担当ユーザーIDを基に、「自分が編集することができる記事リスト一覧(およびリンク)」を表示させ、リンクをクリックするとその製品ページへと飛ぶ。 ※カスタムフィールド名をwriter_idとします。 ``` あなたが担当する記事リスト 'product', 'posts_per_page' => -1, 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'writer_id', 'value' => $user_id, 'type' => 'NUMERIC', 'compare' => '=' ), ) ); if( $products = get_posts( $args ) ){ ?> ID );?> ID, 'writer_id', true ); $user_id = get_current_user_id(); if( is_user_logged_in() && $user_id == $writer_id ){ ?> 商品情報更新 ``` functions.phpに追記 ``` add_action( 'wp_ajax_update_productinfo', 'update_productinfo'); function update_productinfo(){ $my_nonce = isset($_POST['_wpnonce']) ? $_POST['_wpnonce'] : null; if( wp_verify_nonce( $my_nonce, 'UPDATEPRODUCTINFO' ) ){ //製品概要についてproduct_descというキーのカスタムフィールドがあったとする $product_desc = filter_input( INPUT_POST, 'product_desc', FILTER_SANITIZE_STRING ); $post_id = filter_input( INPUT_POST, 'post_id', FILTER_SANITIZE_NUMBER_INT ); if( !empty( $product_desc ) ){ return update_post_meta( $post_id, 'product_desc', $product_desc ); } } } ```