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="http://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="http://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文字を採用することにしている。
    


Post a Comment