All in One SEOで特定のカスタム投稿の記事だけcanonicalURLを差し替えたい [ functions.php ]
WordPressでホームページを制作して運用する時に、titleタグやmeta description、meta keywordなどのSEO上必要な設定をを行う時にとても包括的なプラグインで「All in One SEO」というものがあります。
こちらのプラグインをご利用中のクライアントから、このようなご相談をいただきました。
よくある質問を使っているのだけど、記事自体のボリュームが少なくインデックスされないから、canonical指定を一覧ページにしたいけど、毎回設定するのは大変なのでなんとかしてほしい・・
今回は、このような対応をテーマフォルダ内のfunctions.phpに記述することで対応しました。
All in One SEOのカスタマイズ
add_filter( 'aioseo_canonical_url', 'no_canonical_url');
function no_canonical_url($url){
global $wp_query;
$postID = $wp_query->post->ID;
if(is_singular('faq')){
return home_url( '/faq/' );
}else{
return $url;
}
}
その他のAll in One SEOのカスタマイズ
2020年末にAll in One SEO Packがメジャーアップデートされたようで、All in One SEOと名前も変わった影響で、フィルターフックにも変更が入っていました。
すべての記述に関して、今まで「aioseop_」と記述していた部分を「aioseo_」に変更する必要があります。
title のカスタマイズ
タイトルに任意のカスタムフィールドの値を入れたい場合は、下記のように記述します。
こちらは、カスタム投稿のよくある質問の全ての記事に使用するための記述方法です。
function my_aioseo_title($title) {
global $post;
global $post_type;
if(is_singular() && $post_type == 'faq') {
$metas = get_post_meta($post->ID);
$title = get_the_title() . ' – ' . $metas['subtitle'][0] . ' – 川口市のこんたホームページ製作所';
}
return $title;
}
add_filter('aioseo_title', 'my_aioseo_title');
description のカスタマイズ
カスタム投稿で editor (従来の投稿画面)を使っていない場合は、自動的に description が生成されないので、以下のカスタマイズで設定して書き出しています。
function my_aioseo_description($description){
global $post;
if ( get_post_type() == 'products' ) {
$metas = get_post_meta($post->ID);
$description = mb_strimwidth( strip_tags( str_replace(array("\r\n", "\r", "\n"), '', $metas['charactor'][0])), 0, 120, "…", "UTF-8");
}
return $description;
}
add_filter('aioseo_description', 'my_aioseo_description');
keyword のカスタマイズ
ページのスラッグをkeywordに含める場合などは、このように記述します。
function my_aioseo_keyword($keyword){
global $post;
$keyword .= ',' . $post->post_name;
return $keyword;
}
add_filter('aioseo_keyword', 'my_aioseo_keyword');
canonical のカスタマイズ(今回行ったもの)
全ページ、アクセスしたURLで canonical を設定する場合はこの書き方で変更できます。
先述したものとは、別の書き換え内容です。
function my_aioseo_canonical_url($canonical_url){
$canonical_url = (empty($_SERVER["HTTPS"]) ? "http://" : "https://") . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]
return $canonical_url;
}
add_filter('aioseo_canonical_url', 'my_aioseo_canonical_url');
全てのカスタマイズに共通すること
return hogehoge;
全てのカスタマイズにおいて、hogehoge
の箇所を変更することで任意の変更方法で変更可能です。