source

uppload_files true이지만 edit_post false로 사용자 지정 사용자 역할을 워드프레스합니다. 미디어를 삭제하고 편집하려면 어떻게 해야 합니까?

nicesource 2023. 9. 21. 20:35
반응형

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

반응형