疑問
WordPressで画像URLから画像IDを取得する方法はある?
画像URLから画像IDを取得する方法はあります。
また、2つの関係を理解しておくと分かりやすいので、画像URLと画像IDについて説明した後に、取得する方法を紹介します。
WordPressの画像IDと画像URLについて
WordPressでは、「メディア」>「新規登録」した画像データはwp_postsテーブルに保存されます。
wp_postsテーブルは、投稿記事や固定ページも保存されている場所です。
画像IDはwp_postsのID
wp_postsテーブルでは、投稿記事の時はIDが投稿IDになりますが、画像の場合はIDが画像IDになります。
画像で利用する主なフィールド名
フィールド名 | 保存データ |
---|---|
ID | 画像ID(投稿記事の場合は投稿IDになる部分) |
post_content | 説明 |
post_title | タイトル |
post_excerpt | キャプション |
post_name | 拡張子なしのファイル名部分のみ(投稿記事の場合は投稿スラッグになる部分) |
post_parent | 投稿ID(投稿記事からメディア追加すると投稿IDが入力される) |
guid | 画像のフルパス |
post_status | inherit |
post_date | 投稿日時 |
post_type | attachment |
post_mime_type | image/jpeg image/png など |
phpMyAdminなどでwp_postsを確認すると分かります。
//wp_postsは自分のテーブル名になおしてください。
SELECT * FROM wp_posts WHERE post_mime_type like "image%"
画像IDは「メディア」>「ライブラリ」に表示された画像をクリックすると、URLに表示される部分です。
アイキャッチ画像
アイキャッチ画像も画像なので、wp_postsテーブルに保存されます。
ただし、「この投稿記事のアイキャッチ画像」という紐づけは、wp_postmetaテーブルで行っています。
フィールド名 | 保存データ |
---|---|
post_id | 投稿ID |
meta_key | _thumbnail_id(アイキャッチ画像を示すID) |
meta_value | 画像ID |
投稿IDと画像IDを_thumbnail_idで紐づけています。
WordPressで画像URLから画像IDを取得する方法
ここからは画像IDを取得する方法を紹介します。
WordPressで画像URLから画像IDを取得する方法は2つあります。
- wp_postsテーブルをチェックする方法
- attachment_url_to_postidで取得する方法
wp_postsテーブルをチェックする方法
画像URLを使ってwp_postsテーブルをチェックします。
wp_postsテーブルのguidに画像URLがあるのでそこから画像IDが取得できます。
画像URLから画像IDを取得する方法
//画像はhttpsからフルパスで指定します。
$url = 'https://xxxx/wp-content/uploads/xx/xx/xxxx.png';
//wp_postsテーブル名は自分の使っているテーブル名になおしてください。
function get_attachment_id_from_url($url) {
global $wpdb;
$query = 'SELECT ID FROM wp_posts WHERE guid ="'.$url.'"';
$id = $wpdb->get_var($query);
return $id;
}
アイキャッチ画像、記事内で使う画像など、基本的にどの画像でも画像IDを取得できます。
attachment_url_to_postid
attachment_url_to_postid( string $url )もパラメータに画像URLを渡すと画像IDを取得できます。
ただし、アイキャッチ画像として記事に登録されている画像だけです。
attachment_url_to_postidでは、下記のSQLが発行されwp_postmetaテーブルを見にいきます。
"SELECT post_id, meta_value FROM $wpdb->postmeta WHERE meta_key = '_wp_attached_file' AND meta_value = %s", $path
記事に登録したアイキャッチ画像の画像IDしか取得できません。
メモ
attachment_url_to_postidでメディアライブラリーにアップしただけの画像の画像IDは取得できません。
【まとめ】Wordpressで画像URLから画像IDを取得する方法
画像はwp_postsテーブルに保存されます。
記事に登録したアイキャッチ画像の画像IDであれば、attachment_url_to_postidで取得できます。
メディアライブラリーにアップしただけの画像の画像IDは、wp_postsテーブルを検索しないと取得できません。
一番汎用的に使えるのは、wp_postsテーブルを検索して取得する方法です。