Php 如何循环ACF字段的CSV字符串数据,并只打印一次每个值?
我知道如何在PHP中使用echo打印单个值,但在每次打印逗号分隔数组中的每个值时,我遇到了麻烦 这就是我所拥有的:Php 如何循环ACF字段的CSV字符串数据,并只打印一次每个值?,php,wordpress,advanced-custom-fields,Php,Wordpress,Advanced Custom Fields,我知道如何在PHP中使用echo打印单个值,但在每次打印逗号分隔数组中的每个值时,我遇到了麻烦 这就是我所拥有的: <?php echo wp_kses_post(get_field('field')); ?> 其中,字段等于预定义的单个值,如stackof,我可以将其修改为CSV字符串,如stackof、stackog、stackoh、stackoi、 这就是我想要的(来自OP的评论): 在管理面板上,有一个字段,我可以输入任何值。让我们将此值作为代码调用。单击按钮时,此代码
<?php echo wp_kses_post(get_field('field')); ?>
其中,字段
等于预定义的单个值,如stackof
,我可以将其修改为CSV字符串,如stackof、stackog、stackoh、stackoi、
这就是我想要的(来自OP的评论):
stackof,stackog,stackoh,stackoi,…
。但它会在屏幕上打印所有代码注意:此循环不绑定到用户会话。因此,每次用户单击按钮时,CSV字段中的新代码都应打印出来,旧代码应标记为已使用或已丢弃。此功能可用于获取从未打印过的最新代码。如何调用此函数完全取决于您。您可以挂接到ajax代码中,也可以添加新的模板
<?php
function get_next_val_from_field( $field_name, $post_id = false ){
// Let's get the field data as string.
$field_data = get_field( $field_name, $post_id );
// Did we recieved any data?
if( ! empty( $field_data) ) {
// Convert CSV string to an array.
$field_data = explode( ',', $field_data );
// Remove any empty values and trim extra spaces from around the values.
$field_data = array_map( 'trim', array_filter( $field_data ) );
// Rechecking if array is not empty.
if( is_array( $field_data ) && ! empty( $field_data) ) {
// Prefix to know next value inside the string.
$next_value_prefix = 'mm1707_next--';
$next_value_found = false;
// Loop through each value to find next value, if any.
foreach ($field_data as $key => $value) {
if ( 0 === strpos( $value, $next_value_prefix ) ) {
$next_value = str_replace( $next_value_prefix, '', $value);
$field_data[ $key ] = $next_value;
$next_value_found = true;
} elseif ( $next_value_found ) {
// Now that we have found next value let's mark following
// array item as next value and break the loop.
$field_data[ $key ] = $next_value_prefix . $value;
// No need for further loop now.
break;
}
}
// If there wasn't any current value then print first value & mark next one.
if( empty( $next_value ) ){
$next_value = $field_data[0];
$field_data[1] = $next_value_prefix . $field_data[0];
}
// Let's update the field inside DB to save currently marked data.
update_field( $field_name, implode(',', $field_data ), $post_id );
return $next_value;
}
}
}
此代码是否在某个循环中?在wp管理面板中,我可以输入我提到的值,如stackof,stackog,stackoh,stackoi,…
。单击按钮时,代码将运行。是否确定
为您提供stackof、stackog、stackoh、stackoi,…
?我说得对吗?如果是,您想要什么样的预期结果?请在你的问题中加上这一点。你需要进一步阐述你的问题。你到底想干什么?它是在管理还是在前端?我们在干什么?你们所说的字段中的值和字段中的值有什么区别?我不是食人魔。改善你的问题,让它完成,ping我,我会考虑删除我的下落。谢谢。“代码1、代码2、代码3”为$field\u name
。我希望它首先返回'code1',但它没有返回任何内容。$field\u name
是AdvanceCustomFields字段的名称/字段键。因此,使用上面的函数,比如,get_next_val_from_field('your_acf_field_key')代码>如果它仍然没有返回任何数据,则您没有在循环或帖子页面上使用此函数。虽然ACF努力获取post_id
以返回正确的数据,但并非每次都可以。在这种情况下,您应该为get\u field()
函数显式指定post\u id
参数。它位于post上。当我转换为get_next_val_from_field('your_acf_field_key')代码>网页返回错误且未打开。主题返回代码时的字段名为“优惠券\u代码”
,它与获取字段
功能一起使用。另一方面,您能否var\u dump
获取字段的返回值('your_acf\u field_key','post\u id')代码>并将其发回这里?因此,我们可以看到返回的数据/对象的确切类型。当我用代码1、代码2、代码3之类的代码填充字段时,我不使用“像”代码1、“代码2”、“代码3”。这就是原因吗?