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