ユーザー連絡先情報からWebサイトフィールドを削除したいです。 AIM、Jabber、Yahoo IMを削除するには、次のようにします。しかし、私はこれを使ってウェブサイトを削除することはできません。誰かが助けてください。
function remove_contactmethods( $contactmethods ) {
unset($contactmethods['aim']);
unset($contactmethods['yim']);
unset($contactmethods['Jabber']);
return $contactmethods;
}
add_filter('user_contactmethods','remove_contactmethods',10,1);
再訪して更新した答え:
user_contactmethods
フィルタを使用してWebサイトのラッパーを削除することはできません。これは、user-edit.php
ファイルにハードコードされており、フィルタ処理可能な user contacts ループの一部ではないためです。
wp_get_user_contact_methods( $profileuser )
website row要素が独自の.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>
以前は、削除のために#url
フィールドの親行をターゲットとするためにjQueryを使用しなければなりませんでした。
しかし今では website ラッパーを簡単にターゲットにして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' );
同様の行クラスがあります。
tr.user-{field}-wrap
フィールドで利用可能:
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,
...
動的な ユーザー連絡先 メソッドのすべてのフィールドを含みます。
ここでは{field}
部分を対応するフィールド名に置き換えます。
ウェブサイトの行を削除する前に:
Webサイトの行を削除した後:
Ob_関数とDOMDocumentの問題を解決しました。フォームを保護するためにjQueryやCSSよりも優れています。
フックを介してHTMLコンテンツの一部にアクセスできない場合は、常にこの種のソリューションを使用します。
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();
}
あなたが追加するだけなら、@ birgireのものを拡大し、@ Patricia Waltonの答えを正当化する
add_action('admin_head-user-edit.php','remove_website_row_wpse_94963');
管理者がプロフィールを編集しているページからのみ消えます。ユーザーが自分のプロファイルを編集したときにも表示されないようにするには
このようにadd_action('admin_head-profile.php','remove_website_row_wpse_94963');
。
function remove_website_row_wpse_94963() {
if(!current_user_can('manage_options')){
// hide only for non-admins
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');
@ birgireの答えを拡張して、私はこれを配列に書いたので読みやすくなります。
function awb_remove_user_profile_fields_with_css() {
//Hide unwanted fields in the user profile
$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'
];
//add the CSS
foreach ($fieldsToHide as $fieldToHide) {
echo '<style>tr.user-'.$fieldToHide.'-wrap{ display: none; }</style>';
}
//fields that don't follow the wrapper naming convention
echo '<style>tr.user-profile-picture{ display: none; }</style>';
//all subheadings
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' );
このコードも私にとってはうまくいきませんでしたが、add_actionをprofile.phpを指すように変更してもうまくいきました。
function remove_website_row_wpse_94963() {
if(!current_user_can('manage_options')){
// hide only for non-admins
echo "<script>jQuery(document).ready(function()
{jQuery('#url').parents('tr').remove();});</script>";
}
}
add_action('admin_head-user-edit.php','remove_website_row_wpse_94963');