'프로필'섹션에서 이러한 필드를 제거하는 방법은 무엇입니까?


16

사용자 역할에 따라 '프로필'페이지에서 일부 프로필 필드를 제거해야합니다. 내가 사용한 색상 선택기를 제거합니다 remove_action("admin_color_scheme_picker", "admin_color_scheme_picker"). 이 필드를 제거하고 싶습니다.

  1. 별명
  2. 이름을 공개적으로 표시
  3. AIM, Yahoo, Google 토크 및 자기 소개 필드
  4. 2 개의 확인란과 함께 '관리자 표시'섹션

나는 'user-edit.php'파일을 통해 그렇게 할 수있는 동작 / 필터가 있는지 확인했지만 그렇지 않은 것 같습니다. 누구 든지이 작업을 수행하는 방법을 말해 줄 수 있습니까? 도움을 주시면 감사하겠습니다. 감사

편집 : 답변을 @helenhousandi 감사합니다. 나는 이미 이런 식으로했다.

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

나는 이것이 조금 더 길다는 것을 알고 있지만 효과가 있었다! @helenhousandi의 대답과 함께 갈 것이라고 생각합니다.


어디로 가야합니까? functions.php?
Fabian

예. functions.php또는 플러그인 파일 로 이동할 수 있습니다 . 고리가 바르면 어느 곳에서나 작동합니다.
Rutwick Gangurde

좋아, 그러나 functions.php에 넣으면 어떻게 자바 스크립트를 반환합니까? 리턴 또는 에코?
Fabian

WordPress v4.4.1 이후로 닉네임은 필수 필드가되었으며 ERROR : 오류를 입력하십시오. 이 숨겨졌지만 채워지지 않은 사용자를 업데이트 할 때 닉네임을 입력하십시오. 따라서 더 이상 숨길 수 없습니다
icc97

답변:


15

연락 방법 필터의 경우 : 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' );

고마워요 ... '관리자 표시'및 '자기 소개'섹션에 대한 내용이 있습니까?
Rutwick Gangurde

해결책을 찾으면 이것을 업데이트하십시오 ... 나는 당신의 대답을 받아들입니다. 감사!
Rutwick Gangurde

+1 PHP를 통해 필드를 제거하는 것을 기억할 수있는 한, WordPress가 usermeta 테이블에 빈 항목을 작성하지 못하게하기 때문입니다.
Ashfame

9

하지만 user_contactmethods다른 필드가 워드 프레스에 필요하지 않기 때문에 필터, 사용자 프로필 화면의 몇 가지 중 하나입니다, 당신은 사용할 수 jQuery의 .hide().remove()효과적으로 정보를 저장의 관점에서 당신은 합병증없이 원하지 않는 사람을 제거하는 방법 . 물론 JS가없는 사람은 여전히 ​​볼 수 있지만 소수의 사람들이며 거기에서 변경되는 정보는 실제로 아무런 영향을 미치지 않을 것으로 추측됩니다.

개인 옵션 전체를 제거하는 예 (관리자 표시 줄 및 색 구성표 표시). 나는 그것이 당신이 정확히 찾고있는 것이 아니라는 것을 알고 있습니다.

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

또한 관리자 막대 표시 옵션에 대한 참고 사항 : 3.3에서는 관리자 막대가 헤더가되어 켜거나 끌 수 없으므로 걱정할 필요가 없습니다.

더 정확하고 완전한 코드 예제를 업데이트했습니다. 거기에 남은 음식이있었습니다.


감사! 이것은 좋은 해결책입니다! 내가 한 일은 비슷한 것이었지만 다른 작업 후크를 사용하여 스크립트가에서 실행되도록했습니다 profile.php. 또한 시스템에 정의 된 특정 사용자 지정 역할에 대해서도이 작업을 수행해야했습니다. 답변으로 내 질문을 업데이트합니다.
Rutwick Gangurde

1
jQuery에 다음을 추가하면 질문에서 닉네임과 '표시 이름'도 숨겨집니다.$("#nickname,#display_name").parent().parent().remove();
icc97

edit_user_profile 후크를 사용할 수도 있습니다. 그리고 jQuery (document) .ready 메소드를 사용하여 코드를 즉시 실행하지 마십시오. 이처럼
Giraldi

WP v.4.4.1 이후로 닉네임이 필요합니다
icc97

2

이것에 대한 좋은 PHP 훅이없는 것처럼 CSS로 필드를 숨기고 JS로 필드를 제거했습니다.

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

로부터 워드 프레스 지원 포럼 당신은 PHP를 사용하여 제거 할 수 있습니다. 그러면 About Yourself 섹션이 제거됩니다.

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

이 코드는 'About Yourself'헤더를 'Password'로 바꾼 다음 찾은 다음 테이블 (비밀번호 테이블) 사이의 모든 것을 제거합니다.

또한 플러그인 WP Hide Dashboard 는 확장하려는 경우 비슷한 jQuery를 대체합니다.


향후 참조를 들어, 사용하고자하는 수 admin_head-profile.phpadmin_footer-profile.php대신

1

조심해!!

1) 업데이트 할 때 필드를 제거하는 것이 좋지 않을 수 있습니다. 필수 필드를 WORDPRESS 업데이트 후크에 보내지 않으면 해당 필드에 빈 값이 설정 될 수 있습니다! (예를 들어, 양식을 제출하기에,해야, 즉 존재 <input name="username".../>)
는 jQuery로, 시각적으로 사용자 만에서 HIDE에 더 나은 것을, 내가 생각 .hide();하지으로 .remove();
숨기기 "에 대한 예제 코드 표시 이름 "과 " NICKNAME "필드 :

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

2) 관리자 표시 줄을 숨기려면 WordPress 메뉴 (설정)의 특수 옵션이 있습니다. 예를 들어 커스텀 코드

add_action('after_setup_theme', 'remove_admin_bar');

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

0

사용하다

add_action('admin_head', 'remove_profile_fields');

그리고 추가

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

JavaScript 전에.


약간의 설명이 좋을 것입니다!
bravokeyl

-4

비활성화 할 필터가 없습니다. /wp-admin/user-edit.php이와 같은 작업을 수행해야 할 때 소스 ( )를 확인하십시오. JS로 숨길 수는 있지만 여전히 볼 수 있으며 POST에서 값이 업데이트됩니다.

실행 가능한 옵션은 핵심을 직접 해킹하는 것입니다. 업데이트를 처리하고 POST에서 이러한 필드를 무시하십시오.


예, 그 파일을 이미 확인했습니다! JS 솔루션이 너무 안전하지 않습니다. 내가 무엇을 할 수 있는지 알아볼 게! 감사!
Rutwick Gangurde

3
당신이 생각할 수있는 유일한 해결책이 핵심을 해킹하는 것이라면, 그 특정 질문에 대답해서는 안됩니다. 또한 이미 언급 한 파일을보기 위해 질문자에게 제안 할 필요가 없으며, 필터가 전혀 없다고 말하는 것도 정확하지 않습니다. 반드시 질문을 읽고 이전 답변을 먼저 읽어야합니까?
helenhousandi

@helenhousandi xoxo
EarnestoDev
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.