アプリ紹介ブログパーツ「アプリーチ」のタグをWordPressでAMP化する処理のヒント

先日、アプリーチのアプリ紹介タグをWordpressでAMP化する処理を書いてみました。

基本的に、Wordpress投稿本文の出力をフックして、本文中テキスト内に出てくる、アプリーチのタグを置換して対応をしているだけなのですが、うまくいったのでやり方をメモがてら紹介です。

スポンサーリンク
レクタングル(大)広告

WordPressでアプリーチタグをAMP化する

基本的に、置換によるテキスト処理がメインです。

やっていることといえば、以下のような感じです。

  • style属性を取り除く
  • target属性を取り除く
  • imgタグをamp-imgに変換
  • アプリーチ用のスタイルを書く

AMPタグ変換処理

functions.phpに、以下のような投稿本文出力のフック関数を書きます。

//AMP用にコンテンツを変換する
function convert_appreach_for_amp($the_content){
  if ( [AMPページかそうでないかを判別する関数もしくは変数] ) {
    return $the_content;
  }

  //style属性を取り除く
  $the_content = preg_replace('/ *?style=["][^"]*?["]/i', '', $the_content);
  $the_content = preg_replace('/ *?style=[\'][^\']*?[\']/i', '', $the_content);

  //target属性を取り除く
  $the_content = preg_replace('/ *?target=["][^"]*?["]/i', '', $the_content);
  $the_content = preg_replace('/ *?target=[\'][^\']*?[\']/i', '', $the_content);

  //アプリーチの画像対応
  $the_content = preg_replace('/<img([^>]+?src="[^"]+?(mzstatic\.com|phobos\.apple\.com|googleusercontent\.com|ggpht\.com)[^"]+?[^>\/]+)\/?>/is', '<amp-img$1 width="75" height="75" sizes="(max-width: 75px) 100vw, 75px"></amp-img>', $the_content);
  $the_content = preg_replace('/<img([^>]+?src="[^"]+?nabettu\.github\.io[^"]+?[^>\/]+)\/?>/is', '<amp-img$1 width="120" height="36" sizes="(max-width: 120px) 100vw, 120px"></amp-img>', $the_content);


  return $the_content;
}
add_filter('the_content','convert_appreach_for_amp', 999999999);

[AMPページかそうでないかを判別する関数もしくは変数]の部分には、表示する投稿ページが「AMPページなのか?」を判別する関数もしくは、変数を書いて、「通常の投稿ページではAMP下処理をしない」ようなものを書く必要があります。

判別方法のヒントとしては、以下に書いてある方法などを参考にしていただければと思います。

先日、自作のWordpressテーマをAMP化しました。 その時に、一番苦労したのが、Wordpress本文にある「AMP仕様...

AMP用スタイル

前項のPHP処理で、アプリーチタグからstyle属性がすべて取り除かれています。

なので、アプリーチ内のタグにインラインで設定されているスタイルは適用されなくなりますので、そのままブラウザで見ると、表示が崩れます。

ですので、アプリーチタグ内のHTML要素やIDやclassに対して、改めてスタイルを指定してやる必要があります。

スタイル指定は、style.cssなどに以下のように記述します。

/************************************
** アプリーチのスタイル
************************************/
#appreach-box{
  text-align: left;
  margin: 1em 0;
  border: medium double #ccc;
}

#appreach-box br{
  display: none;
}

#appreach-box p{
  padding: 0;
  margin: 0;
}

#appreach-image{
  float: left;
  margin: 10px;
  width: 25%;
  max-width: 75px;
  border-radius: 10%;
}

.appreach-info{
  margin: 10px;
}

#appreach-developer{
  font-size: 80%;
  display: inline-block;
  _display: inline;
}

#appreach-price{
  font-size: 80%;
  display: inline-block;
  _display: inline;
}

.appreach-powered{
  font-size: 80%;
  display: inline-block;
  _display: inline;
}

.appreach-links{
  margin-top: 5px;
}

#appreach-itunes-link,
#appreach-gplay-link{
  display: inline-block;
  _display: inline;
}

.appreach-footer{
  margin-bottom: 10px;
  clear: left;
}

上記は、アプリーチタグのインラインスタイルを、CSSスタイルに書き直したものです。

このままのスタイルでも十分なような気はしますが、それぞれのサイトに合わせて「スタイルをよりモバイルで見やすくする」といったような変更を加えると尚良いかもしれません。

まとめ

僕の場合は、こんな感じでアプリーチタグをAMP表示に対応させました。

AndroidとiPhoneのアプリを紹介するのに、アプリーチは結構使われているのを見かけます。

もしAMPバリデーターなどでアプリーチタグ部分にエラーなどが出たら、上で紹介したようなタグの書き換えで対応できるかもしれません。

サイト アプリーチ

『アプリ紹介ブログパーツ「アプリーチ」のタグをWordPressでAMP化する処理のヒント』へのコメント

  1. 名前: 投稿日:2020/06/05(金) 11:39:08 ID:38a4cc00d

    こんにちは!

    寝ログさんのAMP対応の記事について、とてもありがたく拝見しております。

    そのまま実施しようと思い、AMPタグ変換を打ち込んだのですが、以下のように出てしまい、記事が表示されなくなってしまいました…。

    Fatal error: Cannot redeclare convert_appreach_for_amp() (previously declared in /home/c3545048/public_html/familynavi.jp/wp-content/themes/the-thor/inc/amp/convert.php:84) in /home/c3545048/public_html/familynavi.jp/wp-content/themes/the-thor/inc/amp/convert.php on line 84–

    大変素人的な質問で恐縮ですが、解決方法について、もしわかりましたら、ご教授いただけないでしょうか?

  2. アバター画像 名前:わいひら 投稿日:2020/06/05(金) 23:15:16 ID:bb35c13a1

    申し訳ないですが、当記事の行動は、あくまでサンプルコードです。
    こちらに同じテスト環境があるわけではないので、確かなことはわかりません。

    ただ、エラー箇所を見る限りでは、THE THORを使われているようですね。
    それでエラーメッセージの内容は「Fatal error: Cannot redeclare convert_appreach_for_amp()」です。
    このエラーメッセージは、関数が二重定義されているときに出力されます。
    THE THORは、使ったことがないので確かなことはわかりませんが、テーマ上でこの当記事のカスタマイズのconvert_appreach_for_amp関数が使われているものと思われます。
    もしくは、同名の独自の関数が使われているか。

    テーマ側で使用されているconvert_appreach_for_amp関数を探して、当記事のコードと同じ内容か確認してください。
    当記事と同じコードならカスタマイズの必要はないですし、別の行コードであれば、当記事の関数名を別のものに変更することで対応できるかと思います。