Recursos do tipo pós-personalizado

4

Eu tenho um cenário único que gostaria de receber ajuda.

Eu tenho um tipo de postagem personalizada, moeda, para o conteúdo que é criado automaticamente por um processo de importação personalizado. Eu gostaria de restringir todos os usuários de executar determinadas ações em quaisquer mensagens de moeda. Especificamente, desejo impedir que qualquer usuário exclua uma moeda, altere o status publicado ou altere a visibilidade.

Eu registrei um tipo de postagem:

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');

Eu especifiquei como lidar com os recursos:

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 );

Isso impede a exclusão de postagens de moedas. Isso impede o ajuste da visibilidade de um poste de moedas. Isso impede que os usuários publiquem um post de moeda. No entanto, isso não impede que os usuários alterem um status de postagem de moeda para rascunho ou revisão pendente.

Além disso, gostaria de impedir que os usuários possam adicionar novas postagens de moedas, pois as mensagens de moeda só devem ser criadas pela rotina de importação. Eu não encontrei nenhuma informação sobre como eu poderia fazer isso.

Alguém pode me ajudar ou estou pedindo muito do wordpress?

    
por Doug Miller 20.07.2012 / 19:18

1 resposta

3

Não há uma boa maneira de fazer isso, pois o código desta seção é bastante rígido. Você pode simplesmente remover os elementos via JavaScript. Removendo (e não apenas ocultando) os elementos, você desativa a funcionalidade. Você pode personalizar o seguinte para as suas necessidades, tenho certeza.

  1. Use CSS para ocultar a caixa interna de ações da postagem para que os botões proibidos nunca sejam exibidos na tela. Sem isso, você verá os botões por um momento e depois eles desaparecem.
  2. Remoções dos elementos
  3. Mostrar novamente a caixa interna de ações de publicação de postagem.

Exemplo:

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>

        ";
    }
}

Provavelmente, você deve verificar o seu limite de usuário personalizado antes de exibir o estilo e as tags de script. Espero que isso ajude!

    
por Brian Fegter 20.07.2012 / 22:24