¿Cómo eliminar estos campos de la sección 'Perfil'?

14

Tengo que eliminar algunos campos de perfil de la página 'Perfil' de acuerdo con las funciones del usuario. Para eliminar el selector de color utilicé remove_action("admin_color_scheme_picker", "admin_color_scheme_picker") . Quiero eliminar estos campos:

  1. apodo
  2. Mostrar el nombre públicamente como
  3. Campos AIM, Yahoo, Google Talk y Acerca de ti
  4. La sección 'Mostrar barra de administración' junto con las 2 casillas de verificación

Revisé el archivo 'user-edit.php' para ver si hay alguna acción / filtro que me permita hacerlo, pero parece que no lo hay. ¿Puede alguien decirme cómo hacer esto? Cualquier ayuda sería apreciada. Gracias

EDITAR: Gracias @helenhousandi por la respuesta. Aunque ya lo había hecho de esta manera.

<?php
add_action('admin_footer-profile.php', 'remove_profile_fields');
function remove_profile_fields()
{
    if(current_user_can('custom_role'))
    { ?>
        <script type="text/javascript">
            jQuery("h3:contains('Personal Options')").next('.form-table').remove();
            jQuery("h3:contains('Personal Options')").remove();
            jQuery("h3:contains('About Yourself')").next('.form-table').remove();
            jQuery("h3:contains('About Yourself')").remove();
        </script>
<?php }
}
?>

Sé que esto es un poco más largo, ¡pero funcionó! Creo que voy a ir con la respuesta de @ helenhousandi.

    
pregunta Rutwick Gangurde 03.11.2011 - 11:36

7 respuestas

14

Para el filtro de métodos de contacto: user_contactmethods :

function update_contact_methods( $contactmethods ) {

    unset( $contactmethods['aim'] );
    unset( $contactmethods['jabber'] );
    unset( $contactmethods['yim'] );

    return $contactmethods;

}
add_filter( 'user_contactmethods', 'update_contact_methods' );
    
respondido por el Chris_O 03.11.2011 - 12:08
9

Aunque el filtro user_contactmethods es uno de los pocos para la pantalla de perfil de usuario, ya que no se requieren otros campos en WordPress, puede usar jQuery's .hide() y .remove() para deshacerse de los que no quiere sin complicaciones en términos de guardar la información. Claro, una persona sin JS todavía la vería, pero eso es una pequeña minoría y supongo que la información que cambia allí no afectará a nada.

Un ejemplo de eliminación de toda la pieza de opciones personales (muestre la barra de administración y el esquema de color). Sé que no es lo que estás buscando exactamente, solo quería darte un ejemplo rápido que tengo a mano:

// remove personal options block
if( is_admin() ){
    remove_action( 'admin_color_scheme_picker', 'admin_color_scheme_picker' );
    add_action( 'personal_options', 'prefix_hide_personal_options' );
}

function prefix_hide_personal_options() {
  ?>
    <script type="text/javascript">
        jQuery( document ).ready(function( $ ){
            $( '#your-profile .form-table:first, #your-profile h3:first' ).remove();
        } );
    </script>
  <?php
}

También, una nota sobre la opción Mostrar barra de administración: en 3.3, la barra de administración se está convirtiendo en el encabezado y, por lo tanto, no se puede activar o desactivar, por lo que no merece la pena preocuparse.

Actualicé el ejemplo del código para que sea más preciso y completo. Tenía algunas sobras allí.

    
respondido por el helenhousandi 03.11.2011 - 15:36
1

Desde el foro de soporte de wordpress Usted puede hacer la eliminación utilizando PHP. Esto elimina la sección Acerca de usted mismo:

if (! function_exists('remove_plain_bio') ){
    function remove_plain_bio($buffer) {
        $titles = array('#<h3>About Yourself</h3>#','#<h3>About the user</h3>#');
        $buffer=preg_replace($titles,'<h3>Password</h3>',$buffer,1);
        $biotable='#<h3>Password</h3>.+?<table.+?/tr>#s';
        $buffer=preg_replace($biotable,'<h3>Password</h3> <table class="form-table">',$buffer,1);
        return $buffer;
    }

    function profile_admin_buffer_start() { ob_start("remove_plain_bio"); }

    function profile_admin_buffer_end() { ob_end_flush(); }
}
add_action('admin_head', 'profile_admin_buffer_start');
add_action('admin_footer', 'profile_admin_buffer_end');

El código reemplaza el encabezado 'Acerca de ti mismo' con 'Contraseña' y luego elimina cualquier cosa entre esa y la siguiente tabla que encuentra (que es la tabla de contraseñas).

También el complemento WP Hide Dashboard hace un reemplazo de jQuery similar si desea extenderlo.

    
respondido por el icc97 01.02.2012 - 08:53
1

¡TENGA CUIDADO!

1) La eliminación de un campo puede no ser buena , como en la actualización, si no envía los campos esenciales al gancho de actualización de WORDPRESS, ¡entonces puede establecer valores vacíos en esos campos! (por ejemplo, al enviar el formulario, debe existir, es decir, <input name="username".../> )
Pienso que es mejor OCULTAR de los usuarios solo visualmente, con jquery .hide(); y no con .remove();
EJEMPLO de código para ocultar los campos " NOMBRE DE PANTALLA " y " NICK NAME ":

jQuery(document).ready(function( $ ){
    $("#nickname,#display_name").parent().parent().hide();
});

2) Para ocultar la barra de administración, hay una opción especial en el menú de wordpress (en Configuración) . para código personalizado, como por ejemplo

add_action('after_setup_theme', 'remove_admin_bar');

function remove_admin_bar()
{
  if (!current_user_can('administrator') && !is_admin()) 
  {
    show_admin_bar(false);
  }
}
    
respondido por el T.Todua 23.09.2014 - 09:35
1

Como parece que no hay un buen enlace de php para esto, terminé ocultando los campos con CSS y luego los quité con JS.

add_action( 'admin_head', 'remove_default_profile_fields' );

function remove_default_profile_fields() {

    global $pagenow;

    if( 'profile.php' != $pagenow) return;

    remove_action( 'admin_color_scheme_picker', 'admin_color_scheme_picker' );

    // <tr> selectors, each containing a field
    $tr = array(
        "tr.user-rich-editing-wrap",
        "tr.user-comment-shortcuts-wrap",
        "tr.user-first-name-wrap",
        "tr.user-last-name-wrap",
        "tr.user-admin-bar-front-wrap",
        "tr.user-profile-picture",
        "tr.user-user-login-wrap",
        "tr.user-display-name-wrap",
        "h2" // Personally I decided to remove all H2 tags too.
    );

    $selectors = implode(", ", $tr);

    // Hide the fields with css, so even if javascript is disabled they wont show up. 
    echo "<style>{$selectors}{display:none;}</style>"; ?>

    <script type="text/javascript">
        jQuery( document ).ready(function( $ ){
           // Remove selected <tr>'s
           $( '<?= $selectors; ?>' ).remove();
           // Remove any empty table that may have been left over
           $(".form-table:not(:has(tr))").remove();
        });
    </script>

  <?php
}
    
respondido por el Tobbe 10.09.2017 - 18:28
0

Utilizar

add_action('admin_head', 'remove_profile_fields');

y agregar

jQuery(document).ready(function(e) {

antes de JavaScript.

    
respondido por el Akhil Sharma 22.09.2016 - 07:04
-4

No hay filtros para deshabilitarlos. Mire la fuente ( /wp-admin/user-edit.php ) cuando necesite hacer cosas como esta. Puede ocultarlas con JS, pero aún pueden hacerse visibles y los valores se actualizan en POST.

La única opción viable es hackear el núcleo usted mismo. Solo asegúrese de manejar la actualización y de ignorar estos campos en POST.

    
respondido por el EarnestoDev 03.11.2011 - 13:23

Lea otras preguntas en las etiquetas