代码之家  ›  专栏  ›  技术社区  ›  Mtxz

如何使用ACF和分类术语上的自定义字段(而不是wp_选项)获取实数term_meta

  •  1
  • Mtxz  · 技术社区  · 6 年前

    有了一个简单的woomerce站点,我使用ACF-pro将一些自定义字段添加到给定分类法的术语中。使用这个,我可以,例如,添加一个“颜色”字段到我的“产品类别”分类术语。很好。

    想用 get_terms() ( codex ),我发现 meta_query 参数不起作用(意外结果)。为什么?我的自定义字段没有(从后端)保存为 term_meta 但是作为 wp_option .

    术语 (正如它设计的那样),但是 wp_选项 terms_meta " ( 元查询 )使用 ( 法典 术语 价值。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Mtxz    6 年前

    我可以通过以下方法来解决这个问题:

    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 update_term_meta() ( codex )更新此ACF字段时(挂接2次,一次用于 一个是为了 形状 )
    • 术语 使用价值 get_term_meta() ( codex wp_option (钩住2次,一次为 颜色 一个是为了 形状 )

    source

    注1

    这将触发所有具有 自定义字段。如果不希望分类法始终应用于那些字段的情况,则可能需要按分类法进行筛选。

    注2

    ACF5 似乎支持开箱即用 术语 升级过程似乎包含此特定情况下的重构方法(来自 wp_options term_metas ):

    更新到ACF 5后,系统将提示您升级数据库。

    版本4.x中的设置。此升级还将在所有 从“wp_options”表到“wp_termmeta”的分类术语值

    在此升级过程中没有删除或修改任何数据。( source )

    注3