WordPressでメディアライブラリにある画像の検索に戸惑ったので記す。
状態の設定 ‘post_status’ を’any’ 指定することが大事
$searchstring = "検索文字列";
$images = [];
// メディアライブラリ内でファイルを検索
$args = array(
'post_type' => 'attachment', // メディアファイルを検索
'post_mime_type' => 'image', // 画像のみ
'posts_per_page' => -1, // すべての結果を取得
'post_status' => 'any', // すべての状態(公開、非公開、ドラフト、等)
'meta_query' => array(
array(
'key' => '_wp_attached_file', // メディアファイルのファイル名
'value' => $searchstring, // 検索したいファイル名の部分文字列
'compare' => 'LIKE' // 部分一致検索
)
)
);
$query = new WP_Query($args);
// クエリ出力(デバッグ用)
echo $query->request; // 実際に生成されるSQLを確認
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
// ファイルパスの取得
$file_path = wp_get_attachment_url(get_the_ID());
$images[] = $file_path; // ファイルパスを配列に追加
}
// ファイルパス順に並べ替え(自然順)
usort($images, function ($a, $b) {
return strcmp(basename($a), basename($b)); // ファイル名の部分で比較
});
} else {
echo '該当する画像はありません。';
}
wp_reset_postdata();
コメントを残す