Capacidades de tipo de publicación personalizadas

4

Tengo un escenario un tanto único con el que agradecería alguna ayuda.

Tengo un tipo de publicación personalizada, moneda, para el contenido que se crea automáticamente mediante un proceso de importación personalizado. Me gustaría restringir a todos los usuarios de realizar ciertas acciones en cualquier publicación de monedas. Específicamente, quiero evitar que cualquier usuario elimine una moneda, cambie el estado publicado o cambie la visibilidad.

He registrado un tipo de publicación:

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

He especificado cómo manejar las capacidades:

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

Esto evita la eliminación de los mensajes de monedas. Esto evita el ajuste de la visibilidad de un puesto de monedas. Esto evita que los usuarios publiquen una publicación de moneda. Sin embargo, no impide que los usuarios cambien el estado de publicación de una moneda a un borrador o una revisión pendiente.

Además, me gustaría evitar que los usuarios puedan agregar nuevas publicaciones de monedas, ya que las publicaciones de monedas solo deben crearse mediante la rutina de importación. No he encontrado ninguna información sobre cómo podría hacer esto.

¿Puede alguien ayudarme o le estoy pidiendo demasiado a wordpress?

    
pregunta Doug Miller 20.07.2012 - 19:18

1 respuesta

3

No hay una buena forma de hacerlo, ya que el código de esta sección es bastante rígido. Simplemente puede eliminar los elementos a través de JavaScript. Al eliminar (y no solo ocultar) los elementos, deshabilita la funcionalidad. Puede personalizar lo siguiente según sus necesidades, estoy seguro.

  1. Use CSS para ocultar el cuadro interno de las acciones para que los botones prohibidos nunca se muestren en la pantalla. Sin esto, verás los botones por un momento y luego desaparecerán.
  2. Eliminación de los elementos
  3. Vuelve a mostrar el cuadro interno de las acciones de publicación.

Ejemplo:

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>

        ";
    }
}

Probablemente debería verificar su límite de usuario personalizado antes de repetir las etiquetas de estilo y script. Espero que esto ayude!

    
respondido por el Brian Fegter 20.07.2012 - 22:24

Lea otras preguntas en las etiquetas