Wpにプラグインなしでmeta ogpを設定する
2023年2月12日
いろいろやってみて最終的に現時点ではこれに。
seo.phpとogp.phpに分けてテンプレートheader.phpに読み込むことで実装
ogp.phpにはTwitter Card部分のコードも含まれている。
別記事でも回てますが、indexさせたくないページの記述部分を反映させるためにはfunctions.phpに以下のコードを追加する。
//indexさせないページの設定 if (! function_exists('is_noindex_page')) : function is_noindex_page() { return (is_month()) || // 月のアーカイブページはインデックスに含めない! is_category('2') || //カテゴリーarticlsはインデックスに含めない is_date() || // 日のアーカイブはインデックスに含めない! is_tag() || // タグのアーカイブページをインデックスに含めない! is_search() || // 検索結果ページはインデックスに含めない! is_404() || // 404ページはインデックスに含めない! is_paged() || //分割されたページはインデックスに含めない! is_attachment() || //添付ファイルページはインデックスに含めない! is_author(); //作成者のアーカイブページはインデックスに含めない! } endif;
ではまずseo.php
<?php if(is_noindex_page()): ?> <meta name="robots" content="noindex,follow"> <?php endif; ?> <?php if(is_page('front-page') || is_front_page()): ?> <title> <?php wp_title('|', true, 'right'); ?><?php bloginfo('name'); ?> </title> <meta name="description" content="<?php bloginfo('description'); ?>" /> <?php elseif(is_single()): ?> <?php if(get_field("originalTitle")): ?> <title><?php echo the_field('originalTitle'); ?> </title> <?php else: ?> <title><?php wp_title(); ?> | Kureai </title> <?php endif; ?> <?php if(get_field("originalDescription")): ?> <meta name="description" content="<?php echo the_field('originalDescription'); ?>" /> <?php $customfield = get_post_meta($post->ID, 'originalDescription', true); ?> <?php elseif(empty($customfield) && has_excerpt($post->ID)): ?> <meta name="description" content="<?php echo original_description(); ?>"> <?php else: ?> <meta name="description" content="<?php if(have_posts()): ?> <?php while(have_posts()): the_post(); ?> <?php $des = get_the_content(); $des = strip_tags($des); $des = str_replace(' ', " ", $des);//改行を除去 $des = str_replace(array("\r\n","\r","\n"), '', $des);//余計な文字列を除去 $desp = mb_substr($des, 0, 120, "UTF-8"); echo $desp; ?> <?php endwhile; ?> <?php endif; ?>" /> <?php endif; ?> <?php elseif(is_category()): ?> <?php if(!is_paged()): ?> <?php $cat_id = get_queried_object()->cat_ID; $post_id = 'category_'.$cat_id; ?> <title><?php single_cat_title('', true); ?> | <?php bloginfo('name'); ?></title> <meta name="description" content="<?php $cat_id = get_queried_object()->cat_ID; $post_id = 'category_'.$cat_id; $text = category_description(); $text = strip_tags($text); $text = mb_substr($text, 0, 120, "UTF-8"); echo $text; ?>" /> <?php else: ?> <title><?php show_page_number(''); ?>ページ目 <?php single_cat_title('', true); ?> | <?php bloginfo('name'); ?></title> <?php endif; ?> <?php elseif(is_page()): ?> <?php if(get_field("originalTitle")): ?> <title><?php echo the_field('originalTitle'); ?> </title> <?php else: ?> <title> <?php wp_title('|', true, 'right'); ?><?php bloginfo('name'); ?> </title> <?php endif; ?> <?php if(get_field("originalDescription")): ?> <meta name="description" content="<?php echo the_field('originalDescription'); ?>" /> <?php else: ?> <meta name="description" content="<?php bloginfo('description'); ?>" /> <?php endif; ?> <?php elseif(is_search()): ?> <title>検索結果 | <?php bloginfo('name'); ?></title> <?php elseif(is_404()): ?> <title>お探しのページはございません | <?php bloginfo('name'); ?></title> <!--(7)その他--> <?php else: ?> <title> <?php wp_title('|', true, 'right'); ?><?php bloginfo('name'); ?> </title> <meta name="description" content="<?php bloginfo('description'); ?>" /> <?php endif; ?> <?php if(!is_404() && !is_search()) { echo '<link rel="canonical" href="https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'].'">'; }?>
そしてogp.php
<!-- OGP --> <meta property="og:type" content="<?php echo ( is_single() ? 'article' : 'website' ); ?>"> <?php if ( is_home() || is_front_page() ) : ?> <meta property="og:title" content="<?php wp_title( '|', true, 'right' ); ?><?php bloginfo( 'name' ); ?>" /> <meta property="og:description" content="<?php bloginfo( 'description' ); ?>" /> <?php elseif ( is_single() ) : ?> <meta property="og:title" content="<?php the_title(); ?>" /> <?php if ( has_excerpt( $post->ID ) ) : ?> <meta property="og:description" content="<?php echo esc_html( get_the_excerpt() ); ?>" /> <?php else : ?> <?php if ( have_posts() ) : ?> <?php while ( have_posts() ) : the_post(); ?> <?php $des = get_the_content(); $des = strip_tags( $des ); $des = str_replace( ' ', ' ', $des );// 改行を除去! $des = str_replace( array( "\r\n", "\r", "\n" ), '', $des );// 余計な文字列を除去! $desp = mb_substr( $des, 0, 120, 'UTF-8' ); if ( $desp ) { echo '<meta property="og:description" content="' . esc_html( $desp ) . '" />'; } else { echo '<meta property="og:description" content="' . esc_html( get_bloginfo( 'description' ) ) . '" />'; } ?> <?php endwhile; ?> <?php endif; ?> <?php endif; ?> <?php elseif ( is_post_type_archive() ) : ?> <meta property="og:title" content="<?php wp_title( '|', true, 'right' ); ?><?php bloginfo( 'name' ); ?>" /> <?php $custon_description = get_post_type_object( get_post_type() )->description; $custon_description = str_replace( array( "\r\n", "\r", "\n" ), '', $custon_description ); if ( $custon_description ) { echo '<meta property="og:description" content="' . esc_html( $custon_description ) . '" />'; } else { echo '<meta property="og:description" content="' . esc_html( get_bloginfo( 'description' ) ) . '" />'; }; ?> <?php elseif ( is_tax() ) : ?> <meta property="og:title" content="<?php single_term_title( '', true ); ?> | <?php bloginfo( 'name' ); ?>" /> <?php $custon_description = strip_tags( term_description() ); $custon_description = str_replace( array( "\r\n", "\r", "\n" ), '', $custon_description ); if ( $custon_description ) { echo '<meta property="og:description" content="' . esc_html( $custon_description ) . '" />'; } else { echo '<meta property="og:description" content="' . esc_html( get_bloginfo( 'description' ) ) . '" />'; }; ?> <?php elseif ( is_category() ) : ?> <?php if ( ! is_paged() ) : ?> <meta property="og:title" content="<?php single_cat_title( '', true ); ?> | <?php bloginfo( 'name' ); ?>" /> <?php $cat_id = get_queried_object()->cat_ID; $post_id = 'category_' . $cat_id; $text = category_description(); $text = strip_tags( $text ); $text = mb_substr( $text, 0, 120, 'UTF-8' ); if ( $text ) { echo '<meta property="og:description" content="' . esc_html( $text ) . '" />'; } else { echo '<meta property="og:description" content="' . esc_html( get_bloginfo( 'description' ) ) . '" />'; } ?> <?php else : ?> <meta property="og:title" content="<?php show_page_number( '' ); ?>ページ目 <?php single_cat_title( '', true ); ?>" /> <?php endif; ?> <?php elseif ( is_page() ) : ?> <meta property="og:title" content="<?php the_title(); ?> | <?php bloginfo( 'name' ); ?>" /> <?php if ( has_excerpt( $post->ID ) ) : ?> <meta property="og:description" content="<?php echo esc_html( get_the_excerpt() ); ?>" /> <?php else : ?> <?php if ( have_posts() ) : ?> <?php while ( have_posts() ) : the_post(); ?> <?php $des = get_the_content(); $des = strip_tags( $des ); $des = str_replace( ' ', ' ', $des );// 改行を除去! $des = str_replace( array( "\r\n", "\r", "\n" ), '', $des );// 余計な文字列を除去! $desp = mb_substr( $des, 0, 120, 'UTF-8' ); if ( $desp ) { echo '<meta property="og:description" content="' . esc_html( $desp ) . '" />'; } else { echo '<meta property="og:description" content="' . esc_html( get_bloginfo( 'description' ) ) . '" />'; } ?> <?php endwhile; ?> <?php endif; ?> <?php endif; ?> <?php else : ?> <meta property="og:title" content="<?php bloginfo( 'name' ); ?>" /> <meta property="og:description" content="<?php bloginfo( 'description' ); ?>" /> <?php endif; ?> <?php if ( ! is_404() && ! is_search() ) { // 404ページと検索ページでなければ表示! echo '<meta property="og:url" content="https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . '">'; echo "\n"; } ?> <?php $str = $post->post_content; $search_pattern = '/<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="' . esc_url( $image[0] ) . '">'; echo "\n"; echo '<meta property="og:image:width" content="' . $image[1] . '">'; echo "\n"; echo '<meta property="og:image:height" content="' . $image[2] . '">'; echo "\n"; } elseif ( preg_match( $search_pattern, $str, $imgurl ) && ! is_archive() ) {// 投稿にサムネイルは無いが画像がある場合の処理 echo '<meta property="og:image" content="' . esc_url( $imgurl[2] ) . '">'; echo "\n"; echo '<meta property="og:image:width" content="1200">'; echo "\n"; echo '<meta property="og:image:height" content="630">'; echo "\n"; } else { // 投稿にサムネイルも画像も無い場合の処理! $ogp_image = get_template_directory_uri() . '/images/og-image.jpg'; echo '<meta property="og:image" content="' . esc_url( $ogp_image ) . '">'; echo "\n"; echo '<meta property="og:image:width" content="1200">'; echo "\n"; echo '<meta property="og:image:height" content="630">'; echo "\n"; } } else { // 単一記事ページページ以外の場合(アーカイブページやホームなど)! if ( get_header_image() ) {// ヘッダーイメージがある場合は、ヘッダーイメージを! echo '<meta property="og:image" content="' . esc_url( get_header_image() ) . '">'; echo "\n"; echo '<meta property="og:image:width" content="1200">'; echo "\n"; echo '<meta property="og:image:height" content="630">'; echo "\n"; } else { // ヘッダーイメージがない場合は、テーマのスクリーンショット! echo '<meta property="og:image" content="' . esc_url( get_template_directory_uri() ) . '/screenshot.png">'; echo "\n"; echo '<meta property="og:image:width" content="1200">'; echo "\n"; echo '<meta property="og:image:height" content="630">'; echo "\n"; } } ?> <meta property="og:site_name" content="<?php bloginfo( 'name' ); ?>"> <meta property="og:locale" content="ja_JP" /> <meta property="fb:app_id" content=""> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:creator" content="twitterのID"> <meta name="twitter:site" content="twitterのID">