Twitterカードを表示できるようにする/ESPERANZAのカスタマイズ

Twitterでつぶやく際にブログの記事のURLを入れてつぶやくと、画像付きで記事の要約が表示されるのはご存じだと思います。これをTwitterカードと言います。しかし、WordPressのブログだと、全部こうなるわけではありません。そうなるようにしないとできません。

テーマにTwitterカードの表示機能が最初から備わっていればいいのですが、ESPERANZAの場合、テーマ自体にTwitterカードを表示する機能はありません。

そこでESPERANZAでTwitterカードを表示したい場合、プラグインを使う方法とテーマを編集する方法の二通りがありますので、どちらかでやればいいです。

プラグインとしては・・・

Open Graph and Twitter Card Tags

JM Twitter Cards

・・・などがあります。設定の仕方は各プラグインのページを参考にして下さい。

ここでは、今回、テーマを編集してTwitterカードを表示する方法を紹介します。

編集するのは、functions.phpです。

下記のコードをfunctions.phpに追加します。

小さな画像を使う場合

/START my_meta_ogp

function my_meta_ogp() {
  if( is_front_page() || is_home() || is_singular() ){
    global $post;
    $ogp_title = '';
    $ogp_descr = '';
    $ogp_url = '';
    $ogp_img = '';
    $insert = '';

    if( is_singular() ) { //記事&固定ページ
       setup_postdata($post);
       $ogp_title = $post->post_title;
       $ogp_descr = mb_substr(get_the_excerpt(), 0, 100);
       $ogp_url = get_permalink();
       wp_reset_postdata();
    } elseif ( is_front_page() || is_home() ) { //トップページ
       $ogp_title = get_bloginfo('name');
       $ogp_descr = get_bloginfo('description');
       $ogp_url = home_url();
    }

    //og:type
    $ogp_type = ( is_front_page() || is_home() ) ? 'website' : 'article';

    //og:image
    if ( is_singular() && has_post_thumbnail() ) {
       $ps_thumb = wp_get_attachment_image_src( get_post_thumbnail_id(), 'full');
       $ogp_img = $ps_thumb[0];
    } else {
     $ogp_img = 'サイトアイコンのURL';
    }

    //出力するOGPタグをまとめる
    $insert .= '<meta property="og:title" content="'.esc_attr($ogp_title).'" />' . "\n";
    $insert .= '<meta property="og:description" content="'.esc_attr($ogp_descr).'" />' . "\n";
    $insert .= '<meta property="og:type" content="'.$ogp_type.'" />' . "\n";
    $insert .= '<meta property="og:url" content="'.esc_url($ogp_url).'" />' . "\n";
    $insert .= '<meta property="og:image" content="'.esc_url($ogp_img).'" />' . "\n";
    $insert .= '<meta property="og:site_name" content="'.esc_attr(get_bloginfo('name')).'" />' . "\n";
    $insert .= '<meta name="twitter:card" content="summary" />' . "\n";
    $insert .= '<meta name="twitter:creator" content="@abcdef" />' . "\n";
    $insert .= '<meta name="twitter:site" content="@abcdef" />' . "\n";
    $insert .= '<meta property="og:locale" content="ja_JP" />' . "\n";

    echo $insert;
  }
}

//END my_meta_ogp

add_action('wp_head','my_meta_ogp');//headにOGPを出力

下の方に「summary」とありますが、これは小さな画像を左に表示し、右側に要約を載せる場合です。例えば、下記のようなものです。

Twitterカードの例(小さな画像)
Twitterカードの例(小さな画像を使ったもの)

大きな画像を使いたい場合は、「summary」の代わりに「summary_large_image」とします。

「サイトアイコンのURL」と書いたところは、WordPress管理画面の「メディア > ライブラリー」でサイトアイコンを見つけて、そこに表示されたURLを書き入れます。

それから、「@abcdef」のところは自分のTwitterのIDを入れます。

大きな画像を使う場合

わからないといけないので、Twitterカードで大きな画像を使う場合のコードを書いておきます。サイトアイコンのところにURLを入れて、TwitterのIDのところを自分のTwitterのIDに変えるだけで使えます。

/START my_meta_ogp

function my_meta_ogp() {
  if( is_front_page() || is_home() || is_singular() ){
    global $post;
    $ogp_title = '';
    $ogp_descr = '';
    $ogp_url = '';
    $ogp_img = '';
    $insert = '';

    if( is_singular() ) { //記事&固定ページ
       setup_postdata($post);
       $ogp_title = $post->post_title;
       $ogp_descr = mb_substr(get_the_excerpt(), 0, 100);
       $ogp_url = get_permalink();
       wp_reset_postdata();
    } elseif ( is_front_page() || is_home() ) { //トップページ
       $ogp_title = get_bloginfo('name');
       $ogp_descr = get_bloginfo('description');
       $ogp_url = home_url();
    }

    //og:type
    $ogp_type = ( is_front_page() || is_home() ) ? 'website' : 'article';

    //og:image
    if ( is_singular() && has_post_thumbnail() ) {
       $ps_thumb = wp_get_attachment_image_src( get_post_thumbnail_id(), 'full');
       $ogp_img = $ps_thumb[0];
    } else {
     $ogp_img = 'サイトアイコンのURL';
    }

    //出力するOGPタグをまとめる
    $insert .= '<meta property="og:title" content="'.esc_attr($ogp_title).'" />' . "\n";
    $insert .= '<meta property="og:description" content="'.esc_attr($ogp_descr).'" />' . "\n";
    $insert .= '<meta property="og:type" content="'.$ogp_type.'" />' . "\n";
    $insert .= '<meta property="og:url" content="'.esc_url($ogp_url).'" />' . "\n";
    $insert .= '<meta property="og:image" content="'.esc_url($ogp_img).'" />' . "\n";
    $insert .= '<meta property="og:site_name" content="'.esc_attr(get_bloginfo('name')).'" />' . "\n";
    $insert .= '<meta name="twitter:card" content="summary_large_image" />' . "\n";
    $insert .= '<meta name="twitter:creator" content="@abcdef" />' . "\n";
    $insert .= '<meta name="twitter:site" content="@abcdef" />' . "\n";
    $insert .= '<meta property="og:locale" content="ja_JP" />' . "\n";

    echo $insert;
  }
}

//END my_meta_ogp

add_action('wp_head','my_meta_ogp');//headにOGPを出力

これで、ちゃんと表示されるようになったと思います。

ちなみに、上記のコードは、別にESPERANZAでなくても、Twitterカードの機能がないテーマならどれでも使えると思います。無料の公式テーマもTwitterカード機能がありませんので、上記のコードをfunctions.phpに追加すれば、Twitterカードが表示されるようになります。

[ Twitterカードを表示できるようにする/ESPERANZ... ]日常2021/11/24 16:33