web-dev-qa-db-fra.com

Filtrer la médiathèque par auteur ou par post_parent

J'essaie de filtrer la médiathèque afin que seuls les éléments multimédias téléchargés par l'utilisateur actuel OR enfants du message en cours de modification soient visibles. Je n'ai eu aucun problème à le faire si les deux conditions sont requises, mais je ne peux pas comprendre comment interroger OR.

J'ai constaté que vous pouvez définir des relations pour les requêtes internes telles que meta_query et tax_query, etc., mais pas pour la requête externe. (Veuillez noter que j'ai essayé de lire beaucoup dans le codex, mais le développement de WordPress étant encore très nouveau pour moi, il se peut que je manque quelque chose d'évident.)

C'est pour autant que je l'ai eu:

add_filter( 'ajax_query_attachments_args', 'filterMediaLibrary', 10, 1 );
function filterMediaLibrary($query = array()) {
    $query['post_parent'] = $_POST['post_id'];
    //$query['author'] = get_current_user_id();
    return $query;
}

Les deux requêtes (post_parent et author) fonctionnent séparément. Existe-t-il un moyen de les combiner pour qu'il s'agisse d'un filtre additif plutôt que restrictif?

2
fizzbang

La seule façon de le faire est d'utiliser un filtre de requête, je pense

function wpse156319_posts_where( $where, $query ) {
    global $wpdb;
    $where .= $wpdb->prepare( ' AND (' . $wpdb->posts . '.post_parent = %s OR ' . $wpdb->posts . '.post_author = %s)', $_POST['id'], get_current_user_id() );
    return $where;
}

que vous venez d'ajouter dans le ajax_query_attachments_args au lieu de faire autre chose

function filterMediaLibrary($query = array()) {
    add_filter( 'posts_where', 'wpse156319_posts_where', 10, 2 );
    return $query;
}

Considérant qu'il s'agit d'une requête ajax unique, il ne devrait pas être nécessaire de la supprimer.

1
bonger