Медіатека - Обмежте зображення на користувальницький тип публікації


10

Чи є якась Wordpress Magic / плагін, який змусить медіатеку відображати лише зображення, завантажені в певний користувацький тип публікації? У мене є власний тип публікації під назвою "художники", я хочу, щоб натиснути адміністратор, щоб завантажити / приєднати зображення, щоб медіатека в контекстному вікні відображала лише зображення, завантажені у відповідний тип виконавців, а не весь сайт.

Я використовую плагін ACF для обробки користувальницьких полів та спеціальних типів пошти ui. Чи можливо це?


Дозвольте мені перевірити, чи я правильно це розумію ... Отже, ви хочете змінити спливаюче вікно медіатеки таким чином, щоб воно відображало лише зображення, які були завантажені в певний CPT, якщо ви відкриваєте його під час редагування цього CPT. І це має працювати як завжди, коли ви редагуєте інші типи публікацій?
Krzysiek Dróżdż

Який контекст / міркування за цим робити? Ви намагаєтесь реалізувати інструмент вибору виконавця?
Том Дж. Ноуелл

1
У моєму випадку випадок використання - це великий сайт WordPress, де не всі редагують однакові типи публікацій. Набагато охайніше (і корисно) показувати останні завантаження пов'язаних файлів на відміну від завантажень з усього сайту, так що файли, які потребують повторного використання, можна легко вибрати. (Я не задавав це питання спочатку, але додав щедрості. Я намагаюся зробити саме те, що описав Кшисик (дякую за відповідь, я спробую))
guideod

Відповіді:


9

Я не на 100% впевнений, чи правильно я визнаю вашу проблему, але ... Можливо, це допоможе вам ...

Завантажувач медіа-файлів отримує додатки з простими 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');

Під час відкриття діалогового вікна завантаження медіа під час редагування публікації (публікація / сторінка / 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

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.