まずは忙しい人のために。
functions.php
/**
* OGPタグ/Twitterカード設定を出力
*/
function 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';
}
$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:site" content="{@twitter_id}" />' . "\n";
$insert .= '<meta property="og:locale" content="ja_JP" />' . "\n";
//facebookのapp_id(設定する場合)
$insert .= '<meta property="fb:app_id" content="{facebook_app_id}">' . "\n";
echo $insert;
}
}
add_action('wp_head','meta_ogp');
ご自身で入力してもらうのはたった3箇所
- ダミー画像のurl
- twitter:site
- fb:app_id
ダミー画像のurlはサムネイルがない場合に表示させるやつです。これでいいと思います
@twitter_idは、ご自身で使われているtwitter_idを入力してください。twitter_idはhttps://twitter.com/から プロフィール から名前の下にあります。
fb:app_idは、こちらから取得できます。
はい終わりです。解説をしていきます。
解説
上から解説していきます。
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:title と og:description と og:url の設定
記事・固定ページの場合、
タイトルは投稿記事のタイトル、ディスクリプションは100文字の記事抜粋、urlはページリンクです。
トップページの場合、
タイトルはサイトのタイトル、ディスクリプションはキャッチフレーズ、urlはトップページの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';
}
og:type : ページの種類を指定
ページタイプの設定はトップページならwebsite、それ以外のページはarticleにしています。
og:image : SNS上で表示させたい画像を絶対パスで指定します。
画像のurlを取得したいので、wp_get_attachment_image_src(添付された画像ファイルの"url"、"width"、"height"属性を配列として返す関数)から、配列の最初のurlを取得します。
サムネイルがなかったら代わりのダミーの画像を表示させます。
$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:site" content="{@twittter_id}" />' . "\n";
$insert .= '<meta property="og:locale" content="ja_JP" />' . "\n";
//facebookのapp_id(設定する場合)
$insert .= '<meta property="fb:app_id" content="{app_id}">' . "\n";
echo $insert;
先ほど各ページで設定したものを出力するものです。
twitter:site : contentには@twitter_idのところにご自身で使われているtwitter_idを入力してください。twitter_idはhttps://twitter.com/から プロフィール から名前の下にあります。
fb:app_id : contentにはfacebookのapp_idを入力してください。取得方法はこちら
これで以上になります。
まとめ
headの中をまとめた記事がこちらになります。