역할과 기능을 추가 할 때 어떤 작업을 수행해야합니까?


10

add_role () 및 $ role-> add_cap ()을 사용하여 새 사용자 지정 역할을 설정하고 기존 기능에 새 기능을 연결합니다.

가장 좋은 곳이 어디인지 궁금합니다. 분명히 functions.php 내에서 바로 수행 할 수 있습니다. 그러나 이것이 최선의 방법입니까? admin_init에서만이 작업을 수행해야합니까? 아니면 초기화해야합니까?

단순히 functions.php에 직접 함수 호출을 삭제하는 것보다 init action hooks를 사용하는 모범 사례가 무엇인지 확실하지 않습니다.

입력 해 주셔서 감사합니다!

답변:


10

역할과 기능을 추가 할 때 add_role또는 ->add_cap기능을 사용할 때 역할과 기능이 데이터베이스에 저장되기 때문에 코드를 한 번만 실행하면 되므로 앤디 after_setup_theme가 이런 종류의 작업에 사용할 수 있지만 일종의 확인 만 추가하면됩니다. register_activation_hook 또는 옵션을 사용하여 한 번 실행됩니다 .

add_action('after_setup_theme','my_add_role_function');

function my_add_role_function(){
    $roles_set = get_option('my_roles_are_set');
    if(!$roles_set){
        add_role('my_role', 'my_roleUser', array(
            'read' => true, // True allows that capability, False specifically removes it.
            'edit_posts' => true,
            'delete_posts' => true,
            'upload_files' => true 
        ));
        update_option('my_roles_are_set',true);
    }
}

고마워 add_role 또는 add_cap이 항상 데이터베이스를 활용한다는 것이 사실입니까? 소스 코드를 파고 들었을 때 이것이 항상 그런 것은 아니 었습니다. 즉, WP_Roles의 대부분의 메소드에서 if ($ this-> use_db)에 대한 검사가있어서 역할이 가능성이 있다고 생각합니다. 항상 DB에 저장되는 것은 아닙니다.
Tom Auger

또한 특히 확장 성이 뛰어나지 않은 옵션을 사용하여 플래그를 설정하는 대신 역할의 생성 여부를 간단히 쿼리 할 수있는 방법이 없습니까? 실패하면, 역할이 이미 존재하는 경우 역할을 재정의하는 데 어떤 해를 끼치겠습니까? 중복 된 역할을 받습니까 아니면 그냥 무시 하시겠습니까? capability.php를 다시 보면 add_role 아래에서 이것을 볼 수 있습니다. if (isset ($ this-> roles [$ role])) return; 그것은 역할을 복제하지 않으므로 해를 끼치 지 않음을 나타냅니다.
Tom Auger

무슨 뜻인지 확실하지 않지만 defualt는 $use_db = true;WP_Roles 클래스에 있습니다. options을 사용하여 플래그를 설정하는 경우는 하나의 예일 수 register_activation_hook있지만 코드는 한 번만 실행되므로 실행 시간을 절약 할 수 있습니다.
Bainternet

나는 이것을 본 적이 없지만 플러그인에 역할 변경 사항을 넣은 다음 활성화 / 비활성화 후크를 사용하여 변경 사항을 한 번만 트리거하는 것이 합리적이라고 생각합니다. 아무도 그 길을 갔습니까?
mrwweb 2016 년

@mrwweb도 잘 작동합니다
Bainternet

7

플러그인의 경우 이것을 사용하여 성공 plugins_loaded했습니다. 테마로는을 사용 after_setup_theme합니다.

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