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:
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.
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' );
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.
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
}
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) 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);
}
}
Benutzen
add_action('admin_head', 'remove_profile_fields');
und hinzufügen
jQuery(document).ready(function(e) {
vor JavaScript.