在wordpress中添加到DB时重复消息

时间:2018-02-13 07:43:27

标签: php ajax wordpress

当我尝试在db中使用wp_insert_post()向db添加一个帖子时添加了两个帖子:

Ajax请求:

  

/wp-admin/admin-ajax.php?action=getchats&chat_type=all-chat&last_msg=110&add_msg=true&chat_message=helloworlds

对此的行动:

add_action( 'wp_ajax_getchats', 'getchats'); 

function getchats(){
    if (!isset($_GET['last_msg'])||(!is_numeric($_GET['last_msg'])||(!isset($_GET['chat_type'])))){
        die(json_encode(array('error' => 'no_latest')));
    }
    $cat_id = get_cat_ID($_GET['chat_type']); //the categories name 
    if ((isset($_GET['add_msg']))&&(isset($_GET['chat_message']))){
        $user_id = get_current_user_id();
        $description = $_GET['chat_message'];
        $title = $description;
        if (strlen($title)>20){
            $title = mb_substr($title, 0, 20, 'UTF-8');
        }
        $my_post = array(
            'post_content'   => $description,
            'post_title'     =>  $title,
            'post_status'    => 'publish',
            'post_type'      => 'chatmsg',
            'post_author'    => $user_id,
            'post_category'  => array($cat_id)
        );
        wp_insert_post($my_post);
    }
    $args=array(
        'numberposts' => 3,
        'orderby' => 'ID',
        'category' => $cat_id,
        'post_type' => 'chatmsg',
        'post_status' => 'publish',
    );
    $messages = [];
    $posts = get_posts($args);
    die(json_encode($posts));
    foreach( $posts as $post ){
        if ($post->ID > $_GET['last_msg']){
        $row = array(
            'id' => $post->ID,
            'message'=>$post->post_content,
            'author'=>$post->post_author,
            'date'=>$post->post_date,

        );
        $message[] = $row;
        }
    }
    die(json_encode(array('error' => 'ok', 'messages'=> $messages)));
}

为什么我只使用一个wp_insert_post但收到两个帖子?

UPD:需要使用wp_doing_ajax。感谢Maxim Sarandi的回答。

if( wp_doing_ajax() ) {
    add_action('wp_ajax_getchats', 'getchats');     
    function getchats()
    {
        //some code
    }
}

1 个答案:

答案 0 :(得分:0)

也许thisthis可能会对您有所帮助。

我能否为您的代码风格提供一些建议?

首先 - 使用$ _POST进行类似的查询。

第二 - 停止使用die(wp_send_json())。内部wp_send_json已存在die();只需使用wp_send_json_error()进行错误回复或wp_send_json_success();wp_send_json()

第三 - 使用noncescheck_ajax_referer();

第四 - 停止克隆不需要的括号。