J'essaie de transmettre un formulaire de commentaire Wordpress, posté sur FrontPage, via Ajax. Lors de la soumission, le code de réussite du JS est exécuté, mais le commentaire n'est pas inséré dans la base de données. Merci d'avance pour toute aide!
Le HTML
<form id="commentform" type="post" class="commentform">
<label for="comment"></label>
<textarea id="comment" class="comment" name="comment" aria- required="true"></textarea>
<input name="comment_post_ID" value="210” id="comment_post_ID" class="comment_post_ID" type="hidden"/>
<input name="comment_parent" id="comment_parent" class="comment_parent" value="0” type="hidden"/>
<input type="hidden" name="action" value="trytosendit"/>
<input type="submit">
</form>
ajaxtry2.JS
jQuery(document).ready(function(e) {
e('.commentform').submit(ajaxSubmit);
function ajaxSubmit() {
var comment_parent=e(".comment_parent").val();
var comment_post_ID=e(".comment_post_ID").val();
var comment=e(".comment").val();
jQuery.ajax({
action: 'trytosendit',
type: "POST",
url: commentsent.ajaxurl,
data: {comment_parent:comment_parent,comment_post_ID:comment_post_ID,comment:comment},
success: function(data) {
alert(comment_parent + comment + comment_post_ID + 'This is data returned from the server ');
}
});
return false;
}});
Fonctions.php
wp_enqueue_script( 'ajaxtry2', get_template_directory_uri() . '/JS/ajaxtry2.js', '', '', true );
wp_localize_script( 'ajaxtry2', 'commentsent', array( 'ajaxurl' => admin_url( 'admin-ajax.php' )));
function trytosendit() {
global $wpdb;
$comment_parent = $_POST['comment_parent'];
$comment_post_ID = $_POST['comment_post_ID'];
$comment = $_POST['comment'];
$time = current_time('mysql');
$data = array(
'comment_post_ID' => $comment_post_ID,
'comment_author' => 'admin',
'comment_author_url' => '',
'comment_content' => $comment,
'comment_type' => '',
'comment_parent' => $comment_parent,
'user_id' => 1,
'comment_author_IP' => '',
'comment_agent' => '',
'comment_date' => $time,
'comment_approved' => 1,
);
wp_insert_comment($data);
wp_die();}
add_action( 'wp_ajax_trytosendit', 'trytosendit' );
add_action( 'wp_ajax_nopriv_trytosendit', 'trytosendit' );
Cela a pris un certain temps, mais cela fonctionne (un commentaire est créé, bien qu'il reste encore quelques valeurs, mais il est facile de corriger cette partie). Plus gros changements: pour une raison quelconque, un "écho" dans functions.php était important. De plus, j'ai changé l'action dans ajaxtry2.js sous data:
HTML (les valeurs sont fictives)
<form id="commentform" class="commentform">
<label for="comment"></label>
<textarea id="comment" class="comment" name="comment"></textarea>
<input name="comment_post_ID" value="1" id="comment_post_ID" class="comment_post_ID" type="hidden"/>
<input name="comment_parent" id="comment_parent" class="comment_parent" value="1" type="hidden"/>
<input type="submit">
</form>
ajaxtry2.JS
jQuery(document).ready(function(e) {
e('.commentform').on('submit', (ajaxSubmit));
function ajaxSubmit() {
var comment_parent=e(".comment_parent").val();
var comment_post_ID=e(".comment_post_ID").val();
var comment=e(".comment").val();
var BookingForm = jQuery(this).serialize();
jQuery.ajax({
type: 'POST',
url: commentsent.ajaxurl,
data: {BookingForm:BookingForm,action:'trytosenditr'},
success:function(msg){
alert(msg +comment);
}
});
return false;
}});
functions.php
function all_the_scripts2() {
wp_enqueue_script( 'ajaxtry2', get_template_directory_uri() . '/JS/ajaxtry2.js', '', array('jquery'), false );
wp_localize_script( 'ajaxtry2', 'commentsent', array( 'ajaxurl' => admin_url( 'admin-ajax.php' )));
}
add_action( 'wp_enqueue_scripts', 'all_the_scripts2' );
function trytosendit() {
global $wpdb;
parse_str($_POST["BookingForm"], $output);
$comment_parent = $output['comment_parent'];
$comment_post_ID = $output['comment_post_ID'];
$comment = $output['comment'];
$time = current_time('mysql');
$current_user = wp_get_current_user();
$data = array(
'comment_post_ID' => $comment_post_ID,
'comment_content' => $comment,
'comment_parent' => $comment_parent,
'comment_date' => $time,
'comment_approved' => 0,
'user_id' => $current_user->ID,
);
wp_insert_comment($data);
echo 'hello';
wp_die();
}
Grand fan de ce site Web, il m'a beaucoup aidé plusieurs fois!