web-dev-qa-db-ja.com

著者またはpost_parentでメディアライブラリをフィルタします。

現在編集中の投稿の子[OR子によってアップロードされたメディアアイテムのみが表示されるように、メディアライブラリをフィルタリングしようとしています。条件が両方とも満たされていれば問題はありませんが、ORクエリの方法がわかりません。

Meta_queryやtax_queryなどのような内部クエリに対してはリレーションを定義できますが、外部クエリに対しては定義できないことがわかりました。 (注意してください、私はコーデックスで広範囲に読もうとしました、しかしWordPress開発はまだ私にとって非常に新しいです、従って私は明白な何かを逃すかもしれません。)

これは私が得た限りです:

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

両方のクエリ(post_parentとauthor)は別々に機能します。それらを組み合わせる方法はありますか?それは制限的というよりはむしろ加法的フィルタですか?

2
fizzbang

それを行う唯一の方法は、私が思うにクエリフィルタを使うことです

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

他に何もせずにajax_query_attachments_argsを追加するだけです。

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

1回限りのAjaxクエリであるため、削除する必要はありません。

1
bonger