it-swarm.com.de

Filtern Sie die Medienbibliothek nach Autor oder post_parent

Ich versuche, die Medienbibliothek so zu filtern, dass nur Medienelemente sichtbar sind, die vom aktuellen Benutzer OR Kinder des zu bearbeitenden Beitrags hochgeladen wurden. Ich hatte kein Problem damit, wenn beide Bedingungen erforderlich sind, kann aber nicht herausfinden, wie OR abgefragt werden soll.

Ich habe festgestellt, dass Sie Relationen für innere Abfragen wie meta_query und tax_query usw. definieren können, aber nicht für die äußere Abfrage. (Bitte beachten Sie, dass ich versucht habe, ausführlich im Codex zu lesen, aber die WordPress-Entwicklung ist für mich noch sehr neu, sodass mir möglicherweise etwas Offensichtliches fehlt.)

So weit bin ich gekommen:

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

Beide Abfragen (post_parent und author) arbeiten getrennt. Gibt es eine Möglichkeit, sie zu kombinieren, damit sie nicht einschränkend, sondern additiv wirken?

2
fizzbang

Ich denke, die einzige Möglichkeit, dies zu tun, ist die Verwendung eines Abfragefilters

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

was Sie nur in den ajax_query_attachments_args hinzufügen, anstatt etwas anderes zu tun

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

Da es sich um eine einmalige Ajax-Abfrage handelt, sollte sie nicht entfernt werden müssen.

1
bonger