Я работаю с Ninja Forms на Wordpress 5.1.1, чтобы отправить простую форму.Однако мне нужна простая проверка на стороне сервера.Я просеивал несколько дней через документацию и Интернет, но не могу найти решение этой проблемы.
До сих пор я был в состоянии прикрепить свою функцию к ninja_forms_submit_data
веб-крючку формы ниндзя.Я подтвердил, что PHP действительно выполняется.Однако, когда я отправляю форму, она застревает на «Обработка», когда я пытаюсь вернуть пользовательскую ошибку.Я считаю, что это как-то связано с форматом ответа AJAX, но я не уверен.Это может быть даже безопасность сайта, блокирующая запрос, но я сомневаюсьСкорее всего, на мой взгляд, это мое принципиальное отсутствие недопонимания того, как NinjaForms работает на бэкэнде.
На этом этапе я даже хотел бы выполнить проверку на стороне клиента (безопасность в контексте не имеет решающего значения).Но я даже не уверен, как это будет достигнуто.
Мой опыт в основном связан с C / C ++, Java, Python и Ruby.PHP немного сбивает меня с толку.Мы ценим любую помощь, которую вы можете предоставить.
Это проверка, вызванная в моем фильтре.Независимо от того, если я установлю $errors
на []
, отправка будет остановлена при обработке.Это ТОЛЬКО происходит, если выполняется блок if( !validateSite( $form_data, $field_id ) )
.В противном случае форма отправляется совершенно нормально.Обработка зависает только в том случае, если об ошибках не сообщается.
function validateSite($form_data, $field_id){
// $site_code = $form_data['fields'][$field_id]['value'];
$form_fields = $form_data[ 'fields' ];
foreach( $form_fields as $field )
{
$field_id = $field[ 'id' ];
$field_key = $field[ 'key' ];
$field_value = $field[ 'value' ];
// Example Field Key comparison
if( "site_code_1552245398425" == $field_key )
//I Strongly Suspect that this site code is never found,
//as I can never get this method to return false without
//hard-setting the default return. (Regardless whether or
//not the input is even or odd.)
{
if(intval($field_value) % 2 != 0) //EXAMPLE TEST
{
return true;
}
else
{
return false;
}
}
}
return false; //hard set to false
}
Этот фильтр выполняется:
add_filter( 'ninja_forms_submit_data', function( $form_data ){
$field_id = 'nf-field-21';
if( !validateSite( $form_data, $field_id ) )
{
$errors = [];
$form_fields = $form_data[ 'fields' ];
foreach( $form_fields as $field ) //iterate through the fields
{
$field_id = $field[ 'id' ];
$field_key = $field[ 'key' ];
$field_value = $field[ 'value' ];
if($field_key == "site_code_1552245398425")
{
//$errors = ['fields'][$field_id] = "INVALID SITE CODE";
$errors = ['fields' => [$field_id => "INVALID SITE CODE"]];
}
}
/*
$errors = [ 'fields' => [ 'nf-field-21' => __( 'Invalid Site Code.', 'my-plugin' ) ],];
*/
$response = [
'errors' => $errors,
];
echo wp_json_encode( $response );
wp_die(); // this is required to terminate immediately and return a proper response
}
// If no errors, be sure to return the $form_data.
return $form_data;
});