All in One SEO Packはワードプレスの内部要因を整えるためのプラグインとしてよく知られたプラグイン。
ですが、All in one SEO Packのタイトルを変更したいと思った時、設定画面だけでは細かな変更ができないので、今回は私が実施した変更を紹介します。
今回の変更内容
Custom Post Type UI(管理画面でカスタム投稿タイプを作成するプラグイン)で作ったタイトル変更。
○○○(タクソノミー名)2ページ目、○○○(タクソノミー名)3ページ目といった具合にタイトルを設定するコード。
functions.phpの最下部に以下のコードを追加
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 |
function change_aioseop_title( $title ) { if(is_tax('タクソノミーのスラッグ')) { if (!is_paged()) { $terms = get_the_terms($post->ID,'タクソノミーのスラッグ'); foreach ( $terms as $term ) { $term_name = $term->name; } $customname = (get_post_type_object(get_post_type())->label); $blogtitle = get_bloginfo( 'name' ); $title = $term_name.$customname.'|'.$blogtitle; return $title; } else { $terms = get_the_terms($post->ID,'タクソノミーのスラッグ'); foreach ( $terms as $term ) { $term_name = $term->name; } $customname = (get_post_type_object(get_post_type())->label); $archivepage = get_query_var('paged'); $blogtitle = get_bloginfo( 'name' ); $title = $term_name.$customname.'('.$archivepage.'ページ目)'.'|'.$blogtitle; return $title; } } elseif( is_archive() && is_paged()) { $customname = (get_post_type_object(get_post_type())->label); $archivepage = get_query_var('paged'); $blogtitle = get_bloginfo( 'name' ); $title = $customname.'('.$archivepage.'ページ目)'.'|'.$blogtitle; return $title; } elseif(is_archive() && !is_paged()) { $customname = (get_post_type_object(get_post_type())->label); $archivepage = get_query_var('paged'); $blogtitle = get_bloginfo( 'name' ); $title = $customname.'|'.$blogtitle; return $title; } elseif(is_home() || is_front_page()) { $title = get_bloginfo( 'name' ); return $title; } } add_filter( 'aioseop_title', 'change_aioseop_title' ); |
ページの判定をするために使用した条件分岐タグ
関数名 | 条件判断する内容 |
---|---|
is_tax() | カスタムタクソノミー一覧が表示されているか |
is_tax(‘タクソノミー名’) | 「タクソノミー名」で指定されたタクソノミー一覧が表示されているか(タクソノミー名はスラッグで指定) |
is_paged() | ページが分割され、2ページ目以降かどうか |
is_archive() | 一覧ページが表示されているか |
is_home() | メインページが表示されているかどうか |
is_front_page() | フロントページ(サイトのホームページ)が表示されているかどうか |
データを取得するために使用したタグ。
get_the_terms() | 投稿に割り当てられたタクソノミー項目を取得(タームのオブジェクトを取得) |
foreach() | 取得した配列、オブジェクトを反復処理(今回はオブジェクトメンバーを1つずつ表示) |
$post->ID | 投稿IDを取得 |
get_post_type_object() | 投稿タイプのオブジェクトを取得 |
get_post_type() | 投稿タイプを取得 |
get_bloginfo() | サイト情報取得 |
get_query_var() | データベースの検索に使用したクエリを取得 pagedを指定することで何ページ目かを取得 |
関数を実行するタイミングを指定するためのフィルターフック
フィルターフック名 | 内容 |
---|---|
aioseop_title | All in one SEO Packのタイトルを変更する時に使うフィルターフック |
プログラムの流れ
プログラムの流れとしては、
- どのテンプレートを使っているかのページの判定
- 1ページ目か2ページ目以降かの判定
- タクソノミーのデータ取得
- 表示したいタイトルのデータ取得と表示
まずはじめに、どのテンプレートを使っているかのページの判定をしているのが以下のコードになります。
1 2 3 4 |
if(is_tax('タクソノミーのスラッグ')) { if (!is_paged()) { } } |
is_tax(‘タクソノミーのスラッグ’)で特定のタクソノミーのページがどうかを判定。
その次に、!is_page()で、1ページ目か2ページ目以降かを判定しています。
is_pageは2ページ目以降の場合にtrueを返すので、!で論理値を反転させることで、1ページ目の場合はtrueとなるように条件設定しています。
次に1ページ目だった場合のタイトル設定をしています。
1 2 3 4 5 6 7 8 |
$terms = get_the_terms($post->ID,'タクソノミーのスラッグ'); foreach ( $terms as $term ) { $term_name = $term->name; } $customname = (get_post_type_object(get_post_type())->label); $blogtitle = get_bloginfo( 'name' ); $title = $term_name.'の'.$customname.'|'.$blogtitle; return $title; |
get_the_terms()関数は、タームの情報を取得する関数で、次の$post->IDと’タクソノミースラッグ’でページのタクソノミーの投稿情報を取得しています。
そして、foreach()でその情報を出力。
term->nameでforeachで出力された情報のうち、タクソノミーの分類名(ターム名)を取得。
get_post_type_objectは投稿タイプのオブジェクトを取得しますが、()内にget_post_typeを入れることで投稿タイプ(ここではカスタム投稿タイプ)を指定して、その投稿タイプの情報が詰まったオブジェクトを取得しています。そして->labelで投稿タイプ名を取得しています。つまり、カスタム投稿タイプのタクソノミー名を取得しています。
最後に、get_bloginfo()でブログのサイト名を取得しています。
結果、$titleには、タクソノミーのターム名($term_name)、タクソノミー名($customname)、サイト名($blogtitle)が入った変数になります。
そして、最後にreturn $titleでこの変数を返して、タイトルタグにこの変数を挿入しています。
これで1ページについては、タクソノミーのターム名、タクソノミー名、サイト名がつながったタイトルが作成されました。
次は2ページ目以降のタイトルを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 |
else { $terms = get_the_terms($post->ID,'タクソノミーのスラッグ'); foreach ( $terms as $term ) { $term_name = $term->name; } $customname = (get_post_type_object(get_post_type())->label); $archivepage = get_query_var('paged'); $blogtitle = get_bloginfo( 'name' ); $title = $term_name.$customname.'('.$archivepage.'ページ目)'.'|'.$blogtitle; return $title; } |
if分のelseで始まっているのは、最初の条件である!is_paged()以外という事。
つまり1ページ目以外なので、この条件分岐は2ページ目以降の場合tureを返す事になります。
あとは、1ページ目の表示の時と同じで、get_the_terms($post->ID,’タクソノミーのスラッグ’); 投稿IDとタクソノミーのスラッグを使ってタクソノミー情報を取得し、foreach()と$term->nameでタクソノミーのターム名を取得。
次に、get_post_type_object()のパラメーターにget_post_type()を指定し、さらに->labelでタクソノミー名を取得。
そして、1ページ目のタイトルの作成にはでてきませんでしたが、get_query_var()に’paged’を指定することで、今何ページ目にあたるかの情報を取得しています。
タイトルに「○ページ目以降」というテキストを挿入するためには、この「get_query_var(‘paged’)」という記述は欠かせないものになります。
そして、最後にget_bloginfo(‘name’)でサイトタイトルを取得します。
結果、$titleには、タクソノミーのターム名($term_name)、タクソノミー名($customname)、現在のページ数($archivepage)、サイトタイトル($archivepage)が入ることになります。
さて次はアーカイブページについてです。
アーカイブページにのタイトルについては条件分岐以外は上記と同じ考え方でタイトルの作成をする事ができるので、問題ありません。
では、アーカイブページの条件分岐について解説します。
1 2 3 4 5 6 |
elseif( is_archive() && is_paged()) { $customname = (get_post_type_object(get_post_type())->label); $archivepage = get_query_var('paged'); $blogtitle = get_bloginfo( 'name' ); $title = $customname.'('.$archivepage.'ページ目)'.'|'.$blogtitle; return $title; } |
まず、elseifでそれまでの条件に当てはまらなかった処理をするという条件分岐にしています。
それまでの処理というのは、特定のタクソノミーではない場合という事ですね。
次に、is_archive()で一覧ページが表示されているかを判定して、is_paged()で2ページ目以降かどうかを判定しています。
この2つの条件を&&でつなぎ、どちらもtureの場合だけその下の処理が実行され、タイトルが作られるようにしています。
処理内容としては、特定のタクソノミー名に該当した時と同じなので省略します。
次は、アーカイブの1ページ目の処理です。
1 2 3 4 5 6 |
elseif(is_archive() && !is_paged()) { $customname = (get_post_type_object(get_post_type())->label); $archivepage = get_query_var('paged'); $blogtitle = get_bloginfo( 'name' ); $title = $customname.'|'.$blogtitle; return $title; } |
elseifで今までの条件に当てはまらなかった処理を実行。
次に、is_archive()で一覧ページが表示されているかを判定して、!is_paged()で1ページ目かどうかを判定しています。
この2つの条件を&&でつなぎ、どちらもtureの場合だけその下の処理が実行される、つまりアーカイブページの1ページ目の場合だけ実行される内容になっています。
最後にトップページのタイトルです。
1 2 3 |
elseif(is_home() || is_front_page()) { $title = get_bloginfo( 'name' ); return $title; } |
今まで、タイトルの変更のコードを書いてきましたが、All in one SEO Packで設定されているタイトルを変更する場合、どうやら他のページのタイトルを設定する必要があるようです。
私は上記のページのタイトルを変更してから、確認作業を行っていると、なんとトップページのtitleタグに何も入っていませんでした。
なので、最後にトップページのタイトルも作成しておきたいと思います。
まずは、トップページかどうかの判定です。
elseifで今までの条件に当てはまらなかった処理を実行。
次に、is_home()とis_front_pageでトップページかどうかを判定しています。
ワードプレスのトップページはメインページをトップページにしている場合と、フロントページをトップページにしている場合があるので、どちらでも対応ができるように、この2つの条件を&&で繋いでいます。
あとは、get_bloginfo( ‘name’ )でサイトタイトルの情報を取得して、returnでその値を返して終わりです。
All in One SEO Packで設定しているタイトルを変更する方法のまとめ
以上がAll in One SEO Packで設定しているタイトルを変更する方法についての解説になります。
今回はカスタム投稿タイプを使用しているので、少し複雑なプログラムになってしまったかも分かりませんが、基本はページの判定をして、そこにタイトル作成に必要な情報を取得していく流れになります。
ページの判定と必要な情報の取得ができれば、All in One SEO Packで設定しているタイトルを上記のタイトル以外にも変更できるので、良かったら参考にしてみてくださいね。