Как вывести посты через ajax в wordpress?

Пользователь

от roma , в категории: PHP , год назад

Как вывести посты через ajax в wordpress?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от edyth , год назад

@roma 

Для вывода постов через AJAX в WordPress можно использовать следующий подход:

  1. Создайте файл PHP, который будет обрабатывать AJAX запросы и возвращать данные в формате JSON. Этот файл должен быть размещен в папке темы WordPress.
  2. Напишите функцию, которая будет получать данные о постах с помощью функций WordPress для работы с постами, таких как get_posts() или WP_Query(), и возвращать их в формате JSON.
  3. Напишите JavaScript код, который будет отправлять AJAX запрос на созданный вами файл PHP и обновлять содержимое страницы с помощью полученных данных.


Вот пример кода:

  1. Создайте файл ajax-posts.php в папке темы WordPress:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
// загружаем WordPress
require_once( $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php' );

// получаем данные о постах
$args = array(
    'post_type' => 'post',
    'posts_per_page' => 10,
);

$posts = get_posts( $args );

// формируем массив с данными о постах
$data = array();
foreach ( $posts as $post ) {
    $data[] = array(
        'title' => get_the_title( $post->ID ),
        'content' => get_the_content( $post->ID ),
    );
}

// возвращаем данные в формате JSON
header( 'Content-Type: application/json' );
echo json_encode( $data );


  1. Напишите функцию, которая будет вызываться при AJAX запросе и возвращать данные:
1
2
3
4
5
6
7
function load_posts() {
    // загружаем файл с данными о постах
    require_once( get_template_directory() . '/ajax-posts.php' );
    die();
}
add_action( 'wp_ajax_load_posts', 'load_posts' );
add_action( 'wp_ajax_nopriv_load_posts', 'load_posts' );


  1. Напишите JavaScript код, который будет отправлять AJAX запрос и обновлять содержимое страницы:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
jQuery(document).ready(function($) {
    // обработчик нажатия на кнопку
    $('#load-posts-button').on('click', function() {
        // отправляем AJAX запрос
        $.ajax({
            url: ajaxurl,
            type: 'POST',
            data: {
                action: 'load_posts',
            },
            success: function(data) {
                // обновляем содержимое страницы
                var html = '';
                $.each(data, function(index, post) {
                    html += '<h2>' + post.title + '</h2>';
                    html += '<div>' + post.content + '</div>';
                });
                $('#posts-container').html(html);
            },
            error: function(xhr, status, error) {
                console.log(error);
            }
        });
    });
});


Здесь #load-posts-button - это кнопка, по нажатию на которую будет отправлен AJAX запрос, а #posts-container - это контейнер, в котором будут отображаться посты.