WordPress веб-интерфейс AJAX не работает в мусорном сообщении - PullRequest
0 голосов
/ 27 сентября 2019

Мои пользователи имеют возможность создавать экземпляры пользовательских сообщений из своих учетных записей, и тогда я бы хотел, чтобы они также могли их удалять.В разделе своего аккаунта перечислены все опубликованные ими сообщения, и у каждого есть кнопка «Удалить», например:

<a href="#" class="deleteMR" data-id="<?php echo $post->ID ?>">delete</a>

Затем во внешнем файле JS у меня есть:

jQuery(".deleteMR").click(function (e) {
   e.preventDefault();
   rid = $(this).attr("data-id");
   var data =  {
      action: 'delete_request',            
      requestid: rid,        
   }
   jQuery.post(my_ajax_object.ajaxurl, data, function(response) {
      if(response.success) {
         alert('It worked');
      } else {
         alert('It failed');
      }
    });
});

И затем в моем functions.php у меня есть:

add_action('wp_ajax_delete_request', 'delete_request');
function delete_request() {

   $requestid = $_REQUEST['requestid'];
   wp_trash_post(requestid);

   wp_send_json_success(true);

   wp_send_json_error(console.log(response));
}

Когда кнопка нажата, JavaScript корректно срабатывает (и я проверил, как она выбирает правильный идентификатор сообщенияпри использовании console.log) функция в functions.php по крайней мере подтверждается, но возвращение всегда «не выполняется», и сообщение не удаляется.Если вместо этого я вывожу $response, я просто получаю первые 10% кода страницы, с которой все это происходит.

Я не могу понять, что я делаю неправильно, кто-нибудь может помочь?Спасибо.

1 Ответ

0 голосов
/ 27 сентября 2019

В вашем коде есть пара ошибок.Пожалуйста, смотрите комментарии, которые я добавил в приведенном ниже коде.

add_action('wp_ajax_delete_request', 'delete_request');
function delete_request() {

   $requestid = $_REQUEST['requestid'];
   // missing $ from variable name
   wp_trash_post(requestid);
   // always returns a success response
   wp_send_json_success(true); 
   // error response never gets returned as success response is sent first.
   // also console.log is javascript, use var_dump or print_r instead
   wp_send_json_error(console.log(response)); 
}

Если вы напишите свой код, я думаю, пост-трешинг должен работать.

add_action('wp_ajax_delete_request', 'delete_request');
function delete_request() {

  // check nonce wp_verify_nonce()
  // send nonce with your ajax request
  // get nonce from wp_create_nonce() added to your site with wp_localize_script()

  // check capabilities with current_user_can();

  if ( ! empty( $_POST['requestid'] ) && is_numeric( $_POST['requestid'] ) ) {

    $trashed = wp_trash_post( intval( $_POST['requestid'] ) );

    if ( $trashed ) {    
      wp_send_json_success('Trashing post succeeded');          
    } else {    
      wp_send_json_error('Trashing post failed');          
    }

  } else {

    wp_send_json_error('Post id missing');

  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...