web-dev-qa-db-ja.com

POST jQueryから PHP

以下のスニペットで、フィールド値を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に返す方法を理解する必要があります。

どうすればそれを達成できますか?

1
Nick Passaro

あなたが直接あなたの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' );
3
Milo