Вы могли бы сделать что-то вроде этого - это немного странно и использует 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>';
Надеюсь, это поможет вам разобраться. Приветствия.