Как мне проверить, является ли поле WPCF7 нулевым в 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 или просто приведенный выше пример, я всегда получаю ВСЕ необязательные поля в моем выводе, в том числе те, где значение равно нулю. Как я могу отфильтровать незарегистрированные поля?


person Tom    schedule 19.10.2020    source источник


Ответы (1)


Я не уверен, правильно ли я понял, но поскольку ваши опубликованные данные находятся здесь:

$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 var и посмотреть, какие значения вы действительно получаете? потому что если isset &&! empty должно быть более чем достаточно, чтобы отфильтровать нежелательные значения.

У вас есть еще один резервный вариант, который описан здесь: Удалить пустые элементы массива

Примечание по оптимизации производительности: https://www.php.net/array-push идет с array [] = .... быстрее, чем array_push

person Diego    schedule 19.10.2020
comment
Ой, извините, я ошибся при вводе кода здесь. Не хотелось просто копировать и вставлять всю функцию с ненужным кодом для вопроса. Обновил вопрос. - person Tom; 19.10.2020
comment
Я пробовал это, но в json все еще отображается много элементов 'forminput' = ›null. - person Tom; 19.10.2020
comment
Отредактировал свой ответ - person Diego; 19.10.2020
comment
Да, но каждый раз, когда я пытаюсь выполнить var_dump, форма застревает в цикле при попытке отправки. В основном я могу видеть значения, записанные в файл json, так что все должно быть в порядке. Кроме того, когда я заполняю поля, они сохраняются, поэтому $ data [$ optional_field] также должны работать ... Если это помогает, вы можете увидеть сгенерированный JSON здесь: vbhworks.nl/api/daglijsten/12-12-2034.json - person Tom; 19.10.2020
comment
В этой переменной $ data должно быть что-то, что мешает вашим if. Поскольку cf7 использует AJAX, вы чувствуете, что получаете стек в цикле. Быстрый способ проверить, что var_dump - это разместить die (); сразу после этого, открыв окно проверки Google Chrome (вкладка сети - ›подмножество XHR), вы можете пойти и посмотреть, что возвращается из вашего запроса, и вы поймете, что не так с данными :) - person Diego; 19.10.2020
comment
Ваш запасной вариант сработал. Работает на данный момент, я перейду к другому решению сегодня вечером. Рад, что у клиента есть работоспособное решение! Спасибо! - person Tom; 19.10.2020