web-dev-qa-db-de.com

Wie entferne ich diese Felder aus dem Bereich "Profil"?

Ich muss einige Profilfelder gemäß den Benutzerrollen von der Seite "Profil" entfernen. Zum Entfernen des Farbwählers habe ich remove_action("admin_color_scheme_picker", "admin_color_scheme_picker") verwendet. Ich möchte diese Felder entfernen:

  1. Spitzname
  2. Name öffentlich anzeigen als
  3. AIM-, Yahoo-, Google Talk- und About yourself-Felder
  4. Der Bereich "Show Admin Bar" mit den beiden Kontrollkästchen

Ich habe die Datei 'user-edit.php' durchgesehen, um zu sehen, ob es Aktionen/Filter gibt, die mir dies erlauben, aber anscheinend gibt es keine. Kann mir jemand sagen, wie das geht? Jede Hilfe wäre dankbar. Vielen Dank

EDIT: Danke @helenhousandi für die Antwort. Ich hatte es aber schon so gemacht.

<?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 }
}
?>

Ich weiß, das ist etwas länger, aber es hat funktioniert! Ich denke, ich werde mit @ helenhousandis Antwort gehen.

15

Für den Kontaktmethoden-Filter: 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' );
14
Chris_O

Obwohl der user_contactmethods Filter einer der wenigen für den Benutzerprofilbildschirm ist, da die anderen Felder in WordPress nicht erforderlich sind, können Sie die Funktionen .hide() und .remove() von jQuery verwenden, um diejenigen effektiv loszuwerden, auf die Sie nicht verzichten möchten Komplikationen in Bezug auf die Speicherung der Informationen. Sicher, eine Person ohne JS würde sie immer noch sehen, aber das ist eine kleine Minderheit, und ich vermute, dass die Informationen, die sich dort ändern, tatsächlich nichts bewirken werden.

Ein Beispiel für das Entfernen des gesamten Teils der persönlichen Optionen (Verwaltungsleiste und Farbschema anzeigen). Ich weiß, dass es nicht genau das ist, wonach Sie suchen, ich wollte Ihnen nur ein kurzes Beispiel geben, das ich zur Hand habe:

// 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
}

Außerdem ein Hinweis zur Option "Admin-Leiste anzeigen": In 3.3 wird die Admin-Leiste zur Kopfzeile und kann daher nicht aktiviert oder deaktiviert werden.

Ich habe das Codebeispiel aktualisiert, damit es genauer und vollständiger ist. Hatte ein paar Reste drin.

9
helenhousandi

Da es dafür keinen guten PHP-Hook zu geben scheint, habe ich die Felder mit CSS ausgeblendet und sie dann mit JS entfernt.

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
}
1
Tobbe

Im WordPress-Support-Forum können Sie das Entfernen mit PHP durchführen. Dies entfernt den Abschnitt über sich selbst:

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');

Der Code ersetzt die Überschrift "About Yourself" durch "Password" und entfernt dann alles zwischen dieser und der nächsten gefundenen Tabelle (die die Kennworttabelle ist).

Auch das Plugin WP Hide Dashboard ersetzt jQuery auf ähnliche Weise, wenn Sie dies erweitern möchten.

1
icc97

ACHTUNG!!

1) Das Entfernen eines Feldes ist möglicherweise nicht gut Wenn Sie beim Update die wesentlichen Felder nicht an den WORDPRESS-Update-Hook senden, werden möglicherweise leere Werte für diese Felder festgelegt! (In der übergebenden Form sollte beispielsweise <input name="username".../> vorhanden sein.)
Ich denke, dass es besser ist, Benutzer nur visuell auszublenden, mit jquery .hide(); und nicht mit .remove();
BEISPIELcode zum Ausblenden der Felder " DISPLAY NAME " und "NICKNAME":

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

2) Um die Admin-Leiste auszublenden, gibt es eine spezielle Option im WordPress-Menü (in den Einstellungen) . für benutzerdefinierten Code, wie z.

add_action('after_setup_theme', 'remove_admin_bar');

function remove_admin_bar()
{
  if (!current_user_can('administrator') && !is_admin()) 
  {
    show_admin_bar(false);
  }
}
1
T.Todua

Benutzen

add_action('admin_head', 'remove_profile_fields');

und hinzufügen

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

vor JavaScript.

0
Akhil Sharma