Simplicityでは投稿ページでSEO設定を登録できて、そこでメタキーワードを設定することができます。
SEOにメタキーワド不要論もある中、ここに力を入れるのもどうかと思いましたが、Simplicityでこういう設定ができる状態で放置するのもなぁ、と。
でもいちいち投稿記事にメタキーワードを入力するのもめんどくさいから、何もしなくても自動的に入るようにしよう、と思ってやったのが今回の内容です。
当サイトでは取り入れてないですが、他のとあるサイトをカスタムしている時、そこでカスタムタクソノミーを使っていて、タームがキーワードに良さそうだったのでそれを拾うようにしました。
子テーマを使用しているので、もともと親テーマにあった get_the_keywores という関数を書き換えている形です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
/* -------------------------------------------------- // メタキーワード編集 -------------------------------------------------- */ //投稿・固定ページのメタキーワードの取得 if ( !function_exists( 'get_the_keywores' ) ): function get_the_keywores(){ global $post; $arr_trim_key = array(); $meta_keywords = get_meta_keywords_singular_page();//投稿画面で登録するSEO設定のメタキーワード if ( $meta_keywords && ! is_wp_error( $meta_keywords ) ){ $arr_keywords = explode( ',', $meta_keywords );//配列に格納 foreach ( $arr_keywords as $keyword ) { if( !in_array( $keyword, $arr_trim_key ) ){ $arr_trim_key[] = trim( $keyword );//スペース除去 } } } // カスタムタクソノミー「アイテムキーワード(itemkey)」のタームを取得 $terms = get_the_terms( $post->ID, 'itemkey' ); if ( $terms && ! is_wp_error( $terms ) ){ foreach ( $terms as $term ) { if( !in_array( $term->name, $arr_trim_key ) ){//重複チェック $arr_trim_key[] = $term->name;//配列に格納 } } } $keywords = join( ",", $arr_trim_key ); // キーワードがない時に共通キーワードを入れる if( empty($keywords) ){ $keywords = 'キーワード,サンプル'; } /* //カテゴリーを入れることもできる if (!$keywords) { $categories = get_the_category($post->ID); $category_names = array(); foreach($categories as $category): array_push( $category_names, $category -> cat_name); endforeach ; $keywords = implode($category_names, ','); } */ return $keywords; } endif; |
流れとしてはSEO設定のメタキーワードを一旦配列に格納、さらにカスタムタクソノミー(上記では「itemkey」というスラッグ)のタームを取得して、先に格納していたメタキーワードと重複しなければ更に配列に追加で格納、最終的に何もキーワードがない場合は強制的に共通キーワードを入れるようにしました。
重複を少しでも厳密にするため、途中、キーワード前後のスペースを取り除く処理(trim)も入れました。
もともと親テーマのfunctions.phpにあった関数ではSEO設定のメタキーワードが入ってなかったらカテゴリーをキーワードとして登録するという処理だったのですが、私の場合、カテゴリーを利用していなかったためコメントアウトしてます。