画像検索

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();

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です