Cum să elimini câmpul "Website" din informațiile de contact

8 apr. 2013, 09:28:18
Vizualizări: 17.8K
Voturi: 13

Vreau să elimin câmpul website din informațiile de contact ale utilizatorului. Folosesc următorul cod pentru a elimina câmpurile AIM, Jabber și Yahoo IM. Dar nu reușesc să folosesc același cod pentru a elimina website-ul. Cineva să mă ajute, vă rog.

function remove_contactmethods( $contactmethods ) {
    // Elimină câmpurile AIM, Jabber și Yahoo IM
    unset($contactmethods['aim']);
    unset($contactmethods['yim']);
    unset($contactmethods['jabber']);
    return $contactmethods;
}
add_filter('user_contactmethods','remove_contactmethods',10,1);
0
Toate răspunsurile la întrebare 5
6
14

Răspuns revizuit și actualizat:

Nu putem folosi filtrul user_contactmethods pentru a elimina învelișul site-ului web, deoarece această parte este hardcodată în fișierul user-edit.php și nu face parte din bucla contacte utilizator care poate fi filtrată, generată de:

wp_get_user_contact_methods( $profileuser )

Ascunderea cu CSS

Elementul rând site web are acum propria sa clasă .user-url-wrap:

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

Anterior trebuia să folosim jQuery pentru a ținti rândul părinte al câmpului #url și a-l elimina.

Dar acum putem ținti cu ușurință învelișul site-ului web și să-l ascundem cu 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' );

Ascunderea altor câmpuri

Există clase de rând similare:

tr.user-{field}-wrap

disponibile pentru câmpurile:

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,
...

inclusiv toate câmpurile din metodele dinamice de contacte utilizator.

Aici înlocuim doar partea {field} cu numele câmpului corespunzător.

Capturi de ecran

Înainte de eliminarea rândului site-ului web: Înainte


După eliminarea rândului site-ului web: După

8 apr. 2013 09:52:18
Comentarii

Ar trebui să folosești .remove() în loc de .hide()

Bainternet Bainternet
8 apr. 2013 10:18:17

Nu funcționează pentru mine. Acest cod ar trebui pus în functions.php, nu??

MidhuN MidhuN
8 apr. 2013 10:25:42

Trebuie să fii non-admin când îl testezi sau să comentezi instrucțiunea if cu testul de capabilitate. Funcționează în functions.php, dar cred că e mai bine să-l ai într-un plugin ca să nu-l pierzi când schimbi tema.

birgire birgire
8 apr. 2013 10:34:50

Ce zici de asta apply_filters( "user_{$name}_label", $desc );

Brad Dalton Brad Dalton
11 iul. 2015 01:51:34

Aceasta modifică doar etichetele, pentru metodele de contact create dinamic, dar nu și câmpurile de input text corespunzătoare. Câmpul website nu face parte nici el din aceste metode de contact dinamice. Ar fi util totuși să avem astfel de filtre pentru întregile părți user-*-wrap ;-) @BradDalton

birgire birgire
11 iul. 2015 02:15:01

Mă gândeam la asta. Oportunitate bună de a trimite o îmbunătățire.

Brad Dalton Brad Dalton
11 iul. 2015 03:11:05
Arată celelalte 1 comentarii
1

Am rezolvat problema cu funcțiile ob_ și DOMDocument. Este mai bună decât jQuery sau CSS pentru protejarea formularului.

Folosesc acest tip de soluție de fiecare dată când nu pot accesa o parte din conținutul HTML printr-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 mai 2016 22:02:42
Comentarii

Hei, asta este minunat.

Michael Mizner Michael Mizner
8 dec. 2017 02:46:08
1

Extinzând răspunsul lui @birgire și argumentând răspunsul lui @Patricia Walton, dacă adaugi doar

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

acesta va dispărea doar din pagina unde administratorul editează un profil. Pentru a-l face să dispară și atunci când un utilizator își editează propriul profil, adaugă și

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

function remove_website_row_wpse_94963() {
    if(!current_user_can('manage_options')){
        // ascunde doar pentru non-administratori
        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
Comentarii

Îți lipsește un al treilea add_action pentru pagina de utilizator nou: add_action('admin_head-user-new.php','remove_website_row_wpse_94963');

guidod guidod
6 apr. 2020 16:28:25
1

Codul nu funcționa nici pentru mine, dar schimbarea add_action să pointeze către profile.php a funcționat.

function remove_website_row_wpse_94963() {
    if(!current_user_can('manage_options')){
        // ascunde doar pentru non-administratori
        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
Comentarii

Nu văd care este diferența dintre codul postat de tine și cel al lui @birgire.

gmazzap gmazzap
2 sept. 2013 21:24:04
0

Extinzând răspunsul lui @birgire, am scris acest lucru într-un array pentru a fi mai ușor de citit:

function awb_remove_user_profile_fields_with_css() {
// Ascunde câmpurile nedorite în profilul utilizatorului
$fieldsToHide = [
    'rich-editing',
    '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',
    'syntax-highlighting',
    'url'

    ];

    // Adaugă CSS-ul
    foreach ($fieldsToHide as $fieldToHide) {
        echo '<style>tr.user-'.$fieldToHide.'-wrap{ display: none; }</style>';
    }

    // Câmpuri care nu urmează convenția de denumire a wrapper-ului
    echo '<style>tr.user-profile-picture{ display: none; }</style>';

    // Toate subtitlurile
    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 ian. 2018 05:27:27