はじめに
WooCommerce が2023年8月8日に、Version 8.0 になり、「高パフォーマンス注文ストレージ (COT)」というのを採用します。簡単にいうと、注文のデータベースが専用設計のものになります。今までは、注文データベースへのアクセスは WordPress の投稿クラス(WP_Post)を利用する場合と、独自のクラス(WC_Order)を介して行う場合があったのですが、今後、独自のクラス(WC_Order)のみになります。そのため高パフォーマンスになるという事です。Version 8.0 以降も、しばらくは併用できるようですが、近いうちに WordPress の投稿クラス(WP_Post)の利用は廃止されるので、以下の対応をとるべきです。
追記:この記事を書いた前日に、Version 8.0 からは見送られ、Version 8.2 からになりました。
独自プラグインへの対応方法
対応していないと以下の様な表示が出て、機能を有効化できません。
対応方法
自プラグインのコード内をエディターにより以下の正規表現で検索します。
wpdb|get_post|get_post_field|get_post_status|get_post_type|get_post_type_object|get_posts|metadata_exists|get_post_meta|get_metadata|get_metadata_raw|get_metadata_default|get_metadata_by_mid|wp_insert_post|add_metadata|add_post_meta|wp_update_post|update_post_meta|update_metadata|update_metadata_by_mid|delete_metadata|delete_post_meta|delete_metadata_by_mid|delete_post_meta_by_key|wp_delete_post|wp_trash_post|wp_untrash_post|wp_transition_post_status|clean_post_cache|update_post_caches|update_postmeta_cache|post_exists|wp_count_post|shop_order
もし上記が発見されなければ、プラグインのメインファイルに以下のコードを貼り、COT に対応している事を宣言します。こうするだけで上記の表示は消えて、COT を有効化できます。発見されても、注文関連でなければ同様です。
add_action(
'before_woocommerce_init',
function() {
if ( class_exists( \Automattic\WooCommerce\Utilities\FeaturesUtil::class ) ) {
\Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', __FILE__, true );
}
}
);
逆に注文関連で発見された場合には、修正が必要になります。簡単に言うと、WP_Post クラスを使用したものを、WC_Order クラスを使用したものに置き換えます。
詳細は以下を参考にしてください。
対応後
以下の様な表示に切り替わるので、チェックを入れて「変更を保存」します。
以前のテーブルからの置換が始まります。
コメントを残す