uppload_files true이지만 edit_post false로 사용자 지정 사용자 역할을 워드프레스합니다. 미디어를 삭제하고 편집하려면 어떻게 해야 합니까?
저는 워드프레스 커스텀 사용자를 그의 능력으로 만들었습니다. 이 사용자는 사용자 지정 게시물 유형(레시피라고 함)의 게시물만 읽고 편집하고 삭제할 수 있습니다.
이 사용자에게 파일 업로드 역할을 부여합니다. 왜냐하면 사용자가 레시피를 작성할 때 그의 글에 미디어를 추가할 수 있기 때문입니다.
미디어 관리자에서 업로드 파일이 정상적으로 작동합니다(첨부 파일을 편집하기 위한 조건은 edit_post 역할이므로 미디어 iframe에서 작동하지 않음).실제로 사용자 지정 역할을 가진 이 사용자는 첨부 파일을 편집 및 삭제할 수 없습니다. 이 사이트에는 사이트 관리자가 관리하는 다른 사용자 지정 게시 유형이 많기 때문에 편집_posts 및 delete_posts 역할을 제공할 수 없습니다.
첨부 파일이 post_type이라는 것은 알고 있지만 미디어 편집 및 삭제 기능을 할당하려면 어떻게 해야 합니까?
검색 결과 첨부 파일의 기본 기능을 변경하는 이 해킹이 발견되었지만 올바른 방법은 아닌 것 같습니다.
global $wp_post_types;
$wp_post_types['attachment']->cap->edit_post = 'upload_files';
$wp_post_types['attachment']->cap->read_post = 'upload_files';
$wp_post_types['attachment']->cap->delete_post = 'upload_files';
미리 감사드립니다.
@Marco answer를 바탕으로 좀 더 간단하게 작성할 수 있을 것 같습니다.
function allow_attachment_actions( $user_caps, $req_cap, $args ) {
// if no post is connected with capabilities check just return original array
if ( empty($args[2]) )
return $user_caps;
$post = get_post( $args[2] );
if ( 'attachment' == $post->post_type ) {
$user_caps[$req_cap[0]] = true;
return $user_caps;
}
// for any other post type return original capabilities
return $user_caps;
}
add_filter( 'user_has_cap', 'allow_attachment_actions', 10, 3 );
다른 권한에 관계없이 사용자는 첨부 파일로 모든 작업을 수행할 수 있습니다.
첨부 파일 작업에 대한 사용자 지정 권한을 정의하고 포스트 유형 확인과 함께 존재하는지 확인할 수 있습니다.
이 코드에 사용된 후크에 대한 자세한 정보 https://codex.wordpress.org/Plugin_API/Filter_Reference/user_has_cap
검색 후에 edit_post=true 없이 사용자를 허용하려면 post_type이 필터 user_has_cap이 있는 첨부 파일일 때만 true로 설정할 수 있습니다.나의 목적을 위해서 이 갈고리를 씁니다.
add_filter( 'user_has_cap', 'myUserHasCap', 10, 3 );
function myUserHasCap( $user_caps, $req_cap, $args ) {
$post = get_post( $args[2] );
if ( 'attachment' != $post->post_type )
return $user_caps;
if ( 'delete_post' == $args[0] ) {
if ( $user_caps['delete_others_posts'] )
return $user_caps;
if ( !isset( $user_caps['publish_recipes'] ) or !$user_caps['publish_recipes'] )
return $user_caps;
$user_caps[$req_cap[0]] = true;
}
if ( 'edit_post' == $args[0] ) {
if ( $user_caps['edit_others_posts'] )
return $user_caps;
if ( !isset( $user_caps['publish_recipes'] ) or !$user_caps['publish_recipes'] )
return $user_caps;
$user_caps[$req_cap[0]] = true;
}
return $user_caps;
}
저는 제 질문에 대한 답을 찾고 있는 다른 사람들에게 도움이 될 수 있기를 바랍니다.
언급URL : https://stackoverflow.com/questions/29566488/wordpress-custom-user-roles-with-upload-files-true-but-edit-post-false-how-can
'source' 카테고리의 다른 글
Python Pandas 연산 결과를 상위 데이터 프레임의 열에 다시 할당하는 방법은 무엇입니까? (0) | 2023.09.21 |
---|---|
Woocommerce의 특정 제품 속성 값에 대한 모든 제품 변형 가져오기 (0) | 2023.09.21 |
if/-then-else 문에 행을 삽입하는 중 (0) | 2023.09.21 |
How do I run a function on a different component with vuex (non parent/child components) (0) | 2023.09.21 |
wp_enqueue_script로 Google 지도 API 로드 중 (0) | 2023.09.21 |