Библиотека мультимедиа - ограничивает количество изображений типом записи


10

Есть ли какой-нибудь WordPress Magic / плагин, который позволит медиатеке показывать только изображения, которые были загружены в определенный тип записи? У меня есть пользовательский тип записи, который называется «художники», и я хочу, чтобы при щелчке администратором, чтобы загрузить / прикрепить изображение, во всплывающем окне библиотеки мультимедиа отображаются только изображения, загруженные в пользовательский тип художника, а не весь сайт.

Я использую плагин ACF для обработки пользовательских полей и пользовательских типов записей пользовательского интерфейса. Это возможно?


Позвольте мне проверить, правильно ли я понимаю ... Итак, вы хотите изменить всплывающее окно библиотеки мультимедиа таким образом, чтобы оно отображало только изображения, которые были загружены в конкретный CPT, если вы откроете его при редактировании этого CPT. И это должно работать как всегда, когда вы редактируете другие типы сообщений?
Krzysiek Dróżdż

Каков контекст / обоснование этого? Вы пытаетесь осуществить подбор художника?
Том Дж. Новелл

1
Вариант использования в моем случае - большой сайт WordPress, где не все редактируют одинаковые типы сообщений. Гораздо более уместно (и полезно) показывать самые последние связанные загрузки файлов, а не загрузки со всего сайта, чтобы можно было легко выбирать файлы, которые необходимо использовать повторно. (Я не задавал этот вопрос изначально, но добавил награду. Я пытаюсь сделать именно то, что описал Кшишиек (спасибо за ответ, я попробую))
guidod

Ответы:


9

Я не уверен на 100%, правильно ли я понял вашу проблему, но ... Может быть, это поможет вам ...

Media Uploader получает вложения с простым WP_Query, поэтому вы можете использовать множество фильтров для изменения его содержимого.

Единственная проблема заключается в том, что вы не можете запрашивать сообщения с определенным CPT в качестве родителя, используя WP_Queryаргументы ... Итак, нам придется использовать posts_whereи posts_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');

Когда вы открываете диалог загрузки мультимедиа при редактировании поста (post / page / 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 по твоему.
Джекрайхерт

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;
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.