WordPress Обновите пользовательский статус сообщения, нажав пользовательскую ссылку в admin - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть сайт, на котором я получаю сообщения от пользователей, эти сообщения сохраняются в WP как пользовательские сообщения с ожидающим статусом, У администратора есть настраиваемая ссылка на этой странице с типом поста. Утвердить | отклонять Одобрить следует изменить статус сообщения на Публичный Отклонить Следует изменить статус сообщения на корзину / del

enter image description here

может кто-нибудь подсказать любой хук на что-либо, что я могу запустить, чтобы изменить статус сообщения из бэкэнда, нажав эти пользовательские ссылки

кодекс утверждения | кнопку отклонения, если кто-то хочет увидеть

add_filter( 'manage_dream_posts_columns', 'smashing_filter_posts_columns' );
function smashing_filter_posts_columns( $columns ) {
  $columns['decision'] = __( 'Decision Pending', 'rima' );
  return $columns;
}
add_action( 'manage_dream_posts_custom_column', 'smashing_dream_column', 10, 2);
function smashing_dream_column( $column, $post_id ) {

  if ( 'decision' === $column ) {
    if (get_post_status ( $post_id ) == 'pending') {
        echo '<div class="decision"><a href="#" data-userID="'.$post_id.'" class="dapprove" onclick="decision()">Approve</a><a href="#" class="dreject">Reject</a></div>';
    }
    else {
        echo '<div class="decision"><span class="dapprove">Approved</span></div>';
    }
  }
}

1 Ответ

0 голосов
/ 03 ноября 2018

Вы могли бы сделать что-то вроде этого - это немного странно и использует jQuery, но это быстрое решение вашей проблемы с использованием метода Ajax, поэтому все это работает в реальном времени с вашим экраном администратора. Вы можете одобрить / отклонить несколько сообщений без перезагрузки страницы, включая некоторые цветные отзывы, чтобы вы знали, что происходит.

Вам необходимо добавить 2 новых действия:

add_action( 'wp_ajax_set_post_status', 'set_post_status_ajax_handler' );
add_action( 'admin_footer', 'set_post_status_js' );

Затем добавьте эти функции:

function set_post_status_js()
{
  $nonce = wp_create_nonce('set_post_status');
  $ajax_url = admin_url('admin-ajax.php'); ?>

  <script type="text/javascript">
    (function($){
      $(document).ready(function(){
        $('.decision a').click(function(event){
          event.preventDefault();
          $.post( "<?= $ajax_url; ?>", {
            nonce: "<?= $nonce; ?>",
            action: 'set_post_status',
            post_id: $(this).data('post_id'),
            status: $(this).data('status'),
          }, function(data){
            if (data.ok) {
              var postStateLabel = (data.status === 'publish') ? '<span style="color: #009900;">Approved</span>' : '<span style="color: #990000;">Rejected</span>';

              $('#post-' + data.id)
                .css('background', data.status === 'publish' ? '#EEFFEE' : '#FFEEEE')
                .find('.post-state').html( postStateLabel );
            }
          });
        });
      });
    })(jQuery)
  </script>

  <?php
}

И

function set_post_status_ajax_handler()
{
  $nonce = $_POST['nonce'];

  if ( ! wp_verify_nonce( $nonce, 'set_post_status' ) )
    die ( 'Not permitted');

  // Extract the vars from the Ajax request
  $post_id = $_POST['post_id'];
  $status = $_POST['status'];

  // Now update the relevant post
  $post_id = wp_update_post([
    'ID' => $post_id,
    'post_status' => $status,
  ], true);

  // make sure it all went OK
  if (is_wp_error($post_id))
  {
    $response = [
      'ok' => false,
    ];
  } else 
  {
    $response = [
      'ok'      => true,
      'id'      => $post_id,
      'status'  => $status,
    ];
  }

  // Return the response
  wp_send_json( $response );
}

Наконец, вам нужно изменить ссылки «Утвердить / Отклонить» на этот HTML-код:

echo '
<div class="decision">
  <a href="#" data-post_id="' . $post_id . '" data-status="publish" class="dapprove">Approve</a>
  <a href="#" data-post_id="' . $post_id . '" data-status="trash" class="dreject">Reject</a>
</div>';

Надеюсь, это поможет вам разобраться. Приветствия.

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