我可以通过以下方式解决此问题:
假设我的分类术语有 2 个自定义字段:color
和shape
(意味着我在给定分类的后端术语编辑/创建页面上有颜色和形状输入)。
function acf_update_term_meta( $value, $post_id, $field ) {
$term_id = (int) filter_var( $post_id, FILTER_SANITIZE_NUMBER_INT );
if ( $term_id > 0 ) {
update_term_meta( $term_id, $field['name'], $value );
}
return $value;
}
add_filter( 'acf/update_value/name=color', 'acf_update_term_meta', 10, 3 );
add_filter( 'acf/update_value/name=shape', 'acf_update_term_meta', 10, 3 );
function acf_load_term_meta( $value, $post_id, $field ) {
$term_id = (int) filter_var( $post_id, FILTER_SANITIZE_NUMBER_INT );
if ( $term_id > 0 ) {
$value = get_term_meta( $term_id, $field['name'], true );
}
return $value;
}
add_filter( 'acf/load_value/name=color', 'acf_load_term_meta', 10, 3 );
add_filter( 'acf/load_value/name=shape', 'acf_load_term_meta', 10, 3 );
所以我们有:
term_meta
更新此 ACF 字段时更新使用update_term_meta()
(codex )的过滤器(挂钩 2 次,一次用于color
,一次用于shape
)
- 一个过滤器,
term_meta
使用get_term_meta()
( codex ) 而不是wp_option
(钩住 2 次,一次 forcolor
和一次 for shape
)返回值
资源
注1:
color
这将触发所有具有orshape
自定义字段的术语(无论分类如何) 。如果您不希望它始终应用于这些领域的案例,您可能需要按分类进行过滤。
注2:
ACF5似乎支持开箱即用的 real term_meta
,但仍处于早期访问阶段。升级过程似乎包含针对这种特殊情况的重构方法(将数据从 real 复制wp_options
到 real term_metas
):
更新到 ACF 5 后,系统会提示您升级数据库。
这是从 4.x 版跨字段和字段组设置迁移的必要步骤。此升级还将跨任何分类术语值从“wp_options”表复制到“wp_termmeta”表。
在此升级过程中不会删除或修改任何数据。(来源)
注意 3:我相信可以在所有 ACF 术语自定义字段上循环以自动为术语上的所有自定义字段“生成”此代码,并避免为每个新的 ACF 术语字段添加 2 个过滤器。但由于 ACF5 应该很快就会出局,所以可能不值得花时间。