web-dev-qa-db-fra.com

POST de jQuery à PHP

J'ai un formulaire qui transmet les valeurs de champ à jQuery, qui valide les champs et crée les variables envoyées dans data: {} dans le fragment ci-dessous.

$.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 ne reçoit aucune donnée ou n'enregistre pas les données.

Je ne sais pas pourquoi.

Ci-dessous, mon fichier 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);

?>

Je dois comprendre pourquoi rien ne s'affiche lorsque j'utilise le formulaire et comment renvoyer $user_post_redirect à jQuery afin que je puisse y effectuer une redirection.

Comment puis-je y arriver?

1
Nick Passaro

Lorsque vous chargez votre fichier process.php directement, ce n'est pas dans le contexte de l'environnement WordPress, donc aucune fonction WordPress n'est disponible. WordPress a un AJAX API natif qui devrait être utilisé pour ce genre de chose.

Tout d'abord, mettez en file d'attente votre fichier javascript , puis utilisez wp_localize_script pour indiquer l'emplacement de admin-ajax.php, qui traitera les demandes:

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' );

Ensuite, ajoutez une action à vos données ajax, qui mappera à la fonction raccordée pour traiter la demande:

$.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
    }
});

Enfin, ajoutez l'action dans php et raccordez-la à la fonction qui la recevra et la traitera, puis déplacerez le contenu de process.php dans cette fonction.

add_action( 'wp_ajax_some_action', 'your_process_function' );
add_action( 'wp_ajax_nopriv_some_action', 'your_process_function' );
3
Milo