如何检查 WPCF7_Submission 内的 WPCF7 字段是否为空?

How do I check if a WPCF7 field is null within WPCF7_Submission?

我正在创建一个挂接到 wpcf7_mail_sent 的函数,以将 Contact Form 7 表单的提交保存到 json 文件。我正在使用以下代码提交表单。

$submission = WPCF7_Submission::get_instance();
$data = $submission->get_posted_data();

if ( $submission ) {
  // The rest of the code goes in here
}

然后我有一个包含输出数据的数组,我在将其转换为 json 之前存储所有内容,就像这样。

$output = [
  'name' => $data['name']
]

现在我还有可选字段。我将所有这些放在一个数组中,循环遍历它并查看它们是否为空。但不知何故,这不起作用。

$optional_fields = ['subject', 'phone'];
foreach ( $optional_fields as $optional_field ) {
  if ( isset($data[$optional_field]) ) {
    array_push( $output[$optional_field], $data[$optional_field] );
  } 
}

无论我尝试 isset()!= null 还是只是上面的示例,我总是在输出中得到所有可选字段,以及值为 null 的字段。如何过滤掉不需要的字段?

我不确定我是否理解正确,但因为你发布的数据在这里:

$data = $submission->get_posted_data();

你为什么循环这个:

$optional_fields = ['subject', 'phone'];
foreach ( $optional_fields as $optional_field ) {
...

检查数据是否为空?不应该是:

$data = $submission->get_posted_data();
$optional_fields = ['subject', 'phone'];
foreach ( $optional_fields as $optional_field ) {
    if ( isset($data[$optional_field]) && !empty($data[$optional_field]) ) {
        array_push( $output[$optional_field], $data[$optional_field] );
    }
}

已编辑 1:

您是否尝试过 var_dump $data 变量并查看您实际收到的值?因为 if isset && !empty 应该足以过滤掉不需要的值。

您还有另一个后备选项,此处有描述:Remove empty array elements

性能优化旁注: https://www.php.net/array-push 使用 array[] =.... 比 array_push

更快