php 删除当前自定义帖子从一个按钮点击与 AJAX 请求

j2cgzkjk  于 2023-09-29  发布在  PHP
关注(0)|答案(1)|浏览(108)

我的平台存储用户创建的多个自定义帖子。现在我正试图创建一个删除按钮,从那里他们可以删除自己的帖子。 AJAX 请求成功,但我得到“错误:无法删除帖子”
这是简码功能

function wpso_delete_my_posts()
{
    $current_user =  get_current_user_id();
    $author_id = get_post_field('post_author', $post->ID);
    ob_start();
    if ($author_id == $current_user || current_user_can('administrator')) {
        echo '<a class="delete-post" id="send-to-draft-button" rel="nofollow" href="#">Delete Listing</a>';
    }
    return ob_get_clean();
}
add_shortcode('delete_me', 'wpso_delete_my_posts');

这是 AJAX 函数

add_action('wp_ajax_send_post_to_draft', 'send_post_to_draft_callback');
function send_post_to_draft_callback() {
    $post_id = get_the_ID();
    wp_delete_post($post_id, true);
    die(); 
}

这是 AJAX 请求

$('#send-to-draft-button').click(function(e) {
        e.preventDefault();
        $.ajax({
            url: bbjs.ajaxurl, // Use the WordPress AJAX URL
            type: 'POST',
            data: {
                action: 'send_post_to_draft', // Name of the server-side function to call
            },
            success: function(response) {
                if (response.success) {
                    alert('Post has been deleted');
                } else {
                    alert('Error: Unable to delete the post');
                }
            },
            error: function() {
                alert('Error: AJAX request failed.');
            }
        });
    });
vddsk6oq

vddsk6oq1#

我在最后解决了这个问题,以防有人需要...
在我的短代码函数中,我添加了ID数据属性来引用当前的文章ID

<?php $post_id = get_the_ID(); ?>
<a class="delete-post" id="send-to-draft-button" rel="nofollow" data-post-id="<?php echo esc_attr($post_id); ?>" href="#">Delete Listing</a>

在 AJAX 函数中修改了获取post ID的方法。现在函数看起来像这样。

function send_post_to_draft_callback() {
    $post_id = $_POST['post_id'];
    wp_delete_post($post_id, true);
    die(); 
}

在 AJAX 请求中,我只是声明了postId并将其添加到数据中。新功能:

$('#send-to-draft-button').click(function(e) {
        let postId = $(this).data('post-id');
        e.preventDefault();
        $.ajax({
            url: bbjs.ajaxurl, // Use the WordPress AJAX URL
            type: 'POST',
            data: {
                action: 'send_post_to_draft', // Name of the server-side function to call
                post_id: postId
            },
            success: function(response) {
                window.location.replace("/buy"); 
            },
            error: function() {
                alert('Error: AJAX request failed.');
            }
        });
    });

相关问题