添付ファイルをクエリし、すべての画像を除外したいです。
'post_mime_type' => 'image/*'
を使って、 only imagesを含める方法を見ることはできますが、その反対の方法を見つけることができませんでした。 posts__not_in
と同等のmime_typeはありますか?
ほとんどの解決策は、すべてのMIME except画像を含めることです。 WordPressには、m - のArray()を返す get_allowed_mime_types()
(巧妙に命名された)と呼ばれるすべての受け入れられたMIMEタイプを保持する気の利いた小さな関数があります。必要なのは、返された配列と、クエリに不要なMIMEタイプの配列の違いを取得することだけです。
$unsupported_mimes = array( 'image/jpeg', 'image/gif', 'image/png', 'image/bmp', 'image/tiff', 'image/x-icon' );
$all_mimes = get_allowed_mime_types();
$accepted_mimes = array_diff( $all_mimes, $unsupported_mimes );
$attachment_query = new WP_Query( array(
'post_type' => 'attachment',
'post_status' => 'inherit',
'post_mime_type' => $accepted_mimes,
'posts_per_page' => 20,
) );
MIMEタイプを持たない添付ファイル以外の投稿タイプ(投稿、ページなど)も含める場合は、posts_where
フィルタを使用する必要があります。
add_filter( 'posts_where' , 'remove_images' );
function remove_images($where) {
global $wpdb;
$where.=' AND '.$wpdb->posts.'.post_mime_type NOT LIKE \'image/%\'';
return $where;
}
MIMEタイプにはposts_not_in
と同等のものがないことはほぼ確実です。
もちろん、画像であるすべての添付ファイルをクエリすることもできます。できれば、パラメータfields
をids
に設定してIDを返すだけです。その後、2番目のクエリでこれらのIDをposts__not_in
と共に使用できます。欠点は、2つのクエリが必要なことです。
もう1つの可能性は、posts_where
フィルターにフックして、あなたが望むような結果を得るために何らかのSQLを適用することです。