3119581913116

8/10 いいね!日記

いいね!のイメージ by IllustAC

前回の続き)そんな感じでデザインはだいたい完成。細かい微調整は今もちょこちょこやってるけど、実はSSL化の時に積み残した作業があった。Facebookの「いいね!」はURLが変わったときにすべて0になってしまうんだけど、これを新URLに引き継ぐ方法があるというので調べてみたら、これが結構ハードルが高い。要するにHTMLソースの中にあるog:urlプロパティを旧URLにして、FacebookのクローラーがそのURLを参照できるようにすればいいのだけど、そのためには、以下の条件を満たさなければならない。

  1. 旧URLでWordPressのページを閲覧可能にする
  2. Facebookクローラーのみ旧URLにアクセス可能にする
  3. 新URL切り替え前の投稿ページのみog:urlプロパティに旧URLを指定する

1.については、新旧両方のURLで同じWordPressを参照していれば楽なんだけど、うちのサイトはもともとzip.s44.xrea.comドメインでホームページを作っていたところに後から/blogサブディレクトリの下にブログを追加していて、そのままだといろいろ不都合があるので、新ドメイン用に新たにWordPressをインストールして中身だけまるまるコピーしていた。旧ブログのデータはそのまま残っていたけどURLを変えていたので、これを元のzip.s44.xrea.com/blogに戻した。次に、2.の条件のためにFacebookクローラー以外は旧URLにはアクセスさせずに新URLに転送させる必要があり、この設定を.htaccessというファイルに書かなくてはいけない。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} !(Facebot|facebookexternalhit/1.1) [NC]
RewriteCond %{HTTP_HOST} ^zip.s44.xrea.com
RewriteRule ^(.*)$ https://zipskillingtime.xrea.jp/$1 [R=301,L]
</IfModule>

こんな感じでどこかのサイトにあった例文を参考にして.htaccessを作成し、/blogのルートに設置。これで2.の条件は満たせるはず。残るは3.なんだけど、ここが一番の難関。この部分はOGPというFacebookでシェアしたときのFacebookページ上の表示内容に関係する項目なんだけど、投稿ごとにこの項目を変更する機能は付いていない。となると後はCocoonのPHPソースをカスタマイズするしかない。Cocoonのソースファイルを調べると/tmpディレクトリの中にheader-ogp.phpを発見。どうやらこれっぽい。ソースを見ると下記の記述がある。

 echo '<meta property="og:url" content="'; echo esc_url(get_the_permalink()); echo '">';echo "\n";//単一記事URLを表示

これを以下の処理に変更(2019.7.20までの投稿のog:urlを旧URLにする)。

$ogurl = esc_url(get_the_permalink());
$tgtdate = strtotime('2019-07-21');
if (get_post_time() < $tgtdate) {
$ogurl = str_replace('https://zipskillingtime.xrea.jp', 'http://zip.s44.xrea.com/blog', $ogurl);
}
echo '<meta property="og:url" content="'; echo $ogurl; echo '">';echo "\n";//単一記事URLを表示

変更したheader-ogp.phpを子テーマの/tmpディレクトリに置いて、過去の投稿を確認するが、「いいね!」の数は0のまま。Facebookクローラーが実際にサイトを訪問(スクレイピング)しないと反映されない模様。Facebookクローラーの確認や再スクレイピングができるページがあるので、試してみると、「いいね!」の数が復活。よしよし満足。元々が数個しか付いてないのにこんなに苦労してやる意味があったのか、とかは考えてはいけない…。


コメント