FrontPageに投稿されたWordpressのコメントフォームをAjax経由で渡します。送信時に、JSの成功コードが実行されますが、コメントはデータベースに挿入されません。ご協力ありがとうございます。
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;
}});
Functions.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' );
少し時間がかかりましたが、これでうまくいきました(まだ値がないにもかかわらずコメントが作成されていますが、その部分を修正するのは簡単です)。また、データの下のajaxtry2.jsの「アクション」を変更しました。
HTML(値は架空のものです)
<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();
}
このウェブサイトの大ファン、それは何度も何度も私を助けてくれました!