Wordpressのカスタマイザで画像IDを保存する方法
- 2020/01/16
概要
Wordpress のカスタマイザで画像を選択させる時に使う WP_Customize_Image_Control クラスを使っている方は多いと思います。
しかし、テーマの設計上でサイズの小さい画像やサムネイルも欲しい時、WP_Customize_Image_Control クラスだと画像の URL になってしまうので少し面倒です。
一般的に良くある解決法は画像 URL から Attachment ID (以降、単に「ID」と呼ぶ) を取得する attachment_url_to_postid 関数を使っています。
でもこの attachment_url_to_postid 関数は実行するたびに SQL クエリを飛ばすので頻繁には使いたくないですね。取得した ID から wp_get_attachment_image_url などの関数でもデータベースにアクセスするので無駄が多いです。
そこではじめから ID を使うことが決まっている場合にカスタマイザで ID が保存される方法をまとめます。
Wordpress4.2で追加されたWP_Customize_Media_Controlクラスを使えば一発!
まずは結論からいきましょう。
WP_Customize_Image_Control の代わりに WP_Customize_Media_Control クラスを使えば見た目は WP_Customize_Image_Control と全く同じで ID が保存されます。
超簡単です。素晴らしい仕組みです。
カスタマイザ上の見た目はどちらも同じです。
WP_Customize_Media_Control を使った場合でも画像のアップロードや削除、変更など全く同じ動作です。
Wordpressの詳しい情報は英語で検索しましょう
こちらの情報は以下の公式記事で解説されています。
Wordpress4.2 のアップデートで WP_Customize_Image_Control への後方互換を保って追加された機能のようです。
やはり ID が必要になる場面も多く出てきたことでの改善だと思います。
- Make WordPress Core - New Customizer Media Controls in 4.3 and 4.2
- Code Reference - WP_Customize_Media_Control | Class
ちなみにですが、今回の記事は英語で検索すればすぐに出てきました。
しかし日本語では attachment_url_to_postid 関数などを使ったものばかりがヒットしてしまい全然見つかりません。
開発元が英語の Wordpress はやはり英語で探すのが一番早道で、かつ、正確・膨大です。
それほど難しい英語ではないので苦手な方も頑張って英語を読みましょう。(私も苦手ですが今回程度なら全然大丈夫でした)
まとめ
以上、Wordpress のカスタマイザから画像の ID を保存させる方法でした。