###実現したいこと・前提条件
- WordPressのプラグイン「Woocommerce」で画像データを販売するサイトを作成中
- プレビューするために販売データをbase64で小さいサイズにエンコードしてimgタグで個別ページに出力している
- あくまでsingleページ上にimgタグで出力しているだけなのでアイキャッチとしては認識されていない
- ゆえに関連記事欄等では「アイキャッチ画像が登録されていない記事」と同じ扱いになってしまう
###画面該当箇所のコード
下記のようなコードでbase64でエンコードした画像をsingleページにimgタグで出力することはできています。
php
1<?php 2$files = get_post_meta( get_the_ID(), '_downloadable_files' ); 3if ( !empty( $files[ 0 ] ) ) { 4 foreach ( $files[ 0 ] as $file ) { 5 $url = $file[ 'file' ]; 6 $id = attachment_url_to_postid( $url ); 7 if ( $id ) { 8 $thumb = wp_get_attachment_image_url( $id, 'thumbnail' ); 9 $thumb = str_replace( wp_upload_dir()[ 'baseurl' ], wp_upload_dir()[ 'basedir' ], $thumb ); 10 $mimetype = get_post_mime_type( $id ); 11 if ( $thumb && $mimetype ) { 12 $data = file_get_contents( $thumb ); 13 if ( $data ) { 14 echo '<img src="data:' . $mimetype . ';base64,' . base64_encode( $data ) . '">'; 15 } 16 } 17 } 18 } 19} 20?>
出力結果例
<img src="data:image/jpeg;base64,/hogehoge">
singleページ上にimgタグで出力しているだけなので、アイキャッチとしては定義されません。
ループ内などでは、アイキャッチ画像の登録がない扱いになってしまいます。
###試したこと
例えば「sample_gazou」というカスタムフィールドを作成し、
単純にそのフィールドに登録された画像をアイキャッチ画像にあてがう
ということは下記の方法でできました。
(カスタムフィールド作成にはプラグイン「advanced Custom Fields」を使用)
php
1//functions.php 2function acf_set_featured_image( $value, $post_id, $field ) { 3 if ( $value != '' ) { 4 5 add_post_meta( $post_id, '_thumbnail_id', $value ); 6 } 7 return $value; 8} 9add_filter( 'acf/update_value/name=sample_gazou', 'acf_set_featured_image', 10, 3 );
しかし、これだとサンプル画像用のカスタムフィールドと
販売用画像用のフィールドの2つを個別に登録する必要が発生します。
###考えているやり方
そもそもワードプレスの仕様上、
メディアに画像を登録してからでないとアイキャッチ画像に登録できないかと思うので、
次のような方法をもくろんでいます。
①base64でエンコードした「data:image/jpeg;base64,/hogehoge」形式の画像を何かしらの手段でサーバー上に保存してWordPressのメディアとして自動登録
②メディアに登録された「①」のファイルをカスタムフィールド「sample_gazou」に自動登録
③カスタムフィールド「sample_gazou」の値をアイキャッチ画像として登録(これはできそう)
このやり方で行くとすれば、「①」と「②」の方法が思いつきません。
ほかの手段でも結構なので、知恵を貸していただけないでしょうか。
###補足情報(FW/ツールのバージョンなど)
WordPress5.3.2
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/30 04:35
2020/03/30 05:54