按字段名称以编程方式获取ACF字段键

时间:2017-03-07 13:03:11

标签: php wordpress advanced-custom-fields

我需要在高级自定义字段插件(ACF)中的WordPress中按字段名称获取字段键。

该字段已分配给帖子。我在帖子的循环中,我想以编程方式使用字段名称获取字段键。这是因为我正在创建一个表单,其中字段名称'options'将保持不变,但在select中将有不同的选项。

我正在循环一个自定义帖子类型并期望将字段“选项”分配给帖子(每个帖子都有唯一的选项,因此将有一个唯一的字段键,所以我不能只使用字段键这将被硬编码为可能的另一个帖子选项)...

我在帖子的循环中应该包含自定义字段“选项”,所以我应该能够使用帖子ID和自定义字段名称来查找字段键吗?

编辑: 我发现了这个:https://gist.github.com/mcguffin/81509c36a4a28d9c682e

但它似乎不起作用?

2 个答案:

答案 0 :(得分:1)

正确的方法是使用acf_maybe_get_field函数,就像这样:

acf_maybe_get_field( 'field_name', false, false );

自变量为:field namepost id(默认为当前帖子)和最重要的strict,默认为true,但我们将其设置为 false 在此处获取字段对象,即使该字段尚不存在。

答案 1 :(得分:0)

我认为从不同的角度解决问题会更容易。

您可以在每个帖子的选择字段中过滤选项。见https://www.advancedcustomfields.com/resources/dynamically-populate-a-select-fields-choices/

function acf_load_option_field_choices( $field ) {
    global $post;

    $current_id = $post->ID;

    switch ( $current_id ) {

        case 101: //Post ID 101

            $field[ 'choices' ] = array(
                'ferrari' => 'Ferrari',
                'lambo'   => 'Lambo',
                'toyota'  => 'Toyota',
                'volvo'   => 'Volvo'
            );

            break;

        case 202: // Post ID 202

            $field[ 'choices' ] = array(
                'youtube'       => 'Youtube',
                'facebook'      => 'Facebook',
                'twitter'       => 'Twitter',
                'stackoverflow' => 'Stack Overflow'
            );

            break;

    }

    // return the field
    return $field;

}

add_filter( 'acf/load_field/name=options', 'acf_load_color_field_choices' );

此时您可以从全局选项或任何您喜欢的地方提取选项,它们不需要进行硬编码。这意味着繁重的提升是在之前完成的,然后在循环中只是循环遍历选项,就像普通的ACF字段一样。