web-dev-qa-db-ja.com

ユーザーが「公開」ではなく「レビュー用に送信」できるカスタマイズされたロール

私が達成しようとしている機能は、ユーザーが編集の下書きを送信できるが編集を公開できないユーザーロールです。編集内容は、編集者以上の役割のユーザーが公開する必要があります。

このStack Exchangeを少し検索しましたが、自分のニーズに合ったソリューションは見つかりませんでした。プラグインを避け、この機能を直接functions.phpファイルに組み込みたいと思います。

非ライブサンドボックス環境で作業しているため、さまざまなソリューションをテストする際に何かを壊す心配はありません。これまでのところ、これは私が持っているものです:

 $role_object = get_role( 'contributor' );
 $role_object->add_cap( 'edit_pages' );
 $role_object->add_cap( 'edit_others_pages' );
 $role_object->add_cap( 'edit_published_pages' );
 $role_object->add_cap( 'upload_files' );
 $role_object->remove_cap( 'publish_posts' );
 $role_object->remove_cap( 'publish_pages' );

add_filter('wp_insert_post_data','re_aprove');
 function re_aprove($data , $postarr){
    global $current_user;
    get_currentuserinfo();
    //check if current user is not admin
    if (!current_user_can('manage_options')){
        if ($data['post_status'] == "publish"){
            $data['post_status'] = "pending";
        }
    }
    return $data;
 }

2番目の機能はここで見つかりましたが、私にとって正しく機能していないようであり、2010年からそれを含む投稿を見つけたため、非推奨のソリューションである可能性があります。

この解決策が機能していないため、頭を悩ませています。寄稿者として、私はどのページの編集ページにもアクセスできますが、「レビュー用に送信」ボタンの代わりに「更新」ボタンが表示されます。 [更新]ボタンを押すと、編集ページが更新され、代わりに[レビュー用に送信]ボタンが表示され、ページダッシュボードページに更新されたページが[保留中]として表示されます。これまでのところ、ほとんどの部分に適しています。問題は、ページがフロントエンドで404になったことです。寄稿者としてそれを「更新」すると、ページが未公開になりますが、これは私が意図していたものではありません。

考え、提案、または解決策は大歓迎です。この機能は多くの人にとって非常に望ましいものだと思います。

御時間ありがとうございます。

1
PersonNinja

これらの新しい役割を特定の投稿タイプに制限するかどうかに大きく依存します。 「ワークフロープラグイン」を検索すると、既製のソリューションがいくつか見つかります。新しいロールのみがページを編集できるようにするものもあれば、任意の投稿タイプを編集できるものもあります。

特定のCPTにのみ影響を与えることができるユーザーを必要とするサイトを構築しました。したがって、たとえば、CPT1には「校閲者のみ」が編集できる「編集者」がいて、編集と公開ができるCPT1には「承認者」がいました。また、CPT2には「編集者」、CPT2には「承認者」などがあり、割り当てられたCPTのみを変更できます。

そこでの最初のステップは、CPTを登録するときにmap_meta_capを使用することでした。これにより、CPTごとにまったく新しいアクセス許可セットが作成されました。 2番目のステップはより複雑で、少しハッキーでした。最初に、管理者にnoscriptタグを追加して、JSをオフにした人が物事を編集したり公開したりできないようにしました。クイック編集を削除し、自動保存を無効にしたため、CPTを更新する唯一の方法は、JSを有効にしてエディターの完全画面に移動することでした。

そこから、admin_footer-post.phpにフックし、権限を確認しました。現在のユーザーが現在編集中の特定のCPTを公開または編集できなかった場合、jQueryを使用して[公開]ボタンを変更して[変更を保存]を変更し、フォームアクションを自分のプラグインURLに変更しました。プラグインは、すべてのPOSTデータを取得し、プログラムでカスタムステータスの新しい投稿を挿入し、そのCPTの「承認者」に確認方法の指示を記載したメールを送信します。画面。

私はそれがJSに依存していることを嫌い、コアパブリッシング機能をオーバーライドすることは好きではありませんが、これまでのところ、基本的に同じことを行う別のプラグイン以外は、それが複数のカスタムワークフローを処理する唯一の方法です。

1
WebElaine