【问题标题】:Get ACF field key programmatically by field name通过字段名称以编程方式获取 ACF 字段键
【发布时间】:2017-07-27 16:57:30
【问题描述】:

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

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

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

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

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

但它似乎不起作用?

【问题讨论】:

  • 你的意思是似乎不起作用?

标签: php wordpress advanced-custom-fields


【解决方案1】:

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

acf_maybe_get_field( 'field_name', false, false );

参数是:field namepost id(默认为当前帖子)和最重要的strict,默认为true,但我们在这里将其设置为false获取字段对象,即使它尚不存在于帖子中。

【讨论】:

  • 是的,这行得通。请记住,尽管您的目标字段名称可以与各种自定义字段相同(例如电影和书籍自定义帖子类型的“评分”字段 - 可以将十分之一的选择字段分配给“评分”字段名称,而另一个可以有“好/坏”复选框),所以这有点风险。我所做的是硬编码字段键,然后如果没有结果,我使用acf_maybe_get_field
  • @ChrisTrynkiewicz 这不是问题,因为其中一个参数是post id(如果您将其留空,则会自动获得)。因此,如果您对电影和书籍自定义帖子类型都有一个 rating 字段,您将相应地获得您调用 acf_maybe_get_field 函数的 CPT 的密钥。
【解决方案2】:

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

您可以过滤每个帖子的选择字段中的选项。见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 字段一样循环选项。

【讨论】:

    猜你喜欢
    • 2019-08-26
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多