先日、All in One SEOが大幅にバージョンアップしてVer4になりました。
まず、名前が変わりました。
All in One SEO Pack ⇒ All in One SEO
あと、UIがかなり変更になってゴージャスになっています。
今回のバージョンアップは、名前の変更の影響や仕様変更が多く、フックやメタデータを読みだしてカスタマイズしている人には結構インパクトがあります。
この記事では、All in ONE SEOの最新バージョンで変更になった点をまとめておきたいと思います。
All in ONE SEO Pack変更点(Ver4.00)
100以上の機能強化とバグ修正が行われているので、その部分が既存ユーザーにとっては問題となる部分です。
バージョン4.0.0の新機能– 2020年11月14日にリリース
- NEW –プラグインを完全に再構築してパフォーマンスとSEOを強化
- NEW –サイトのSEO設定を合理化するオンボーディングウィザード
- NEW –現在のSEOステータスを提供する一元化されたダッシュボード
- NEW –投稿とページのTruSEO分析
- NEW –競合他社のサイト分析を備えたSEOアナライザー
- NEW –カスタマイズ可能なアクセス制御
- NEW –内部設定のバックアップと復元
- NEW –100以上の機能強化とバグ修正
- 更新–PHPバージョンの最小互換性を5.4に更新
filter hook関数名の変更
フィルターフックの関数名がaioseopからaioseoに変更になっています。
フィルターフックでSEO周りをカスタマイズしている人は、関数名を変更する必要があります。
All in ONE SEO Packのフィルターフック関数名
aioseop_description aioseop_keywords aioseop_title
All in ONE SEO以降のフィルターフック関数名
aioseo_title aioseo_description aioseo_keywords
post_metaから独自テーブルへの移行
All in ONE SEO Packの時には、All in ONE SEO Packのカスタムフィールドはpost_metaに保存していました。
All in ONE SEOでは、post_metaへの保存はなくなり、独自テーブル(aioseo_posts と aioseo_terms)内の各フィールドに格納される仕様に変更されました。
All in ONE SEO Packの時代のpost_metaは、アップデート時にAll in ONE SEOの独自テーブルに移行されているようです。
この変更のインパクトは大きいです。
今までAll in ONE SEO Packのdescriptionを以下のように読みだしていた人は新しい投稿では今後使えなくなります。
<?php echo get_post_meta($post->ID, '_aioseop_description', true); ?>
All in ONE SEO Pack時代のpost_metaはそのまま残っているので、過去のpost_metaは読みだせます。
All in ONE SEOの独自テーブル(aioseo_posts と aioseo_terms)を読みだす方法
All in ONE SEOの独自テーブルを読みだすにはどうしたらよいでしょうか?
プラグインのソースを見たところ簡単に外部から使えるようになっていないので、独自テーブルを自前で読みだす必要があります。
独自テーブル(aioseo_posts と aioseo_terms)をwpdbに対応させる
独自テーブルは、Wordpressが最初から用意しているテーブルのように$wpdbで簡単にアクセスできません。
$wpdbからアクセスできるように変更します。
(非推奨)Wordpressコアファイルのソースを書き換える
検索すると、独自テーブルを$wpdbに対応させるために、Wordpress本体のソース(wp-includes/wp–db.php)を書き換える例が散見されます。
/**
* List of WordPress per-blog tables.
*
* @since 2.5.0
* @see wpdb::tables()
* @var array
*/
public $tables = array(
'posts',
'comments',
'links',
'options',
'postmeta',
'terms',
'term_taxonomy',
'term_relationships',
'termmeta',
'commentmeta',
);
この配列に独自テーブルを追加することで、wpdbから独自テーブルにアクセスできるようになります。
(推奨)functions.phpでテーブルを追加する
WordPress本体のソース変更は絶対に避けないといけませんし、それ以外の方法があります。
以下のスニペットで、aioseo_postsに$wpdbでアクセスできるようになります。
<?php
// All In ONE SEOのaioseo_postsを$wpdbに対応させる
function add_db_aiso_desc() {
global $wpdb;
$table_name = $wpdb->prefix. "aioseo_posts";
if (!isset($wpdb->aioseo_posts))
{
$wpdb->aioseo_posts = $table_name;
$wpdb->tables[] = str_replace($wpdb->prefix, '', $table_name);
}
}
add_action( 'init', 'add_db_aiso_desc');
独自テーブル(aioseo_posts と aioseo_terms)を読みだす
$wpdbでaioseo_postsにアクセスできるようになったので、あとはDBから直接読みだせばいいです。
PHPの関数だけでなく、記事中でも使えるようにショートコードも作っておきます。
function bfp_aiso_desc() {
global $wpdb,$post;
$desc = $wpdb->get_var( $wpdb->prepare( "SELECT description FROM $wpdb->aioseo_posts WHERE post_id = %d", $post->ID));
return $desc;
}
//ショートコード
add_shortcode( 'aiso_desc', 'bfp_aiso_desc' );
関数の使い方
単純に置き換えてもらえば大丈夫です。
<?php echo bfp_aiso_desc(); ?>
description以外のフィールドを読みだすには?
まず、独自テーブル(aioseo_posts と aioseo_terms)のフィールド名を確認する必要があります。
そのためには、phpMyAdminなどのDBツールで、独自テーブル(aioseo_posts と aioseo_terms)の中身を確認すればフィールド名を確認するのが簡単です。
今回の記事のdescriptionとなっている部分を希望のフィールド名に書き換えれば同じように読みだすことができます。
まとめ
All in ONE SEOにバージョンアップした時に、バージョンアップの時間がかなりかかった記憶があります。大幅に仕様変更されたので、DBを書き換えていたのだと思います。
名前の変更で、フィルターフックの関数名が変更されたり、post_metaテーブルを使わなくなったりというのは、一般人には影響のない仕様変更ですが、カスタマイズしていた人にとってはかなりインパクトのある変更になっています。
All in ONE SEO Packでは動いていたのに、All in ONE SEOでは動かなくなったという場合には今回の記事を参考にしてみてください。