【问题标题】:How to get an array of values from $entry如何从 $entry 获取值数组
【发布时间】:2023-01-30 00:41:38
【问题描述】:

在 Gravity Form 的类 GF_Field_Checkbox 中有一个名为 get_value_export() 的方法,它为 GFCommon::selection_display() 创建的一堆元素返回 implode( ', ', $selected )

class-gf-field-checkbox.php 代码,这样您就可以看到我在引用什么。

    public function get_value_export( $entry, $input_id = '', $use_text = false, $is_csv = false ) {

        if ( empty( $input_id ) || absint( $input_id ) == $input_id ) {

            $selected = array();

            foreach ( $this->inputs as $input ) {

                $index = (string) $input['id'];

                if ( ! rgempty( $index, $entry ) ) {
                    $selected[] = GFCommon::selection_display( rgar( $entry, $index ), $this, rgar( $entry, 'currency' ), $use_text );
                }

            }

            return implode( ', ', $selected );
        ...

这一切都很好,但是,问题是我正在分解从此方法返回的值。

$answer = explode(', ', $field->get_value_export($entry));

我不想这样做,因为存在一种边缘情况,其中潜在的 value 可能有一个逗号被分解。例如,假设我的表单中有一个选项,如下所示

Label: Are you not entertained?
Value: 
 [x] Lorem ipsum dolor sit amet, consectetur adipiscing elit
 [x] Duis blandit, risus vel rutrum suscipit
 [ ] Duis cursus ex risus

正如您所看到的,前两个选项被选中,这将被拾取,然后将被分解

['Lorem ipsum dolor sit amet', 'consectetur adipiscing elit', 'Duis blandit', 'risus vel rutrum suscipit']

什么时候就该这样爆

['Lorem ipsum dolor sit amet, consectetur adipiscing elit', 'Duis blandit, risus vel rutrum suscipit']

GFAPI 中存在什么方法,或者我可以使用自定义代码来解决此问题?

【问题讨论】:

    标签: wordpress gravity-forms-plugin


    【解决方案1】:

    修改 GF_Field_Checkbox 类的 get_value_export() 方法以使用不同的分隔符来分隔所选选项。您可以使用不太可能出现在选项值中的不同字符或字符串,而不是使用逗号。

    您可以修改 get_value_export() 方法以使用竖线 (|) 或双竖线 (||) 作为分隔符:

    $selected = implode( '|', $selected );
    

    然后,当您分解这些值时,您将使用新的分隔符:

    $answer = explode( '|', $field->get_value_export( $entry ) );
    

    【讨论】:

    • 您是否建议我更改插件本身的代码?这在我更新 Gravity Forms 的任何时候都行不通,这些更改将被完全删除。我在想我可以从 GF_Field_Checkbox 类扩展然后覆盖该方法,但这似乎很乏味。
    • 不,我假设你是新的需要做的事情,我只是给出了一般的想法。
    【解决方案2】:

    您可以通过以下方式检索复选框值:

    $entry = GFAPI::get_entry( **entry id here** );//add your entry id in parenthesis
        $field_id = **add field number here**;
        $items = array(); 
        $field_keys = array_keys( $entry );
        foreach ( $field_keys as $input_id ) {
          if ( is_numeric( $input_id ) && absint( $input_id ) == $field_id ) {
            $value = rgar( $entry, $input_id );
            if ( "" !== $value ) $items[ $input_id ] = str_replace(",",",",$value);
          }  
        }
        $answer = implode(",",$items);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-07
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      相关资源
      最近更新 更多