Biblioteca multimedia: limite las imágenes al tipo de publicación personalizada

10

¿Existe algún complemento / magia de wordpress que haga que la biblioteca multimedia solo muestre imágenes que se cargaron en un tipo de publicación personalizado específico? Tengo un tipo de publicación personalizado llamado "artistas". Quiero, cuando el administrador haga clic para cargar / adjuntar una imagen, que la ventana emergente de la biblioteca de medios solo muestre imágenes que se han subido al tipo personalizado de artistas, y no todo el sitio.

Utilizo el complemento ACF para manejar campos personalizados y tipos de publicaciones personalizadas ui. es posible?

BillyMedia
fuente
Permítame verificar si lo entiendo correctamente ... Entonces, desea cambiar la ventana emergente de la biblioteca de medios de modo que muestre solo las imágenes que se cargaron a un CPT específico si lo abre mientras edita este CPT. ¿Y debería funcionar como siempre cuando editas otros tipos de publicaciones?
Krzysiek Dróżdż
¿Cuál es el contexto / razonamiento detrás de hacer esto? ¿Estás tratando de implementar un selector de artistas?
Tom J Nowell
1
El caso de uso en mi caso es un gran sitio de WordPress donde no todos editan los mismos tipos de publicaciones. Es mucho más ordenado (y útil) mostrar las cargas de archivos relacionados más recientes en lugar de las cargas de todo el sitio, por lo que los archivos que deben reutilizarse pueden seleccionarse fácilmente. (No hice esta pregunta originalmente pero agregué la recompensa. Estoy tratando de hacer exactamente lo que Krzysiek describió (gracias por la respuesta, lo intentaré))
guidod

Respuestas:

9

No estoy 100% seguro si soluciono su problema, pero ... Tal vez esto lo ayude ...

El cargador de medios obtiene archivos adjuntos de manera simple WP_Query, por lo que puede usar muchos filtros para modificar su contenido.

El único problema es que no se puede consulta postes con CPT específico como padres usando WP_Queryargumentos ... Por lo tanto, tendremos que utilizar posts_wherey posts_joinfiltros.

Para estar seguros, que solo cambiaremos la consulta del cargador de medios, usaremos ajax_query_attachments_args.

Y así es como se ve, cuando se combina:

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');

Cuando abra el diálogo del cargador de medios mientras edita una publicación (publicación / página / CPT), verá solo imágenes adjuntas a este tipo de publicación específica.

Si desea que funcione solo para un tipo de publicación específico (digamos páginas), deberá cambiar la condición de la my_posts_wherefunción de la siguiente manera:

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;
}
Krzysiek Dróżdż
fuente
Gracias por tu útil comentario, borré mi respuesta para no confundir a nadie. +1 en el tuyo.
jackreichert
0

Mostrar solo las imágenes de la propiedad al editar la imagen destacada

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;
}
Azzam
fuente