Как получить содержимое поста, вызывая ajax?

Вопрос или проблема

Я работаю над плагином. У меня есть пользовательский тип записи team. У кастомной записи четыре поста разных категорий. Я использовал этот код, чтобы отправить ID поста каждого с помощью AJAX.

$(document).ready(function () {

        $(".post_thumbnail").click(function () {
            var id_post = $(this).attr('post_id');
            $.ajax({
                type: 'POST',
                url: "<?php echo plugin_dir_url(__FILE__).'post-content.php';?>",
                data: {
                    'post_id': id_post
                }, success: function (result) {

                   alert(result);
                },
                error: function () {
                    alert("ошибка");
                }
            });

        });
    });

Я успешно отправляю ID и также получаю его. Чтобы получить ID, мой код выглядит так:

if(isset($_POST['post_id'])) {
    echo  $id=$_POST['post_id'];

}

Но я не могу отобразить содержимое каждого поста. Как отобразить содержимое каждого поста? Я стараюсь изо всех сил, но безуспешно. Буду признателен за любую помощь.

Во-первых, вам следует всегда использовать методы AJAX WordPress, а не создавать для этого собственную функцию. См. AJAX в плагинах в Codex.

С учетом этой практики вы можете настроить ваш запрос следующим образом. Измените URL AJAX на:

<?php echo admin_url('admin-ajax.php'); ?> 

и добавьте ключ 'action': с именем конкретной функции WordPress, которую вы хотите выполнить на следующем этапе, когда серверная часть получит ваши данные.

$(".post_thumbnail").click(function () {
    var id_post = $(this).attr('post_id');
    $.ajax({
        type: 'POST',
        url: '<?php echo admin_url('admin-ajax.php'); ?>',
        data: {
            'post_id': id_post,
            'action': 'f711_get_post_content' //это имя метода AJAX, вызываемого в WordPress
        }, success: function (result) {

           alert(result);
        },
        error: function () {
            alert("ошибка");
        }
    });

});

Теперь нам нужно сказать WordPress, что делать, когда кто-то вызывает f711_get_post_content.

Зарегистрируйте действие в AJAX WordPress. Это делается в ваших функциях плагина. Первая часть (‘wp_ajax_’) сообщает WordPress, что это действие AJAX, а часть после – название действия (‘f711_get_post_content’). Второй аргумент – это функция, которую WordPress выполняет, когда это действие вызывается.

add_action( 'wp_ajax_f711_get_post_content', 'f711_get_post_content_callback' );
// Если вы хотите, чтобы незарегистрированные пользователи также могли использовать эту функцию, зарегистрируйте ее снова с помощью этой функции:
add_action( 'wp_ajax_nopriv_f711_get_post_content', 'f711_get_post_content_callback' );

После этого вы создаете вашу функцию обратного вызова. Помните, что ВСЕГДА нужно завершать выполнение ваших AJAX функций с помощью die(). Если ваша функция выводит JSON, что я бы рекомендовал, вы можете завершить функцию с помощью wp_send_json( $array );, которая уже включает в себя die().

function f711_get_post_content_callback() {

    // получать post_id и очищать его для повышения безопасности
    $post_id = intval($_POST['post_id'] );

    // Проверьте, является ли ввод валидным целым числом
    if ( $post_id == 0 ) {
        echo "Недопустимый ввод";
        die();
    }

    // получить пост
    $thispost = get_post( $post_id );

    // проверить, существует ли пост
    if ( !is_object( $thispost ) ) {
        echo 'Поста с ID ' . $post_id . ' не существует.';
        die();
    }

    echo $thispost->post_content; //Возможно, вы захотите вывести wpautop( $thispost->post_content );

    die();

}

Это будет рекомендуемая версия JSON. Она позволяет передавать несколько значений обратно клиенту.

function f711_get_post_content_callback() {

    // получать post_id и очищать его для повышения безопасности
    $post_id = intval($_POST['post_id'] );

    // Проверьте, является ли ввод валидным целым числом
    if ( $post_id == 0 ) {

        $response['error'] = 'true';
        $response['result'] = 'Недопустимый ввод';

    } else {

        // получить пост
        $thispost = get_post( $post_id );

        // проверить, существует ли пост
        if ( !is_object( $thispost ) ) {

            $response['error'] = 'true';
            $response['result'] =  'Поста с ID ' . $post_id . ' не существует.';

        } else {

            $response['error'] = 'false';
            $response['result'] = wpautop( $thispost->post_content );

        }

    }

    wp_send_json( $response );

}

Выберите категорию

slug) ; ?>’>name); ?>

Поиск

Продукты

Модальное окно заголовок

Название продукта :

Описание продукта :

Содержимое продукта :

Закрыть
Сохранить изменения

$(document).ready(function(){
//обновить редактируемый пост

$(document).on(‘click’,’#update_post’,function(){
var post_id = $(‘#edit_post_id’).val();
var post_name = $(‘#pro_name’).val();
var post_des = $(‘#pro_des’).val();
var post_content = $(‘#pro_con’).val();
$.ajax({
type:’GET’,
url:”,
data:{
‘action’ : ‘update_post’,
‘update_post_id’ : post_id,
‘product_name’: post_name,
‘product_des’ : post_des,
‘product_content’ : post_content,
},
success:function(result){
window.location.reload();
},

});

});
// кнопка редактирования поста
$(document).on(‘click’,’.edit_post’,function(){
var post_id = $(this).data(‘post_id’);

$.ajax({
type: “GET”,
url:” “,
data:{
‘action’: ‘edit’,
‘edit’: post_id,
},
success: function(result){
console.log(result.data.data);
if(result.success){
var title = result.data.data.tittle;
$(‘#pro_name’).val(title);
var des = result.data.data.description;
$(‘#pro_des’).val(des);
var content = result.data.data.content;
$(‘#pro_con’).val(content);
$(‘#edit_post_id’).val(post_id);
$(‘#exampleModal’).modal(‘show’);

}

},
});
});

// кнопка удаления поста
$(document).on(‘click’,”.delete_post”, function(){
var delete_post = $(this).data(‘post_id’);

$.ajax({
type: “GET”,
url: “”,
data : {
‘action’: ‘delete’,
‘delete’: delete_post,
},
success: function(result){
window.location.reload();

},
});
});
// категория поста
$(“#category”).change(function(){

var category = $(this).val();
$(‘#post_container’).empty();
$.ajax({
type: “GET”,
url: “”,
data : {
‘action’ : ‘my_action’,
‘category’ : category,
},

success: function(result){
if(result.success){
console.log(result.data.data);
$(‘#post_container’).append(result.data.data);
} else {
$(‘#post_container’).append(‘Продукты не найдены..!! ‘);
}
},
});
});
// кнопка поиска постов
$(“#search_1”).click(function(){
var search = $(“#search”).val();
$(“#post_container”).empty();
$.ajax({
type: “GET”,
url: “”,
data : {
‘action’ : ‘my_action’,
‘search’ : search,
},

success: function(result){
if(result.success){
console.log(result.data.data);
$(‘#post_container’).append(result.data.data);
} else {
$(‘#post_container’).append(‘Продукты не найдены..!! ‘);
}
},
});
});

// получение постов через ajax
function post_ajax(){
$.ajax({
type: “GET”,
url: “”,
data: {
‘action’:’my_action’
},
dataType: ‘json’,
success: function(result){

console.log(result);
if(result.success){

$(‘#post_container’).append(result.data.data);
} else {
$(‘#post_container’).append(‘Продукты не найдены..!! ‘);
}
},
});
}

post_ajax();
});

Ответ или решение

Для получения содержимого поста с использованием AJAX в WordPress, необходимо следовать определенным шагам, обеспечивая правильную регистрацию и вызов функций. Ниже описан детальный процесс, который поможет вам корректно реализовать данную функциональность в вашем плагине, работающем с пользовательским типом поста "team".

1. Настройка JavaScript для отправки AJAX-запроса

Сначала убедитесь, что вы используете правильный URL для AJAX-запроса. Вместо URL вашего плагина, используйте admin-ajax.php. Это можно сделать следующим образом:

$(document).ready(function () {
    $(".post_thumbnail").click(function () {
        var id_post = $(this).attr('post_id');
        $.ajax({
            type: 'POST',
            url: '<?php echo admin_url('admin-ajax.php'); ?>',
            data: {
                'post_id': id_post,
                'action': 'f711_get_post_content' // Название вашей AJAX функции в WordPress
            },
            success: function (result) {
                alert(result);
            },
            error: function () {
                alert("Ошибка");
            }
        });
    });
});

2. Регистрация AJAX-обработчика в WordPress

После того, как вы определили обработчик на стороне клиента, необходимо зарегистрировать соответствующий обработчик на серверной стороне. Это делается с помощью функции add_action в файле вашего плагина:

add_action('wp_ajax_f711_get_post_content', 'f711_get_post_content_callback');
add_action('wp_ajax_nopriv_f711_get_post_content', 'f711_get_post_content_callback'); // Для незалогиненных пользователей

3. Создание функции-обработчика

Теперь необходимо создать функцию, которая будет обрабатывать AJAX-запросы и возвращать содержимое поста. Убедитесь, что ваша функция корректно обрабатывает входящие данные и отправляет ответ. Ниже приведен пример функции:

function f711_get_post_content_callback() {
    // Получаем ID поста и приводим его к целочисленному типу
    $post_id = intval($_POST['post_id']);

    // Проверяем валидность ID поста
    if ($post_id === 0) {
        wp_send_json_error('Некорректный ввод');
        die();
    }

    // Получаем пост по ID
    $thispost = get_post($post_id);

    // Проверяем, существует ли пост
    if (!is_object($thispost)) {
        wp_send_json_error('Пост с ID ' . $post_id . ' не найден');
        die();
    }

    // Возвращаем содержимое поста
    $response = array(
        'error' => false,
        'result' => wpautop($thispost->post_content)
    );

    wp_send_json_success($response);
}

4. Обработка ответа на клиенте

По завершении AJAX-запроса вы можете модифицировать ваш код успеха для более информативного вывода:

success: function (result) {
    if (result.success) {
        // Можно вставить результат в нужный элемент на странице
        $('#post_content').html(result.data.result);
    } else {
        alert(result.data);
    }
}

Заключение

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

Не забывайте также соблюдать современные стандарты безопасности, такие как валидация и экранирование данных, особенно если вы планируете использовать пользовательский ввод.

Оцените материал
Добавить комментарий

Капча загружается...