Показать последние сообщения WordPress через AJAX - PullRequest
0 голосов
/ 11 февраля 2020

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

Я нашел этот ответ и соединил его с моим кодом.

Моя проблема в том, что он отображает все сообщения, а не только 15.

PHP:

function get_ajax_posts() {
// Query Arguments
    $args = array(
    'post_type' => array('post'),
    'post_status' => array('publish'),
    'posts_per_page'  => 15,
    'nopaging' => true,
    'order'    => 'DESC',
    'orderby'    => 'date',
    );

    $ajaxposts = new WP_Query( $args );
    $response = '';

    if ( $ajaxposts->have_posts() ) {
            while ( $ajaxposts->have_posts() ) {
                $ajaxposts->the_post();
                $response .= get_template_part( 'template-parts/content-archive');
            }
   }    else {
             $response .= get_template_part('none');
     }

    echo $response;
        exit; // leave ajax call
}

// Fire AJAX action for both logged in and non-logged in users
add_action('wp_ajax_get_ajax_posts', 'get_ajax_posts');
add_action('wp_ajax_nopriv_get_ajax_posts', 'get_ajax_posts');

JS:

 $.ajax({
    type: 'POST',
    url: '<?php echo admin_url('admin-ajax.php');?>',
    dataType: "html",
    data: { action : 'get_ajax_posts' },
    success: function( response ) {
        $( '.home-hot-flights' ).html( response ); 
          //hot-flights
        var hot_flights_item = $(".home-hot-flights article").width() + 17;
        $(".art-move-left").click(function () { 
          $('.move-right').addClass('show-move-right');
          var leftPos = $('.home-hot-flights').scrollLeft();
          $(".home-hot-flights").animate({scrollLeft: leftPos - hot_flights_item}, 200);
        });

        $(".art-move-right").click(function () { 
          var leftPos = $('.home-hot-flights').scrollLeft();
          $(".home-hot-flights").animate({scrollLeft: leftPos + hot_flights_item}, 200);
        });
    }
});

Ответы [ 2 ]

1 голос
/ 11 февраля 2020

Это может вам помочь:

Параметры нумерации страниц

(nopaging (логическое) - показать все сообщения или использовать нумерацию страниц. Значение по умолчанию 'false' , используйте подкачку.)

Отобразите все сообщения, отключив разбиение на страницы:

$query = new WP_Query( array( 'nopaging' => true ) );

Я думаю, вам следует удалить этот параметр, если вы хотите отобразить определенное количество сообщений, используя posts_per_page.

0 голосов
/ 11 февраля 2020

Попробуйте этот фрагмент кода. Я изменил ваш код, см. Ниже

function get_ajax_posts() {
// Query Arguments
$args = array(
'post_type' => array('post'),
'post_status' => array('publish'),
'posts_per_page'  => 15,
'order'    => 'DESC',
'orderby'    => 'date',
);
wp_reset_query();
$ajaxposts = new WP_Query( $args );
$response = '';

if ( $ajaxposts->have_posts() ) {
        while ( $ajaxposts->have_posts() ) {
            $ajaxposts->the_post();
            $response .= get_template_part( 'template-parts/content-archive');
        }
 }    else {
         $response .= get_template_part('none');
 }

echo $response;
    exit; // leave ajax call
}

// Fire AJAX action for both logged in and non-logged in users
  add_action('wp_ajax_get_ajax_posts', 'get_ajax_posts');
  add_action('wp_ajax_nopriv_get_ajax_posts', 'get_ajax_posts');

Если данные двух циклов перезаписаны, то ваш первый код wp_reset_query () неверен. Если вы используете WP_Query, то

wp_reset_postdata() //remove wp_reset_query() which is used for wp_query()

следует использовать после окончания WHILE l oop, что означает, что в ваших двух циклах вы должны иметь

wp_reset_postdata()  // use this at both loops
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...