Удаление сообщений WordPress в front-end с помощью AJAX - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь удалить сообщения WordPress из внешнего интерфейса с помощью AJAX.Мой код удаляет сообщение, но отображает пустую страницу с «успехом», когда я хочу просто исчезнуть это сообщение без перезагрузки страницы и отображения пустой страницы.

Код PHP:

<?php if( current_user_can( 'delete_post' ) ) : ?>
        <?php $nonce = wp_create_nonce('my_delete_post_nonce') ?>
        <a href="<?php echo admin_url( 'admin-ajax.php?action=my_delete_post&id=' . get_the_ID() . '&nonce=' . $nonce ) ?>" data-id="<?php the_ID() ?>" data-nonce="<?php echo $nonce ?>" class="delete-post">delete</a>
    <?php endif ?>

Функции.php код:

function my_frontend_script() {
wp_enqueue_script( 'my_script', get_template_directory_uri() . '/js/my_script.js', array( 'jquery' ), '1.0.0', true );
}
add_action( 'wp_enqueue_scripts', 'my_frontend_script' );
wp_localize_script( 'js/my_script.js', 'MyAjax2', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'ajaxnonce' => wp_create_nonce('ajax-nonce') ) );


add_action( 'wp_ajax_my_delete_post', 'my_delete_post' );
function my_delete_post(){

    $permission = check_ajax_referer( 'my_delete_post_nonce', 'nonce', false );
    if( $permission == false ) {
        echo 'error';
    }
    else {
        wp_delete_post( $_REQUEST['id'] );
        echo 'success';
    }

    die();
}

my_script.js код:

jQuery( document ).ready( function($) {
    $(document).on( 'click', '.delete-post', function() {
        var id = $(this).data('id');
        var nonce = $(this).data('nonce');
        var post = $(this).parents('.post:first');
        $.ajax({
            type: 'post',
            url: MyAjax2.ajaxurl,
            data: {
                action: 'my_delete_post',
                nonce: nonce,
                id: id
            },
            success: function( result ) {
                if( result == 'success7' ) {
                    post.fadeOut( function(){
                        post.remove();
                    });
                }
            }
        })
        return false;
    })
})

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

Похоже, my_script.js даже не используется вообще: (

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 11 февраля 2019
<a href="<?php echo admin_url( 'admin-ajax.php?action=my_delete_post&id=' . get_the_ID() . '&nonce=' . $nonce ) ?>" data-id="<?php the_ID() ?>" data-nonce="<?php echo $nonce ?>" class="delete-post">delete</a>

он перезагружается, потому что сначала загружает URL-адрес в вашем атрибуте href, а затем выполняет ваш ajax-вызов.это не то, что вы хотите.Вы хотите выполнить только OnClick.Это должно решить проблему.просто вставьте # в вашем href

<a href=# data-id="<?php the_ID() ?>" data-nonce="<?php echo $nonce ?>" class="delete-post">delete</a>

или создайте кнопки

<button data-id="<?php the_ID() ?>" data-nonce="<?php echo $nonce ?>" class="delete-post">delete</button>

edit: если это все еще не работает, это потому, что вы получили опечатку здесь

if( result == 'success7' )

успех7 вместо успеха

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