web-dev-qa-db-ja.com

カスタム投稿タイプ機能

私はいくつかの支援をいただければ幸いです。

カスタムインポートプロセスによって自動的に作成されるコンテンツには、カスタム投稿タイプのコインがあります。すべてのユーザーがコイン投稿に対して特定の操作を実行できないようにします。具体的には、ユーザーがコインを削除したり、公開ステータスを変更したり、表示設定を変更したりできないようにします。

投稿タイプを登録しました。

function my_post_type() {
    register_post_type('coin',
            array(
                'labels' => array(
                    'name' => __( 'Coins' ),
                    'singular_name' => __( 'Coin' ),
                    'view_item' => __( 'View Coin' ),
                    'edit_item' => __( 'Edit Coin' ),
                    ),
                'public' => true,
                'menu_position' => 5,
                'capability_type' => 'coin',
                )
            );
}
add_action('init', 'my_post_type');

機能の処理方法を指定しました。

function my_map_meta_cap( $caps, $cap, $user_id, $args ) {
    if (preg_match('/_coins?$/', $cap) == 1){
        $post = get_post( $args[0] );
        $post_type = get_post_type_object( $post->post_type );
        $caps = array();
        $disallowed = array(
                'delete_coin',
                'publish_coins',
                );
        if (in_array($cap, $disallowed)){
            $caps[] = 'do_not_allow';
        }
    } 
    return $caps;
}
add_filter( 'map_meta_cap', 'my_map_meta_cap', 10, 4 );

これはコインポストの削除を防ぎます。これはコインポストの視認性の調整を妨げます。これは、ユーザーがコイン投稿を公開するのを防ぎます。ただし、ユーザーがコインの投稿ステータスを下書きまたはレビュー待ちに変更することを妨げるものではありません。

さらに、コイン投稿はインポートルーチンによってのみ作成されるため、ユーザーが新しいコイン投稿を追加できないようにします。私はこれを行うことができる方法についての情報を見つけていません。

誰かが私を助けることができるか、私はあまりにも多くのワードプレスを求めていますか?

4
Doug Miller

このセクションのコードはかなり厳格であるため、これを実行するのに適した方法はありません。 JavaScriptを使って要素を削除するだけです。要素を削除するだけで(隠すだけでなく)、機能を無効にします。あなたのニーズに合わせて以下をカスタマイズできます。

  1. 禁止ボタンが画面に表示されないように、CSSを使用してポストアクションの内側のボックスを非表示にします。これがないと、しばらくボタンが表示されてから消えます。
  2. 要素の削除
  3. ポストパブリッシングアクションの内側のボックスをもう一度表示します。

例:

add_action('admin_head-post.php', 'remove_publishing_actions');
add_action('admin_head-post-new.php', 'remove_publishing_actions');
function remove_publishing_actions(){
    global $post;
    if($post->post_type == 'post'){
        //check user capabilities here
        echo "<style type='text/css'>
                /* hide the publishing box until we remove the elements */
                #submitpost{display:none;}
            </style>";

        echo "
            <script type='text/javascript'>
                jQuery(document).ready(function($){
                    //Remove whatever elements you don't want
                    $('#misc-publishing-actions, #save-action, #delete-action').remove();
                    //Show the publish actions
                    $('#submitpost').show();
                });
            </script>

        ";
    }
}

Styleとscriptタグをエコーする前に、おそらくあなたのカスタムユーザcapをチェックするべきです。お役に立てれば!

3
Brian Fegter