Eliminar el campo "Sitio Web" de la información de contacto

8 abr 2013, 09:28:18
Vistas: 17.8K
Votos: 13

Quiero eliminar el campo del sitio web de la información de contacto del usuario. Utilizo lo siguiente para eliminar AIM, Jabber y Yahoo IM. Pero no puedo usar esto para eliminar el sitio web. ¿Alguien puede ayudar?

function remove_contactmethods( $contactmethods ) {
    // Eliminar métodos de contacto no deseados
    unset($contactmethods['aim']);
    unset($contactmethods['yim']);
    unset($contactmethods['jabber']);
    
    return $contactmethods;
}
add_filter('user_contactmethods','remove_contactmethods',10,1);
0
Todas las respuestas a la pregunta 5
6
14

Respuesta revisada y actualizada:

No podemos usar el filtro user_contactmethods para eliminar el envoltorio del sitio web, porque esta parte está codificada directamente en el archivo user-edit.php y no forma parte del bucle de contactos de usuario que se puede filtrar, generado por:

wp_get_user_contact_methods( $profileuser )

Ocultarlo con CSS

El elemento de fila del sitio web ahora tiene su propia clase .user-url-wrap:

<tr class="user-url-wrap">
    <th><label for="url"><?php _e('Sitio web') ?></label></th>
    <td>
        <input type="url" name="url" id="url" 
               value="<?php echo esc_attr( $profileuser->user_url ) ?>" 
               class="regular-text code" />
    </td>
</tr>

Anteriormente teníamos que usar jQuery para seleccionar la fila padre del campo #url y eliminarla.

Pero ahora podemos seleccionar fácilmente el envoltorio del sitio web y ocultarlo con CSS:

function remove_website_row_wpse_94963_css()
{
    echo '<style>tr.user-url-wrap{ display: none; }</style>';
}
add_action( 'admin_head-user-edit.php', 'remove_website_row_wpse_94963_css' );
add_action( 'admin_head-profile.php',   'remove_website_row_wpse_94963_css' );

Ocultando otros campos

Existen clases de fila similares:

tr.user-{field}-wrap

disponibles para los campos:

admin-color,
comment-shortcuts,
admin-bar-front,
user-login,
role,
super-admin,
first-name, 
last-name, 
nickname, 
display-name, 
email,
description, 
pass1, 
pass2, 
sessions, 
capabilities,
...

incluyendo todos los campos de los métodos dinámicos de contactos de usuario.

Aquí simplemente reemplazamos la parte {field} con el nombre del campo correspondiente.

Capturas de pantalla

Antes de eliminar la fila del sitio web: Antes


Después de eliminar la fila del sitio web: Después

8 abr 2013 09:52:18
Comentarios

Deberías usar .remove() en lugar de .hide()

Bainternet Bainternet
8 abr 2013 10:18:17

Esto no funciona para mí. ¿Este código debería ir en functions.php, verdad?

MidhuN MidhuN
8 abr 2013 10:25:42

Debes ser un usuario no administrador cuando lo pruebes o comentar la sentencia if con la prueba de capacidad. Funciona en functions.php, pero creo que es mejor tenerlo en un plugin para no perderlo cuando cambies el tema.

birgire birgire
8 abr 2013 10:34:50

¿Qué tal esto? apply_filters( "user_{$name}_label", $desc );

Brad Dalton Brad Dalton
11 jul 2015 01:51:34

Esto solo modifica las etiquetas, para los métodos de contacto creados dinámicamente, pero no los campos de texto de entrada correspondientes. El campo de sitio web tampoco es parte de estos métodos de contacto dinámicos. Sin embargo, sería útil tener tales filtros para todas las partes user-*-wrap ;-) @BradDalton

birgire birgire
11 jul 2015 02:15:01

Me lo imaginaba. Buena oportunidad para enviar una mejora.

Brad Dalton Brad Dalton
11 jul 2015 03:11:05
Mostrar los 1 comentarios restantes
1

Resolví el problema con las funciones ob_ y DOMDocument. Es mejor que jQuery o CSS para proteger el formulario.

Utilizo este tipo de solución cada vez que no puedo acceder a una parte del contenido HTML mediante un hook.

function remove_extra_field_profile()
{

    $current_file_url =  preg_replace( "#\?.*#" , "" , basename( $_SERVER['REQUEST_URI'] ) );

    if( $current_file_url == "profile.php" )
    {
        add_action( 'wp_loaded', function(){ ob_start("profile_callback"); } );
        add_action( 'shutdown', function(){ ob_end_flush(); } );
    }
}
add_action( 'init', 'remove_extra_field_profile' );


function profile_callback( $html )
{
    $profile_dom = new DOMDocument;
    $profile_dom->loadHTML( $html );

    $all_lines = $profile_dom->getElementsByTagname( 'tr' );

    $excludes = array(
        'user-rich-editing-wrap',
        'user-admin-color-wrap',
        'user-comment-shortcuts-wrap',
        'show-admin-bar user-admin-bar-front-wrap',
        'user-url-wrap',
        'user-description-wrap'
        );

    $deletes = array();

    foreach ( $all_lines as $line ) 
    {
        $tr_calss = $line->getAttribute("class");

        if( in_array( $tr_calss, $excludes ) )
        {
            $deletes[] = $line;
        }
    }

    $deletes[] = $profile_dom->getElementsByTagname( 'h2' )->item(0);

    foreach ($deletes as $delete) 
    {
        $delete->parentNode->removeChild( $delete );
    }

    return $profile_dom->saveHTML();
}
24 may 2016 22:02:42
Comentarios

Hola, esto es genial.

Michael Mizner Michael Mizner
8 dic 2017 02:46:08
1

Ampliando la respuesta de @birgire y justificando la de @Patricia Walton, si solo agregas

add_action('admin_head-user-edit.php','remove_website_row_wpse_94963');

solo desaparecerá de la página donde el administrador edita un perfil. Para que también desaparezca cuando un usuario edita su propio perfil, agrega además

add_action('admin_head-profile.php','remove_website_row_wpse_94963');, así:

function remove_website_row_wpse_94963() {
    if(!current_user_can('manage_options')){
        // ocultar solo para no administradores
        echo "<script>jQuery(document).ready(function(){jQuery('#url').parents('tr').remove();});</script>";
    }
}
add_action('admin_head-user-edit.php','remove_website_row_wpse_94963');
add_action('admin_head-profile.php','remove_website_row_wpse_94963');
24 oct 2013 14:52:46
Comentarios

Te falta un tercer add_action para la página de nuevo usuario: add_action('admin_head-user-new.php','remove_website_row_wpse_94963');

guidod guidod
6 abr 2020 16:28:25
1

El código tampoco me funcionaba, pero cambiando el add_action para que apunte a profile.php sí funcionó.

function remove_website_row_wpse_94963() {
    if(!current_user_can('manage_options')){
        // ocultar solo para no administradores
        echo "<script>jQuery(document).ready(function()    
            {jQuery('#url').parents('tr').remove();});</script>";
    }
}

add_action('admin_head-user-edit.php','remove_website_row_wpse_94963');
2 sept 2013 20:30:04
Comentarios

No veo en qué se diferencia el código que publicaste del de @birgire.

gmazzap gmazzap
2 sept 2013 21:24:04
0

Ampliando la respuesta de @birgire, escribí esto en un arreglo para que sea un poco más fácil de leer:

function awb_remove_user_profile_fields_with_css() {
// Ocultar campos no deseados en el perfil de usuario
$fieldsToHide = [
    'rich-editing',          // Edición enriquecida
    'admin-color',           // Color del administrador
    'comment-shortcuts',     // Atajos para comentarios
    'admin-bar-front',       // Barra de administración en el front-end
    'user-login',            // Nombre de usuario
    'role',                  // Rol
    'super-admin',           // Super administrador
    //'first-name',          // Nombre (comentado)
    //'last-name',           // Apellido (comentado)
    'nickname',              // Apodo
    'display-name',          // Nombre público
    //'email',              // Email (comentado)
    'description',           // Biografía
    //'pass1',              // Contraseña 1 (comentado)
    //'pass2',              // Contraseña 2 (comentado)
    'sessions',             // Sesiones
    'capabilities',         // Capacidades
    'syntax-highlighting',  // Resaltado de sintaxis
    'url'                   // Sitio web
    ];

    // Añadir el CSS
    foreach ($fieldsToHide as $fieldToHide) {
        echo '<style>tr.user-'.$fieldToHide.'-wrap{ display: none; }</style>';
    }

    // Campos que no siguen la convención de nombres del wrapper
    echo '<style>tr.user-profile-picture{ display: none; }</style>';

    // Todos los subtítulos
    echo '<style>#your-profile h2{ display: none; }</style>';
}
add_action( 'admin_head-user-edit.php', 'awb_remove_user_profile_fields_with_css' );
add_action( 'admin_head-profile.php',   'awb_remove_user_profile_fields_with_css' );
28 ene 2018 05:27:27