Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何循环ACF字段的CSV字符串数据,并只打印一次每个值?_Php_Wordpress_Advanced Custom Fields - Fatal编程技术网

Php 如何循环ACF字段的CSV字符串数据,并只打印一次每个值?

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打印单个值,但在每次打印逗号分隔数组中的每个值时,我遇到了麻烦

这就是我所拥有的:

<?php echo wp_kses_post(get_field('field')); ?>

其中,
字段
等于预定义的单个值,如
stackof
,我可以将其修改为CSV字符串,如
stackof、stackog、stackoh、stackoi、

这就是我想要的(来自OP的评论):
  • 在管理面板上,有一个字段,我可以输入任何值。让我们将此值作为代码调用。单击按钮时,此代码直接打印在前端
  • 每当单击按钮时,我都要打印唯一的预定义代码
  • 为此,我可以在管理面板的字段中输入逗号分隔的代码,如CSV字符串,如
    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”。这就是原因吗?