cocoonフック調査~xternal_blogcard_amazon_image_widthの使い方と活用例
 
タナビーの高梨です。
WordPressのテーマ「Cocoon」には、テーマ改変なしでデザインや動作を拡張できる豊富なアクション・フィルターフックが用意されています。
分かる範囲で内容を調査したのでブログにまとめていこうと思います。
今回は外部ブログカードがアマゾンアソシエイツの時にサムネイル画像幅を変更できるフィルターフック
👉xternal_blogcard_amazon_image_width
です
フックの概要
| フック名 | 発火タイミング | 
|---|---|
| xternal_blogcard_amazon_image_width | 下記の理由により発火しない気がします | 
発火条件
通常は「外部ブログカードがAmazonアソシエイトURLである場合」に呼ばれる想定ですが、実際には内部ロジックの関係で apply_filters() がコールされないように見えます。
発火しないと思われる理由
・apply_filters()はfetch_card_image()のファンクション内でコールされる
・fetch_card_image()がコールされる箇所のロジック
if (isset($ogp->image) && empty($ogp->image)) {
 $res = fetch_card_image($ogp->image, $url);
}つまり、$ogp->imageが定義されていて、かつ、$ogp->imageがNULLや空白などの時にfetch_card_image()はコールされ、引数として$ogp->imageが渡される
・fetch_card_image()の冒頭
function fetch_card_image($image, $url = null){
  $image = preg_replace('/\?.*$/i', '', $image);
  $filename = substr($image, (strrpos($image, '/'))+1);
  $allow_exts = array('png', 'jpg', 'jpeg', 'gif' );
  $ext = 'png';
  $temp_ext = get_extention($filename);
  if ( !in_array($temp_ext, $allow_exts) ) {
    return ;
  }$imageはNULLや空白などであるため、$filenameもNULLや空白。
このため$temp_extもNULLや空白になり、!in_array($temp_ext, $allow_exts)は必ずtrueになるため、必ずここで関数が返り、この下にあるapply_filters()がコールされることはない。
使いどころ
もし発火するなら、Amazonアソシエイトのサムネイル画像サイズを自由に切り替えられる場面で役立つはずです。
例えば:
・Amazonサムネイルを小さくして表示速度を優先したい
・独自のカスタムサイズを指定したい
apply_filters呼び出し元のソースコード
lib/blogcard-out.php
$width = apply_filters('external_blogcard_amazon_image_width',THUMB160WIDTH );引数
$width:(string)画像サイズの名称
カスタマイズコード例
上記理由から絶対にコールされることがない気がしますが、書くとしたらこうです。
function init_plugin () {
    add_image_size( 'amazon_thumbnail_size', 10, 10 , true );
 }
 add_action('init', 'init_plugin' );
function customize_external_blogcard_amazon_image_width ( $width ) {
    return 'amazon_thumbnail_size';
}
add_filter('external_blogcard_amazon_image_width', 'customize_external_blogcard_amazon_image_width');注意点
・内部ロジック上、このフックは実際には発火しないように見えます
・実装を試す場合は必ず検証環境で確認してください
まとめ
・external_blogcard_amazon_image_width はAmazon外部ブログカード用のサムネイルサイズ変更用フィルター。
・ただし現状のCocoonコード上では 呼ばれる条件を満たさず発火しない 可能性が高い。
・発火するのであれば、Amazonカード画像サイズを柔軟に調整できるようになるはずです。