私はすでに数日間これに苦労しているので、どんな助けでも大歓迎です。私がWPでAjaxを設定するのは初めてではないので、少なくともいくつか考えがあります。それは非常に標準的なフォームの検証とデータベースへの情報の入力に関するものです。 これはすべてプラグインの中です。
それで、何が動作しますか:フォーム送信が動作し、jqueryスクリプトがアクティブになり、入力情報をコールバックPHPファイルに転送します。
問題は、何らかの理由で、そのPHPファイルのフォームを処理する特定の機能がアクティブにならないことです。
だから、私は何がありますか?それはかなり標準的なようですので、私はそのようにフォームをスキップします。
1 - javascript/jquery
/plugins/alert-widget/submit_handler.js
jQuery(document).ready( function() {
jQuery("#alert_set_form").on("submit", function(e) {
e.preventDefault();
var info = jQuery("#alert_set_form").serialize();
// Post to the server
jQuery.ajax({
type:"POST",
url:ajaxAlert.ajaxurl,
data:info,
dataType:'json',
success: function(data){
jQuery("#alert_set_form .stm-validation-message").html(data);
}
});
});
});
1 - フォームを構築し、検証/データ入力を処理することになっているメインのPHPプラグインファイル。
/plugins/alert-widget/alert_widget.php
add_action('wp_ajax_bda_alert', 'bda_alert_validation');
add_action('wp_ajax_nopriv_bda_alert', 'bda_alert_validation');
/* this commented out code was placed just to check if call hits the file, which it does
if( isset($_POST['model'])){
$criteria = array(
'model' => $_POST['model'],
'body' => $_POST['body'],
'price' => $_POST['price'],
'mileage' => $_POST['mileage'],
'ca-year' => $_POST['ca-year'],
'fuel' => $_POST['fuel'],
'transmission' => $_POST['transmission']
);
$criteria = base64_encode(serialize($criteria));
$response = $criteria;
wp_send_json( $response );
wp_die();
}
*/
function bda_alert_validation(){
//does validation and input
$response =array(
'data' => 'success',
'supplemental' => array(
'message' => 'success',
),
) ;
wp_send_json( $response );
wp_die();
}
add_action('init', 'alert_form_init' );
function alert_form_init() {
wp_register_script( "alert_form_script", WP_PLUGIN_URL.'/alert-widget/submit_handler.js', array('jquery') );
wp_localize_script( 'alert_form_script', 'ajaxAlert', array( 'ajaxurl' => admin_url( 'admin-ajax.php' )));
wp_enqueue_script( 'jquery' );
wp_enqueue_script( 'alert_form_script');
}
フォームをajaxデータとしてシリアル化しているので、フォームにaction
部分がない可能性があります。
<input type="hidden" name="action" value="bda_alert">
あなたのajaxリクエストには
/wp-admin/admin-ajax.php?action=bda_alert&...
それはwp_ajax_bda_alert
またはwp_ajax_nopriv_bda_alert
アクションコールバックを呼び出すはずです。
上記のAJAXコールバックは、次のようにREST APIエンドポイントとして書き換えることができます。
function bda_alert_validation( $request ){
// $info = $request['info'];
$response = array(
'data' => 'success',
'supplemental' => array(
'message' => 'success'
)
) ;
return $response;
}
add_action( 'rest_api_init', function () {
register_rest_route( 'bernarda/v1', '/validatealert/', array(
'methods' => 'POST',
'callback' => 'bda_alert_validation'
) );
} );
これでexample.com/wp-json/benarda/v1/validatealert/
にエンドポイントがあり、それに対してPOST
リクエストを実行できます