web-dev-qa-db-ja.com

フロントページにAjaxのコメントフォームを送信すると成功しますが、挿入されません

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

少し時間がかかりましたが、これでうまくいきました(まだ値がないにもかかわらずコメントが作成されていますが、その部分を修正するのは簡単です)。また、データの下の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();
    }

このウェブサイトの大ファン、それは何度も何度も私を助けてくれました!

0
Alexander