Cómo eliminar el tipo de entrada predeterminado de la barra de herramientas de administración

5 feb 2018, 05:30:30
Vistas: 21.2K
Votos: 11

Estamos configurando un nuevo WordPress para usar tipos de entrada personalizados, y queremos que nuestros editores inicien sesión y vean solo los tipos de entrada personalizados, no el tipo de entrada predeterminado 'post'. Hemos podido eliminar 'post' del menú de Administración usando este truco, pero eso todavía deja el botón "+ Nuevo" en la barra de herramientas de administración, que contiene una opción de entrada y por defecto crea una entrada. ¿Hay alguna manera fácil y segura de eliminar 'post' del botón de la barra de herramientas nuevo y/o ocultar el botón nuevo de la barra de herramientas?

2
Comentarios

Si eliminas las capacidades relacionadas con publicaciones del rol de Editor (o el que estés usando), estas opciones no deberían aparecer.

Jacob Peattie Jacob Peattie
5 feb 2018 05:38:30

Si el tipo de publicación se niega a anularse, y si la función "register_post_type" no está en functions.php, verifica si el registro está guardado en un "plugin de uso obligatorio". Como recordatorio, coloco este comentario al inicio de mi functions.php "/ si algo está atascado, ¡busca en los plugins de uso obligatorio!!! /"

Dave Miller Dave Miller
22 abr 2023 15:53:20
Todas las respuestas a la pregunta 4
2
17

Necesitas engancharte a 3 diferentes hooks de acción para ocultar completamente el tipo de entrada predeterminado. Sin embargo, el acceso directo a la entrada predeterminada mediante URL sigue siendo posible. Así que, comencemos.

El Menú Lateral

add_action( 'admin_menu', 'remove_default_post_type' );

function remove_default_post_type() {
    remove_menu_page( 'edit.php' );
}

El enlace + Nuevo > Entrada en la Barra de Administración

add_action( 'admin_bar_menu', 'remove_default_post_type_menu_bar', 999 );

function remove_default_post_type_menu_bar( $wp_admin_bar ) {
    $wp_admin_bar->remove_node( 'new-post' );
}

El enlace + Nuevo en la Barra de Administración

function remove_add_new_post_href_in_admin_bar() {
    ?>
    <script type="text/javascript">
        function remove_add_new_post_href_in_admin_bar() {
            var add_new = document.getElementById('wp-admin-bar-new-content');
            if(!add_new) return;
            var add_new_a = add_new.getElementsByTagName('a')[0];
            if(add_new_a) add_new_a.setAttribute('href','#!');
        }
        remove_add_new_post_href_in_admin_bar();
    </script>
    <?php
}
add_action( 'admin_footer', 'remove_add_new_post_href_in_admin_bar' );


function remove_frontend_post_href(){
    if( is_user_logged_in() ) {
        add_action( 'wp_footer', 'remove_add_new_post_href_in_admin_bar' );
    }
}
add_action( 'init', 'remove_frontend_post_href' );

El Widget de Borrador Rápido en el Escritorio

add_action( 'wp_dashboard_setup', 'remove_draft_widget', 999 );

function remove_draft_widget(){
    remove_meta_box( 'dashboard_quick_press', 'dashboard', 'side' );
}
5 feb 2018 16:21:21
Comentarios

Esta es la forma más limpia, aunque el botón Nuevo en la barra de administración todavía apunta a post-new.php - se puede desactivar con un poco de Javascript como $(document).on('click', '#wp-admin-bar-new-content', function(){ return false })

Mina Mina
27 jul 2019 13:39:46

Esto parece funcionar perfectamente, pero: "A simple vista" todavía muestra las publicaciones (¡y no muestra los CPTs en ningún caso!), al igual que la parte "Próximos pasos" del elemento del panel "Bienvenido a WP" [que personalmente odio y descarto de todos modos]. Además, "Actividad" podría seguir mostrando publicaciones, aunque no debería si lo configuras correctamente.

user3445853 user3445853
25 mar 2021 22:55:42
0
14

Una solución alternativa, pero similar a la de Stefan y Rafa. Esto no genera errores y ten en cuenta que si navegas directamente a /wp-admin/edit.php no podrás ver la lista de entradas (tipo de publicación por defecto), ni editarlas.

Nota: este código no desactiva realmente el tipo de publicación por defecto, es decir, las publicaciones existentes seguirán publicadas y accesibles a través de su URL pública. Lo que hace es desactivar efectivamente el acceso en el backend al tipo de publicación por defecto para todos los usuarios.

function remove_default_post_type($args, $postType) {
    if ($postType === 'post') {
        $args['public']                = false;
        $args['show_ui']               = false;
        $args['show_in_menu']          = false;
        $args['show_in_admin_bar']    = false;
        $args['show_in_nav_menus']     = false;
        $args['can_export']            = false;
        $args['has_archive']           = false;
        $args['exclude_from_search']   = true;
        $args['publicly_queryable']    = false;
        $args['show_in_rest']          = false;
    }

    return $args;
}
add_filter('register_post_type_args', 'remove_default_post_type', 0, 2);
4 ene 2020 09:03:45
4

En principio es posible eliminar tipos de entradas ya registrados utilizando unregister_post_type(). Desafortunadamente esto no es posible para los tipos de entradas _builtin.

Alternativamente, es posible cambiar las capacidades requeridas para editar/crear/eliminar/... entradas de un tipo de entrada específico. Puedes usar el filtro register_post_type_args para modificar las capacidades requeridas para el tipo de entrada predeterminado post. Estableciendo todas las capacidades en false resultará en que nadie tenga acceso al tipo de entrada post predeterminado. WordPress es lo suficientemente inteligente como para ocultar automáticamente las entradas de navegación.

add_filter('register_post_type_args', function($args, $postType){
    if ($postType === 'post') {
        $args['capabilities'] = [
            'edit_post' => false,
            'read_post' => false,
            'delete_post' => false,
            'edit_posts' => false,
            'edit_others_posts' => false,
            'publish_posts' => false,
            'read' => false,
            'delete_posts' => false,
            'delete_private_posts' => false,
            'delete_published_posts' => false,
            'delete_others_posts' => false,
            'edit_private_posts' => false,
            'edit_published_posts' => false,
            'create_posts' => false,
        ];
    }

    return $args
}, 0, 2);
5 feb 2018 16:42:35
Comentarios

Gracias, puse este código en una función que se ejecutaba en el evento 'init', pero no pareció tener ningún efecto en mi interfaz de usuario. ¿Estoy enganchando el evento equivocado?

Paul Keister Paul Keister
5 feb 2018 19:48:37

Eso es demasiado tarde. WordPress registra todos los tipos de post _builtin en la acción init pero con una prioridad de 0.

El código anterior solo está registrando un filtro, no tienes que ponerlo dentro de otra acción/filtro, simplemente escríbelo directamente en el functions.php de tu tema, por ejemplo.

Stefan Stefan
5 feb 2018 20:47:33

+1. El problema es que muestra 3 avisos. "Notice: Undefined offset: 0 in /var/www/html/wp-includes/capabilities.php on line 70". No pude eliminarlos.

noway noway
17 nov 2019 13:37:41

Ten en cuenta que esto no elimina las taxonomías "category" y "post_tag", por lo que el elemento del menú de navegación "Posts" permanece (aunque sin permitirte ver o editar las entradas en sí mismas).

W Biggs W Biggs
22 jul 2020 18:31:32
1

La solución de Stefan es genial, pero si activas el modo de depuración podrás ver: Undefined offset: 0 en wp-includes/capabilities.php en la línea 62 además hay un ; faltante después de return $args

El código exhaustivo debería ser:

add_filter('register_post_type_args', function($args, $postType){
    if ($postType === 'post' && current_user_can( 'create_posts' ) && current_user_can( 'edit_post' ) ) {
        $args['capabilities'] = [
            'edit_post' => false,
            'read_post' => false,
            'delete_post' => false,
            'edit_posts' => false,
            'edit_others_posts' => false,
            'publish_posts' => false,
            'read' => false,
            'delete_posts' => false,
            'delete_private_posts' => false,
            'delete_published_posts' => false,
            'delete_others_posts' => false,
            'edit_private_posts' => false,
            'edit_published_posts' => false,
            'create_posts' => false,
        ];
    }
    return $args;
}, 0, 2);
18 mar 2019 12:20:48
Comentarios

current_user_can arroja un error. No está definido todavía en esta etapa.

noway noway
17 nov 2019 13:59:09