미디어 라이브러리-이미지를 사용자 정의 게시물 유형으로 제한


10

미디어 라이브러리가 특정 사용자 정의 게시물 유형으로 업로드 된 이미지 만 표시하도록하는 wordpress magic / plugin이 있습니까? 관리자가 이미지를 업로드 / 첨부하기 위해 클릭 할 때 미디어 라이브러리 팝업에 전체 사이트가 아닌 아티스트 사용자 정의 유형으로 업로드 된 이미지 만 표시되도록하려면 "아티스트"라는 사용자 정의 게시물 유형이 있습니다.

사용자 정의 필드 및 사용자 정의 게시물 유형 ui를 처리하기 위해 ACF 플러그인을 사용합니다. 이것이 가능한가?


올바르게 이해하는지 확인하겠습니다 ... 따라서이 CPT를 편집하는 동안 특정 CPT에 업로드 한 이미지 만 열도록 미디어 라이브러리 팝업을 변경하려고합니다. 다른 게시물 유형을 편집 할 때 항상 작동해야합니까?
Krzysiek Dróżdż

이 작업의 배경 / 이유는 무엇입니까? 아티스트 선택기를 구현하려고하십니까?
Tom J Nowell

1
필자의 경우 유스 케이스는 모든 사람이 동일한 게시물 유형을 편집하지는 않는 대형 WordPress 사이트입니다. 사이트 전체의 업로드와는 반대로 최신 관련 파일 업로드를 표시하는 것이 훨씬 더 깔끔하고 유용하므로 재사용해야하는 파일을 쉽게 선택할 수 있습니다. (. 내가 처음이 질문을하지만, 현상금을 추가하지 않았다 나는 Krzysiek는 대답 (감사 설명을 정확하게 할 노력하고있어, 나는) 그것을 시도 할 것이다)
guidod

답변:


9

문제가 제대로 생겼는지 100 % 확신하지 못하지만 ... 아마도 도움이 될 것입니다 ...

미디어 업 로더는 간단한 첨부 파일을 가져 오므로 WP_Query많은 필터를 사용하여 내용을 수정할 수 있습니다.

유일한 문제는 당신이 사용하는 부모와 같은 특정의 CPT와 쿼리 게시물 수 없다는 것입니다 WP_Query인수 ... 그래서, 우리는 사용해야 할 것입니다 posts_whereposts_join필터.

미디어 업 로더의 검색어 만 변경하려면을 사용 ajax_query_attachments_args합니다.

그리고 이것이 결합되었을 때의 모습입니다.

function my_posts_where($where) {
    global $wpdb;

    $post_id = false;
    if ( isset($_POST['post_id']) ) {
        $post_id = $_POST['post_id'];

        $post = get_post($post_id);
        if ( $post ) {
            $where .= $wpdb->prepare(" AND my_post_parent.post_type = %s ", $post->post_type);
        }
    }

    return $where;
}

function my_posts_join($join) {
    global $wpdb;

    $join .= " LEFT JOIN {$wpdb->posts} as my_post_parent ON ({$wpdb->posts}.post_parent = my_post_parent.ID) ";

    return $join;
}


function my_bind_media_uploader_special_filters($query) {
    add_filter('posts_where', 'my_posts_where');
    add_filter('posts_join', 'my_posts_join');

    return $query;
}
add_filter('ajax_query_attachments_args', 'my_bind_media_uploader_special_filters');

게시물 (게시물 / 페이지 / CPT)을 편집하는 동안 미디어 업 로더 대화 상자를 열면이 특정 게시물 유형에 첨부 된 이미지 만 표시됩니다.

특정 게시물 유형 (페이지를 말하십시오)에 대해서만 작동하려면 다음과 같이 my_posts_where기능 조건을 변경해야합니다 .

function my_posts_where($where) {
    global $wpdb;

    $post_id = false;
    if ( isset($_POST['post_id']) ) {
        $post_id = $_POST['post_id'];

        $post = get_post($post_id);
        if ( $post && 'page' == $post->post_type ) {  // you can change 'page' to any other post type
            $where .= $wpdb->prepare(" AND my_post_parent.post_type = %s ", $post->post_type);
        }
    }

    return $where;
}

귀하의 유용한 의견에 감사드립니다. 다른 사람을 혼동하지 않도록 답변을 삭제했습니다. 당신의 +1.
jackreichert 2016 년

0

추천 이미지를 편집 할 때 속성 이미지 만 표시

function my_bind_media_uploader_special_filters($query) 
{

    add_filter('posts_where', 'my_posts_where');
    return $query;
}

add_filter('ajax_query_attachments_args','my_bind_media_uploader_special_filters');

function my_posts_where ($where) 
{

    global $wpdb;
    $post_id = false;
    if ( isset($_POST['post_id']) ) {
        $post_id = $_POST['post_id'];
        $post = get_post($post_id);
        if ( $post && 'property' == $post->post_type) {
            $where .= $wpdb->prepare(" AND id in (select distinct meta_value from 
            wpdb_postmeta where meta_key='fave_property_images' and post_id = $post_id)", 
            $post->post_type);
        }
    }
    return $where;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.