WordPressのアップデートで、wp_termmetaテーブルが生成され、Advanced Custom Fieldsプラグインでタームのカスタムフィールドの参照先がwp_optionsからwp_termmetaに変更されたときの対応方法は以下のようにするのがよいと思われる。
function convert_acf_taxonomy_meta ( $list = [] ) {
foreach ( $list as $item ) {
$_taxonomy_slug = $item[ 'taxonomy_slug' ];
$_field_name = $item[ 'field_name' ];
add_filter( 'acf/load_value/name=' . $_field_name, function ( $value, $post_id, $field ) use ( $_taxonomy_slug, $_field_name ) {
if ( substr( $post_id, 0, 4 ) === 'term' && $value === null ) {
$term_id = substr( $post_id, 5 );
$term = get_term( $term_id );
if ( ! is_wp_error( $term ) && ! empty( $term ) ) {
$taxonomy_slug = $term->taxonomy;
if ( $taxonomy_slug === $_taxonomy_slug && $field[ 'name' ] === $_field_name ) {
$option_name = $taxonomy_slug . '_' . $term_id . '_' . $field[ 'name' ];
$option_value = get_option( $option_name, null );
$term_key = $field[ 'name' ];
$term_value = get_term_meta( $term_id, $term_key, true );
if ( $term_value !== false && $term_value !== '' ) {
// すでにデータが入っていることになり、最初の条件分岐で分けられることになるので、通常はここは実行されない
return $term_value;
} else {
if ( $option_value !== null ) {
// 旧データを新データに変換して保存する場合
// update_term_meta( $term_id, $term_key, $option_value );
return $option_value;
}
}
}
}
}
return $value;
}, 10, 3);
}
}
convert_acf_taxonomy_meta(
[
[
'taxonomy_slug' => 'タクソノミースラッグ',
'field_name' => 'カスタムフィールド名',
],
]
);