幅が100px未満の場合、ユーザーがメディアライブラリから注目画像を設定できないようにします。当初はajax_query_attachments_args
フィルターを使用することを考えていましたが、meta_query
のmeta_key
(_wp_attachment_metadata
)にはシリアル化されたデータが含まれているため、この目的に効果的に使用できないWP_Query()
オブジェクトをフィルターします。これは私が現在試していることです:
function restrict_media_library_by_width($response, $attachment, $meta) {
if(isset($response['width']) && isset($response['height']) && $response['width'] >= 100) {
return $response;
}
return false;
}
add_filter('wp_prepare_attachment_for_js', 'restrict_media_library_by_width', 10, 3);
私が見る結果は、メディアライブラリモーダルがポップアップし、「空の」サムネイルをロードし、AJAXローダーが断続的に現れたり消えたりすることです。
ただし、==
ではなく>=
を使用するようにifステートメントの最後の条件を変更すると、期待どおりに機能するように見えますfor特定の値:
function restrict_media_library_by_width($response, $attachment, $meta) {
if(isset($response['width']) && isset($response['height']) && $response['width'] == 100) {
return $response;
}
return false;
}
add_filter('wp_prepare_attachment_for_js', 'restrict_media_library_by_width', 10, 3);
常に機能するとは限りませんが、ここで何かが欠けていると思います。誰かがこれに光を当ててください。ありがとう!
これまでのところ、私が考え出した唯一の実行可能な解決策は、ajax_query_attachments_args
フィルタ内で新しいクエリを実行することです。
これは絶対に理想的ではありませんが、より効率的な代替手段がない場合は期待通りに機能します。
function restrict_media_library_by_width($query) {
$include = array();
$exclude = array();
$temp_query = new WP_Query($query);
if($temp_query->have_posts()) {
while($temp_query->have_posts()) {
$temp_query->the_post();
$meta = wp_get_attachment_metadata(get_the_ID());
$meta['mime-type'] = get_post_mime_type(get_the_ID());
if(isset($meta['mime-type']) &&
($meta['mime-type'] == 'image/jpeg' && isset($meta['width']) && $meta['width'] >= 100) ||
$meta['mime-type'] == 'image/svg+xml') {
$include[] = get_the_ID();
} else {
$exclude[] = get_the_ID();
}
}
}
wp_reset_query();
$query['post__in'] = $include;
$query['post__not_in'] = $exclude;
return $query;
}
add_filter('ajax_query_attachments_args', 'restrict_media_library_by_width');