Soporte » Plugins y Hacks » Hacks » Remover «cap update_core» a Usuario

  • Resuelto derzz

    (@derzz)


    Hola, tengo un problema, por que en una instalación de prueba de WP, quiero quitarle la capacidad de actualizar el core, pero no puedo, se sigue viendo igual. Pero si se lo quito al ROL si funciona.

    Nota: Se lo estoy quitando al Usuario 1.

    Este es mi código:

    <?php
    
    /*
    Plugin Name: RC Utilities
    Plugin URI: http://URI_Of_Page_Describing_Plugin_and_Updates
    Description: A brief description of the Plugin.
    Version: 1.0
    Author: Renzo Carlos
    Author URI: http://URI_Of_The_Plugin_Author
    License: A "Slug" license name e.g. GPL2
    */
    
    //add submenu page in options
    function rc_utilities_create_submenu() {
        add_submenu_page(
            'options-general.php',
            __( 'RC Utilities', 'rc-utilities' ),
            'RC Utilities',
            'manage_options',
            'rc-utilities',
            'rc_page_render'
        );
    }
    add_action( 'admin_menu', 'rc_utilities_create_submenu' );
    
    //create a panel options for RC utilities
    function rc_page_render(){
        include plugin_dir_path( __FILE__ ) . 'rc-utilities.php';
    }
    
    //registred group options
    function register_mysettings() { // whitelist options
        register_setting( 'rc-option-group', 'rcu-options' );
    }
    add_action( 'admin_init', 'register_mysettings' );
    
    //Obtain all options
    $rcu_options = get_option('rcu-options');
    
    //option disable update core
    if ( isset($rcu_options['dis_upd_core']) ){
        add_filter( 'auto_update_core', '__return_false' );
    }
    
    //option allow minor update core
    if ( isset($rcu_options['allow_min_core_upd']) ){
        add_filter( 'allow_minor_auto_core_updates', '__return_true' );
    }
    
    //option allow update plugins
    if ( isset($rcu_options['allow_upd_plugins']) ){
        add_filter( 'auto_update_plugin', '__return_false' );
    }
    
    //option allow update themes
    if ( isset($rcu_options['allow_upd_themes']) ){
        add_filter( 'auto_update_themes', '__return_false' );
    }
    
    //hide message of updates for all but no admin
    if ( isset($rcu_options['allow_alert_upd']) AND $rcu_options['allow_alert_upd'] == 'no-admin' ){
        function hide_update_notice_to_all_but_admin_users()
        {
            if (!current_user_can('update_core')) {
                remove_action( 'admin_notices', 'update_nag', 3 );
            }
        }
        add_action( 'admin_head', 'hide_update_notice_to_all_but_admin_users', 1 );
    }else{
        function hide_update_notice_to_all()
        {
            remove_action( 'admin_notices', 'update_nag', 3 );
        }
        add_action( 'admin_head', 'hide_update_notice_to_all', 1 );
    
    }
    
    //remove capability for update core
    if (  $rcu_options['capability_upd_core'] == 'for_me' ){
    
        function remove_cap_update_core(){
            $user_id = 1;
    
            $user= new WP_User( $user_id );
            $user->remove_cap('update_core');
    
        }
        add_action('init', 'remove_cap_update_core');
    
    }
Viendo 7 respuestas - de la 1 a la 7 (de un total de 7)
  • Buenas,
    con «viendo igual» quieres decir que lo ves en el menú de la columna izquierda?
    Mirando rápidamente tu código (no lo he leído/entendido en detalle) tan solo quitas la posibilidad de usar esa opción al usuario indicado… no lo estás quitando del menú..

    un punto de partida sería
    https://codex.wordpress.org/Function_Reference/remove_menu_page

    Aunque tendrás que especificar el usuario para el que estás quitando el elemento.. ya que de otra forma se lo quitas a todos

    Un saludo

    PD: personalmente no veo muy bien eso de quitar la opción de actualizar al usuario 1.. el cual suele ser el admin. Ten cuidado con eso y recuerda crear la función de desinstalar el plugin en la cual debes retornar lo que quitaste

    • Esta respuesta fue modificada hace 3 años, 10 meses por oldlastman.

    Hola, no, no me refiero al menú. Si sé que no estoy removiendo el menu, me refiero a la capacidad.. Ya que si ingreso a updates el usuario 1 sigue con la capacidad de update_correo
    .

    Nota: No quiero quitar aún el menú updates por que me sirve para verificar que se renueva la capacidad.

    buenas,
    he estado testeando un poco tu código y leyendo sobre el tema
    si no me confundo la capability update_core está asignada al rol administrator, no al usuario individual por lo que no sería posible quitar esa opción de un usuario concreto

    aquí un poco mas de información
    https://wordpress.org/support/topic/remove-caps/

    un saludo

    PD: si consideras tu duda resuelta por favor marca el post como resuelto, puedes hacerlo en la columna izquierda donde indica «estado»

    Entonces el plugin advanced access mánager, como lo quita para usuarios por independiente..?

    Lo siento no uso advanced access mánager así que no se si usa algún método especial

    si lo has probado y funciona en la forma que deseas.. la única forma es que abras el código del plugin y lo revises.

    Por mi parte, he intentado una modificación de tu código para forzar siempre o incluso usando los comando de wp-cli e independientemente de lo que hiciera sigue manteniéndose el permiso

    alternativas tienes algunas como:

    • crear un nuevo rol y tomar solo los permisos deseados
    • asignar al usuario 1 al nuevo rol

    o bien

    • quitar el permiso del rol administrator
    • y dar el permiso sólamente a los usuarios específicos que deben tenerlo

    un saludo

    • Esta respuesta fue modificada hace 3 años, 10 meses por oldlastman.

    Bueno, creo que la segunda solución sería la mejor.. Probaré con esa aún es más larga..

    Buenas,
    Si consideras que tu duda está solucionada o has conseguido un método mejor (si nos lo cuentas sería genial) por favor marca el post como resuelto. Puedes hacerlo en la columna izquierda donde indica «estado»

    Un saludo
    PD: Ya que prestar ayuda nos consume tiempo a los voluntarios si quieres agradecérnoslo lo mejor que puedes hacer es ayudar a alguien mas en los foros.

Viendo 7 respuestas - de la 1 a la 7 (de un total de 7)
  • El debate ‘Remover «cap update_core» a Usuario’ está cerrado a nuevas respuestas.