カスタムフィールドに要約を追加しようとしています。私はページテンプレートでカスタムフォームを作成しました、そしてこれは私が関係していると思う私のコードの一部です(APIキーがMerchantOneの公開デモAPIであることを心配しないでそれは個人的ではありません):
// API Setup parameters
$gatewayURL = 'https://secure.merchantonegateway.com/api/v2/three-step';
$APIKey = '2F822Rw39fx762MaV7Yy86jXGTC7sCDy';
// If there is no POST data or a token-id, print the initial shopping cart form to get ready for Step One.
if (empty($_POST['DO_STEP_1']) && empty($_GET['token-id'])) {
print ' <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
print '
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Hansen Hunter Collect non-sensitive Customer Info</title>
</head>
<body>
<p>We are pleased to offer the option for you to securely pay your Hansen Hunter & Co. invoice online.</p>
<h2 class="pad">Invoice Details</h2>
<form action="" method="post">
<table>
<tr><td><input type="text" name="shipping-address-first-name" placeholder="First Name" required></td></tr>
<tr><td><input type="text" name="shipping-address-last-name" placeholder="Last Name" required></td></tr>
<tr><td><input type="text" name="shipping-address-company" placeholder="Company" required></td></tr>
<tr><td><input type="text" name="billing-address-phone" placeholder="Phone Number" required></td></tr>
<tr><td><input type="text" name="billing-address-email" placeholder="Email Address" required></td></tr>
<tr><td><input type="text" name="billing-invoice" placeholder="Invoice or Customer Number"></td></tr>
<tr><td><input type="text" name="billing-amount" placeholder="Total Amount" required></td></tr>
<tr><td><h4><br />Payment Information</h4></td></tr>
<tr><td><input type="text" name="billing-address-first-name" placeholder="Cardholder First Name" required></td></tr>
<tr><td><input type="text" name="billing-address-last-name" placeholder="Cardholder Last Name" required></td></tr>
<tr><td><input type="text" name="billing-address-address1" placeholder="Address" required></td></tr>
<tr><td><input type="text" name="billing-address-address2" placeholder="Address 2"></td></tr>
<tr><td><input type="text" name="billing-address-city" placeholder="City" required></td></tr>
<tr><td><input type="text" name="billing-address-state" placeholder="State" required></td></tr>
<tr><td><input type="text" name="billing-address-Zip" placeholder="Zip/Postal Code" required></td></tr>
<tr><td><input type="text" name="billing-address-country" placeholder="Country" value="US" required></td></tr>
<tr><td><div class="g-recaptcha" data-sitekey="6Lc2MiUTAAAAAGJeGAlku50gFi7hFKvIitP_-3e0"></div></td></tr>
<tr><td><input type="submit" class="btn pad" value="Continue"><input type="hidden" name ="DO_STEP_1" value="true"></td></tr>
</table>
</form>
';
}else if (!empty($_POST['DO_STEP_1'])) {
// Initiate Step One: Now that we've collected the non-sensitive payment information, we can combine other order information and build the XML format.
このAPIをfunctions.phpに追加して、Google APIを追加しました。
add_action('wp_head','hook_recaptca');
function hook_recaptca() {
$output="<script src='https://www.google.com/recaptcha/api.js'></script>";
echo $output;
}
これにより私の要約が表示されます。問題は、まだ検証されていないことです。
私は私がまだ追加するこれらの2つのコードを持っているのを知っています:
/**
* Send a GET request to verify CAPTCHA challenge
*
* @return bool
*/
function captcha_verification() {
$response = isset( $_POST['g-recaptcha-response'] ) ? esc_attr( $_POST['g-recaptcha-response'] ) : '';
$remote_ip = $_SERVER["REMOTE_ADDR"];
// make a GET request to the Google reCAPTCHA Server
$request = wp_remote_get(
'https://www.google.com/recaptcha/api/siteverify?secret=your_secret&response=' . $response . '&remoteip=' . $remote_ip
);
// get the request response body
$response_body = wp_remote_retrieve_body( $request );
$result = json_decode( $response_body, true );
return $result['success'];
}
そして
/**
* Verify the CAPTCHA answer
*
* @param $user string login username
* @param $password string login password
*
* @return WP_Error|WP_user
*/
function validate_captcha( $user, $password ) {
if ( isset( $_POST['g-recaptcha-response'] ) && !captcha_verification() ) {
return new WP_Error( 'empty_captcha', '<strong>ERROR</strong>: Please retry CAPTCHA' );
}
return $user;
}
しかし、私は自分のフォームにそれらをどのように(どのフックを使うのか)添付して、チェックボックスが満たされていなければユーザを止めさせる方法がわかりません。ログインフォーム、登録フォーム、コメントへの追加に関するチュートリアルや質問はありますが、自分のカスタムフォームに追加する方法を理解することはできません。
それが役立つ場合には、これは彼らの統合のためにマーチャントが供給したphp全体がここにあります:
フォームをPOSTしたらすぐにreCAPTCHAを検証する必要があります。同じページにPOSTを送信しただけなので、他の処理の前に送信する必要があります。
検証されない場合は、エラーメッセージと共にフォームをもう一度表示する必要があります。
function recaptcha_validated(){
if( empty( $_POST['g-recaptcha-response'] ) ) return FALSE;
$response = wp_remote_get( add_query_arg( array(
'secret' => 'your_secret',
'response' => isset($_POST['g-recaptcha-response']) ? $_POST['g-recaptcha-response'] : '',
'remoteip' => isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR']
), 'https://www.google.com/recaptcha/api/siteverify' ) );
if( is_wp_error( $response ) || empty($response['body']) || ! ($json = json_decode( $response['body'] )) || ! $json->success ) {
//return new WP_Error( 'validation-error', __('reCAPTCHA validation failed. Please try again.' ) );
return FALSE;
}
return TRUE;
}
// reCAPTCHA data was POSTed, let's validate it!
if( ! empty( $_POST['DO_STEP_1'] ) ){
if( recaptcha_validated() === FALSE ){
$recaptcha_error = TRUE;
print '<div class="error message">' . __('reCAPTCHA failed, please try again.') . '</div>';
}
}
// Because we want to show the form again if there was an error, we first check if error var is set OR if DO_STEP_1 and token-id are empty
if ( isset( $recaptcha_error ) || ( empty($_POST['DO_STEP_1']) && empty($_GET['token-id']) ) ) {
print '<p>We are pleased to offer the option for you to securely pay your Hansen Hunter & Co. invoice online.</p>
<h2 class="pad">Invoice Details</h2>
<form method="post">
<table>
<tr><td><input type="text" name="shipping-address-first-name" placeholder="First Name" required></td></tr>
<tr><td><input type="text" name="shipping-address-last-name" placeholder="Last Name" required></td></tr>
<tr><td><input type="text" name="shipping-address-company" placeholder="Company" required></td></tr>
<tr><td><input type="text" name="billing-address-phone" placeholder="Phone Number" required></td></tr>
<tr><td><input type="text" name="billing-address-email" placeholder="Email Address" required></td></tr>
<tr><td><input type="text" name="billing-invoice" placeholder="Invoice or Customer Number"></td></tr>
<tr><td><input type="text" name="billing-amount" placeholder="Total Amount" required></td></tr>
<tr><td><h4><br />Payment Information</h4></td></tr>
<tr><td><input type="text" name="billing-address-first-name" placeholder="Cardholder First Name" required></td></tr>
<tr><td><input type="text" name="billing-address-last-name" placeholder="Cardholder Last Name" required></td></tr>
<tr><td><input type="text" name="billing-address-address1" placeholder="Address" required></td></tr>
<tr><td><input type="text" name="billing-address-address2" placeholder="Address 2"></td></tr>
<tr><td><input type="text" name="billing-address-city" placeholder="City" required></td></tr>
<tr><td><input type="text" name="billing-address-state" placeholder="State" required></td></tr>
<tr><td><input type="text" name="billing-address-Zip" placeholder="Zip/Postal Code" required></td></tr>
<tr><td><input type="text" name="billing-address-country" placeholder="Country" value="US" required></td></tr>
<tr><td><div class="g-recaptcha" data-sitekey="6Lc2MiUTAAAAAGJeGAlku50gFi7hFKvIitP_-3e0"></div></td></tr>
<tr><td><input type="submit" class="btn pad" value="Continue"><input type="hidden" name="DO_STEP_1" value="true"></td></tr>
</table>
</form>
';
}
完全にカスタムコードの代わりにCaldera Formsのようなプラグインを使用していない理由はありますか?このプラグインは、フィールドHTML出力、reCAPTCHA出力/検証など、これらのことの大部分を処理し、さらにカスタムコードで処理できるようにフォーム送信時に呼び出すことができるアクション/フックを提供します。
https://wordpress.org/plugins/caldera-forms/ /