WordPress プラグインTwitter Cards Metaを導入
June 21, 2015 – 7:11 pmプラグインTwitter Cards Meta を導入した。
このプラグインをダウンロード、設定しようとしたところ、プラグインのオリジナルに含まれているphp関数 function twcm_get_description() が(このブログ上では)正常に動作しないことが分かった。これを Twitter Card Meta の仕様に沿うように修正し、正常に動作することを確認した。
以下、Twitter Cards の機能概要に触れるとともに、今回修正したphpソースをメモする。
Twitter Cards 概要:
Twitterに投稿する際、Tweet文面中にURLリンクを張ると、リンク対象としたページのサマリー、写真などの情報などを「Card化」したものが Tweet 文に加えて出力されることがある。
この「カード化」機能を有効にするには、リンクの対象とされるHTML作成者が、そのHEADER部に「カード化」に必要なメタ情報を付加すればよい。Tweetされるページにアクセスすることなく、その概要、写真の情報に触れることができ、Twitterをより有効に活用できると思われる。
今回、このブログに導入したプラグイン Twitter Cards Meta は、記事を作成・投稿するに際し、自動的に「カード化」に必要なメタ情報を付加する。一例として、前回エントリー「Postfix(SMTP)へのアタックにhashlimiで対処」を「カード」化するために付加された meta情報を以下にしめす:
<!-- Twitter Cards Meta By WPDeveloper.net --> <meta name="twitter:card" content="summary" /> <meta name="twitter:site" content="@yamasnet" /> <meta name="twitter:creator" content="@yamasnet" /> <meta name="twitter:url" content="https://memorandum.yamasnet.com/archives/Post-6887.html" /> <meta name="twitter:title" content="Postfix(SMTP)へのアタックにhashlimitで対処" /> <meta name="twitter:description" content="最近、サーバーのログ監視ツール(logwatch)にSMTPへのアタック(辞書攻撃)の兆候が認められるようになった。アタックに対処するため、SMTP接続リクエスト(port: 25)をhashlimitを用いて制限することにした。 関連情報をメモしておいた。" /> <meta name="twitter:image" content="https://memorandum.yamasnet.com/wp-content/uploads/2015/06/Twitter_Card_Image00.gif" /> <!-- Twitter Cards Meta By WPDeveloper.net -->
function twcm_get_description()の修正:
上述したmeta情報のうち、リンク対象とされたページの概要が
<meta name="twitter:description" content="最近、サーバーのログ監視ツール(logwatch)にSMTPへのアタック(辞書攻撃)の兆候が認められるようになった。アタックに対処するため、SMTP接続リクエスト(port: 25)をhashlimitを用いて制限することにした。 関連情報をメモしておいた。" />
に出力されている。関数 tccm_get_description() において、 content= に続く部分に概要を表すテキストが生成されている。プラグインのオリジナル版では、このテキストが正しく出力されなかった。
当該function()(twitter_card_meta.php のなかに含まれる)の修正版が以下:
function twcm_get_description() { global $post; $twcm_options=twcm_get_options(); if( has_excerpt() ) $desc = trim(get_the_excerpt()); else { $desc=strip_shortcodes( $post->post_content ); #avoid shortcode content //__insert_start $pos = mb_strpos($desc, '<!--more-->', 0, "UTF-8" ); $desc = mb_substr($desc, 0, $pos, "UTF-8"); //__insert_end } $desc=strip_tags( $desc ); $desc=esc_attr($desc); $desc = trim(preg_replace("/\s+/", " ", $desc)); #to maintain a space between words in description. Since version 1.1.2 if( has_excerpt() ) $desc=twcm_sub_string($desc, 200); else $desc = mb_truncate($desc, $length = 200, $etc = '...' ); return $desc; } //** // function adde 2015/06/19 //** function mb_truncate($string, $length = 80, $etc = '[...]') { if ($length == 0) return ''; if (mb_strlen($string,"UTF-8") > $length) { $string = mb_substr($string, 0, $length, "UTF-8"); return $string.$etc; } else { return $string; } }
なお、修正版の関数では、ブログ記事の概要として、Excerpt がある場合にはこれを採用。Excerptがない場合には、本文にタグ<!–more–>がある場合、これに先立つ部分、そして <!–more–>がない場合には先頭から200文字を採用することにしている。