我有一个在Ninja Forms中运行的表单,并且有一个自定义的代码可以将详细信息激发到外部API,我遇到的问题是双重的。
我需要这样做,如果你勾选gdpr_consent_date复选框,它会通过这个过程向API发出一个日期时间(js timetstamp),然后如果你勾选了email_uptdate_optin一个布尔值是否已被检查。
以下是使用的代码:
function signup_form_process() {
global $ninja_forms_processing;
if ($ninja_forms_processing->get_form_ID() !== 7) {
return;
}
$url = 'https://' . APP_DOMAIN . '/account/alternative_signup';
$data = get_sign_up_form_data([
'email' => 11,
'name' => 12,
'password' => 13,
'time_zone_offset' => 26,
'gdpr_consent_date'=> 132,
'email_update_optin'=> 133,
]);
$old_account = login_old_api($data['email'], $data['password']);
$old_status_code = substr($old_account['response'], 0, 3);
$old_message = substr($old_account['response'],
strpos($old_account['response'], '~') + 1);
if ($old_status_code === '200' || $old_status_code === '401' ||
$old_status_code === '409') {
$ninja_forms_processing->add_error('error_old_account', sprintf(__('The account %s already exists, <a href="%s" class="alert-link">please login here.</a>', 'sage'), $data['email'], home_url('/login/')));
return;
}
$options = [
'http' => [
'header' => "Content-Type: application/json\r\n" .
"Accept: application/json",
'method' => 'POST',
'content' => json_encode($data),
'ignore_errors' => true
],
];
$context = stream_context_create($options);
$result = json_decode(file_get_contents($url, false, $context));
$headers = Utils\parse_headers($http_response_header);
Utils\log('Signup API Response:');
Utils\log(['response' => $result, 'headers' => $headers]);
if (strpos($headers['status'], '201') === 0) {
$data['username'] = $data['email'];
$data['remember_me'] = 0;
unset($data['email']);
unset($data['name']);
post_login($data);
} else {
if (is_array($result->error)) {
$ninja_forms_processing->add_error('error_api', $result->error[1]);
} else if (!empty($result->error)) {
$ninja_forms_processing->add_error('error_api', $result->error);
} else {
$ninja_forms_processing->add_error('error_api', __('An unknown error occurred.', 'sage'));
}
}
}
add_action('ninja_forms_post_process', __NAMESPACE__ . '\\signup_form_process');
我有点卡住了,如果有人可以提供帮助那就太棒了!
克里斯
答案 0 :(得分:0)
将gdpr_consent_date的输入值设置为<?php date('H:i:s d-m-Y') ?>
,并将true
设置为复选框。
日期格式可以根据您的需要进行更改,更多信息here。