WP ACF 自动从多个字段创建简码

WP ACF auto create shortcodes from multiple fields

目标

我目前有一个 acf 字段组,其中包含一些通用数据字段,例如电话号码、电子邮件等(所有简单文本字段)。

我的目标是拥有一个函数,该函数将遍历所有字段并根据它们各自的 name/label.

创建一个简码

编辑:进度

我认为我越来越接近,简化了整个事情,我相信我在正确的道路上..

我将字段组附加到 post,如果我这样记录它们:

$testing = get_field_objects(22);
do_action( 'php_console_log', $testing );

我得到了所有的名称、值等。在另一个片段的帮助下,我发现短代码似乎至少是动态的,因为它们都停止显示,只是不知何故没有价值,所以它都保持空白。

这是现在的功能:

$hlfields = get_field_objects( 22 );
    foreach ( $hlfields as ['name' => $name, 'value' => $value] ) {

        ${"{$name}_fn"} = function() {
            $field = get_field($name, 22);
            return $field;
        };

        add_shortcode($name, ${"{$name}_fn"});

    }


原始尝试,无效且过于复杂:

我目前有一个 acf 字段组,其中包含一些通用数据字段,例如电话号码、电子邮件等(所有简单文本字段)。

为了能够使用短代码轻松插入它们,我为每个字段创建一个,如下所示:

function adresse_shortcode( $adresse ) {
    $adresse = get_field( "adresse", 'option' );
    return $adresse;
}
add_shortcode('adresse', 'adresse_shortcode');

虽然这很好用,但我觉得我在重复自己,而且每当我添加一个新字段时我都需要添加一个函数。

我的目标是拥有一个函数,该函数将遍历所有字段并根据它们各自的 name/label.

创建一个简码

我发现此代码段可按 ID 获取字段组的所有字段:

function get_specifications_fields() {

    global $post;

    $specifications_group_id = 13; // Post ID of the specifications field group.
    $specifications_fields = array();

    $fields = acf_get_fields( $specifications_group_id );

    foreach ( $fields as $field ) {
        $field_value = get_field( $field['name'] );

        if ( $field_value && !empty( $field_value ) ) {
            $specifications_fields[$field['name']] = $field;
            $specifications_fields[$field['name']]['value'] = $field_value;
        }
    }

    return $specifications_fields;

}

但我现在不知道如何创建简码,我一直在尝试我能想到的所有方法:

function adresse_shortcode( $value ) {
    $specifications_fields = get_specifications_fields();
    foreach ( $specifications_fields as $name => $field ) {
        $value = $field['value'];
        $label = $field['label'];
        $name = $field['name'];
        return $name;
    }
    add_shortcode($value, 'adresse_shortcode');
}

我对 PHP 不是很精通,所以我确信它是错误的,但我已经尝试了好几个小时,希望有人能给我指出正确的方向。

这是一个使用匿名函数的示例,应该可以解决问题

$hlfields = get_field_objects( 22 );
foreach ( $hlfields as ['name' => $name, 'value' => $value] ) {

    $cb = function() use ($name) {
        $field = get_field($name, 22);
        return $field;
    };  

    add_shortcode( $name, $cb );

}

这是我在回答时提到的来源:Dynamic function name in php, Dynamic shortcodes and functions in WordPress, PHP: Variable functions