現在編集中の投稿の子[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)は別々に機能します。それらを組み合わせる方法はありますか?それは制限的というよりはむしろ加法的フィルタですか?
それを行う唯一の方法は、私が思うにクエリフィルタを使うことです
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クエリであるため、削除する必要はありません。