以下のスニペットで、フィールド値をjQueryに渡して、フィールドを検証し、data: {}
で送信される変数を作成するフォームがあります。
$.ajax({
type: "POST",
url: "<?php bloginfo('stylesheet_directory'); ?>/process.php",
dataType: "json",
data: {
"title":title,
"goals":goals,
"progress":progress,
"categories":categories,
"tags":tags,
"video":video,
"audio":audio,
},
success: function() {
//get permalink for post from php and go to it
}
});
process.php
はデータを受信していないか、データを投稿していません。
その理由はわかりません。
以下は私のprocess.php
ファイルです。
<?php
$user_submitted_title = sanitize_text_field($_POST['user_submitted_title']);
$user_submitted_progress = $_POST['user_submitted_progress'];
$user_submitted_goals = $_POST['user_submitted_goals'];
$user_submitted_categories = $_POST['user_submitted_categories'];
$user_submitted_tags = sanitize_text_field($_POST['user_submitted_tags']);
$user_submitted_video = sanitize_text_field($_POST['user_submitted_video']);
$user_submitted_audio = sanitize_text_field($_POST['user_submitted_audio']);
$user_post = array(
'comment_status' => 'open',
'post_author' => $user_ID,
'post_category' => array($user_submitted_categories),
'post_content' => '<h2>Project Progress</h2>' . $user_submitted_progress . '<h2>Project Goals</h2>' . $user_submitted_goals,
'post_status' => 'publish',
'post_title' => $user_submitted_title,
'post_type' => 'post',
'tags_input' => $user_submitted_tags
);
$user_post_id = wp_insert_post($user_post);
add_post_meta($user_post_id, 'wpcf-video', $user_submitted_video);
add_post_meta($user_post_id, 'wpcf-audio', $user_submitted_audio);
$user_post_redirect = get_permalink($user_post_id);
?>
リダイレクトするために、フォームを使用したときに何も投稿されない理由と$user_post_redirect
をjQueryに返す方法を理解する必要があります。
どうすればそれを達成できますか?
あなたが直接あなたのprocess.php
ファイルをロードするとき、それはWordPress環境の文脈の中にないので、WordPress機能は利用できません。 WordPressにはこのようなことに使うべきネイティブ AJAX API があります。
まず、 JavaScriptファイルをエンキューし 、次に wp_localize_script
を使用して場所を渡します。リクエストを処理するadmin-ajax.php
の例
function wpa_scripts() {
wp_enqueue_script(
'wpa_script',
get_template_directory_uri() . '/js/script.js',
array('jquery'),
null,
true
);
$script_data = array(
'admin_ajax' => admin_url( 'admin-ajax.php' )
);
wp_localize_script(
'wpa_script',
'wpa_data',
$script_data
);
}
add_action( 'wp_enqueue_scripts', 'wpa_scripts' );
次に、action
をajaxデータに追加します。これはリクエストを処理するためにフックされた関数にマッピングされます。
$.ajax({
type: "POST",
url: wpa_data.admin_ajax,
dataType: "json",
data: {
"action":"some_action",
},
success: function() {
//get permalink for post from php and go to it
}
});
最後に、phpにアクションを追加し、それを受け取って処理する関数にフックしてから、process.phpの内容をこの関数内に移動します。
add_action( 'wp_ajax_some_action', 'your_process_function' );
add_action( 'wp_ajax_nopriv_some_action', 'your_process_function' );