meta propertyはsns用の記述
※特に記事ごとにタイトルやディスクリプション、画像を個別に設定すると効果的なので
条件分岐(is_single)で対応。
また、アイキャッチ画像があれば取得し、無ければ記事内の画像を取得する
まったく画像が無ければデフォルトで用意した画像(sns_image.jpg)を取得する。
2022.4.21追記
17行目がエラーになるので修正
こちらが修正版
$str = isset($post->post_content);
こちらも使える”??” 演算子 (null 合体演算子)
$str = $post->post_content ?? 'none';
<meta property='og:locale' content='ja_JP'>
<meta property='og:site_name' content='<?php bloginfo('name'); ?>'>
<?php
if (is_single()){
if(have_posts()): while(have_posts()): the_post();
echo '<meta property="og:title" content="'; the_title(); echo '">';echo "\n";
echo '<meta property="og:description" content="'.mb_substr(get_the_excerpt(), 0, 120).'">';echo "\n";
echo '<meta property="og:url" content="'; the_permalink(); echo '">';echo "\n";
echo '<meta property="og:type" content="article">';echo "\n";
endwhile; endif;
} else {
echo '<meta property="og:title" content="'; bloginfo('name'); echo '">';echo "\n";
echo '<meta property="og:description" content="'; bloginfo('description'); echo '">';echo "\n";
echo '<meta property="og:url" content="'; bloginfo('url'); echo '">';echo "\n";
echo '<meta property="og:type" content="website">';echo "\n";
}
$str = $post->post_content;
$searchPattern = '/<img.*?src=(["\'])(.+?)\1.*?>/i';
if (is_single()){
if (has_post_thumbnail()){
$image_id = get_post_thumbnail_id();
$image = wp_get_attachment_image_src( $image_id, 'full');
echo '<meta property="og:image" content="'.$image[0].'">';echo "\n";
} else if ( preg_match( $searchPattern, $str, $imgurl )){
echo '<meta property="og:image" content="'.$imgurl[2].'">';echo "\n";
} else {
echo '<meta property="og:image" content="'; bloginfo('template_url'); echo '/images/sns_image.jpg'; echo '">';echo "\n";
}
} else {
echo '<meta property="og:image" content="'; bloginfo('template_url'); echo '/images/sns_image.jpg'; echo '">';echo "\n";
}
?>
<meta name="twitter:card" content="summary_large_image">