【WordPress】【PHP】アイキャッチ画像で、外部画像URLを指定する方法

  • 投稿 : 2018-09-30

アイキャッチ画像にFlickrとかGoogle Photoとかの外部画像を使いたい

アイキャッチ画像にFlickrとかGoogle Photoとかの外部画像を使いたいけど、テーマファイルを変更したくないとかいう場合の方法です。

ちょっと細工すると、Wordpressの関数の「get_the_post_thumbnail_url()」「the_post_thumbnail()」で取得できるようになり、多くテーマファイルをほぼ修正しないで利用することが可能になります。

動作確認

add_filter('get_post_metadata', 'my_get_post_metadata_thumbnail_id', 10, 4);
function my_get_post_metadata_thumbnail_id($metadata, $object_id, $meta_key, $single) {
  $thumbnail_id = 1000000000;
  if("_thumbnail_id" === $meta_key){
      return $thumbnail_id;
  }
  return $metadata;
}
add_filter( 'wp_get_attachment_image_src', 'my_thumbnail_wp_get_attachment_image_src',10,3);function my_thumbnail_wp_get_attachment_image_src($image, $attachment_id,$size) {
  $thumbnail_id = 1000000000;
  if($attachment_id === $thumbnail_id){
    $img  = "https://lh3.googleusercontent.com/-QfiisRaozvo/W6-YZ_7KXAI/AAAAAAAACxs/VV5HmPsj4i4i5oPfTpAYEwiCkwsfn135QCKgBGAs/s1600/sample-320x90.png";
    $image[0]= $img; 
    $image[1]=320;
    $image[2]=90;
    $image[3]=0;
  }
  return $image;
}

上記をテーマのfunctions.phpに追加します。そうすると、アイキャッチ画像がすべて「https://lh3.googleusercontent.com/-QfiisRaozvo/W6-YZ_7KXAI/AAAAAAAACxs/VV5HmPsj4i4i5oPfTpAYEwiCkwsfn135QCKgBGAs/s1600/sample-320x90.png」になります。

カスタムフィールドで指定した画像URLをアイキャッチ画像に

カスタムフィールド img_url を作成する

Wordpress標準の機能でもカスタムフィールドを表示できますが、やぼったくなるので自身で表示・更新できるといいなという話で実際にやってみました。Step 1:投稿画面にカスタム

ブログ運営のためのブログカスタマイズ

記事毎に、外部画像のURLをimg_urlとして登録します

カスタムフィールド img_url をアイキャッチ画像に

add_filter('get_post_metadata', 'my_get_post_metadata_thumbnail_id', 10, 4);
function my_get_post_metadata_thumbnail_id($metadata, $object_id, $meta_key, $single) {
  $thumbnail_id = 1000000000;
  if("_thumbnail_id" === $meta_key){
    $img  = get_post_meta($object_id,"img_url",true);
    if(empty($img)){
      return $metadata;
    }else{
      return $thumbnail_id + $object_id;
    }
  }
  return $metadata;
}
add_filter( 'wp_get_attachment_image_src', 'my_thumbnail_wp_get_attachment_image_src',10,3);function my_thumbnail_wp_get_attachment_image_src($image, $attachment_id,$size) {
  $thumbnail_id = 1000000000;
  if($attachment_id > $thumbnail_id){
    $img  = get_post_meta($attachment_id - $thumbnail_id,"img_url",true);
    $image[0]= $img; 
    //$image[1]=320;
    //$image[2]=90;
    //$image[3]=0;
  }
  return $image;
}

上記をテーマのfunctions.phpに追加してください。

thumbnail_id(attachment_id )は、1000000000 +記事IDにしています。attachment_id がWordpressがメディアとして画像登録すると割り当てられる番号です。嘘でも番号がないと動作しないので、未使用だと思われるかなり大きい数字の部分の一部を使っています。もちろんこの番号が重複すると、おかしくなります。

$image[1]、$image[2]で画像サイズを指定するようなのですが、なくても動作するようなので設定してません。外部画像の大きさもURLだけではわからないですしね。

スポンサーリンク