ワードプレス

WordPressで画像URLから画像IDを取得する方法【画像はDBのどこに保存される?】

疑問

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に表示される部分です。

画像ID1

アイキャッチ画像

アイキャッチ画像も画像なので、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テーブルを検索して取得する方法です。

-ワードプレス
-, ,

© 2021 WPORZ