register_post_type_args を使ったpostのarchiveページ表示と「Yoast SEO」
- WEBSITE制作
- WEB関連
- Wordpress
タイトルどう書くべきか?難しい(笑)
先日、昔作ったサイトで、YoastSEOの”設定”でWPのデフォルトの「投稿」を選ぶと必ずエラー画面が出るという問題が発生している事に気づいた。
もちろん最初から大きく修正していない箇所なので、サイトを作成した当時からエラーになっていたのでしょうが、誰も気づいていなかったわけです。
まあ、よくある話ですが、コーダーがWPサイトを構築した後にディレクターさんがSEO対策にYoastSEOかAIOSEOあたりのプラグインを入れた様なパターンでした。
それで、YoastSEOのこのエラーがなぜ起こるか?に関して調べました。
(!)t.split is not a function
と出てるので、これでググったのですが、同じエラーのお話が出てくるも、対処法は、バージョン新しくすれば直るとか。。具体的な問題はわからず。
それで、デフォルトの「post」に関係している事は確かなので、その線でテーマ内を確認してみたところ、以下のソースの「$args[‘has_archive’] = ‘news‘;」を無効化(コメントアウト)するとエラーが出ない事に気づきました。
// ソース1
add_filter( 'register_post_type_args', function( $args, $post_type ) {
global $wp_rewrite;
if ( 'post' === $post_type ) {
$args['rewrite'] = true;
$args['has_archive'] = 'news';// <-- この行。
//色々省略
}
return $args;
}, 10, 2 );/**/
上記「ソース1」は、自己テーマを作成する際、
デフォルトの post を「 https://dummyurl.com/news/ 」で表示できる様にする。
その際、Themesファイル内の archive.php をテンプレートとして参照するというテクニックです。
※「register_post_type_args」でググると利用例がたくさん出てきます。丁寧に説明してくださってるページがたくさんあるので、よくわからない場合参考にしてください。
デフォルトの「post」の一覧ページをWPのTOPページとは別に表示したいけど、固定ページで「news」ってページ作って、そのテンプレートファイルの「page-news.php」内でサブループ書いて表示するのもなんかスマートじゃ無いなぁ。
なんて時には大いに使えるナイスな方法なんです。
ただ、これを使うと文頭でご紹介したエラーが出る。消せば「/news/」ページでarchiveは表示できない。はい。詰みました(笑)
理由はわかりません。YoastSEOでは上記方法は想定されてないという事ですかね?環境によるのかな?わからんです。
そして、さらに悪いことが。。
上記「ソース1」の方法で「 https://dummyurl.com/news/ 」を作成した場合、
なぜかYoastSEOによって、
<meta name="robots" content="noindex,follow" />
が出力されるんですよね。
「YoastSEO」の設定では「固定ページ」とか「投稿」とか、カスタムポストを作ってれば自動的にそれら毎にタイトルの表示方法や検索エンジンでのindexの許可などをそれぞれ行えます。
同じく、「カテゴリーページ」「タグページ」その他カスタムタクソノミーに関してもそれぞれ設定できます。
それ以外の場合、「高度な設定」の中で「投稿者アーカイブ(/author/example/
)」「日付アーカイブ(/2020/
)」「フォーマットのアーカイブ(/format/example/
)」で設定できます。
そして以上で全部です。
それで、出力される「noindex,follow」のメタを消したかったのですが、上記の設定項目のどこにも当てはまって無いらしく、色々いじったけどどうにも出来なかった。
ちなみに「noindex,follow」は、sitemapのページなどで使うと良いらしいです。
参考:“noindex,follow” robots metaタグを使うのはどんな時?
結果、固定ページで「news」ページを作成する方法に切り替えるしかなかったです。
何か方法ないのかなー。とちょっとモヤモヤ気味。
歯切れ悪いですが、備忘録ということで。
もし将来同じことで悩んだ自分。。または、どこかの誰かのヒントに。