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
目标
我目前有一个 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