【问题标题】:Display WordPress last posts via AJAX通过 AJAX 显示 WordPress 最后的帖子
【发布时间】:2020-02-11 13:36:56
【问题描述】:

我正在建立一个每小时上传帖子的新闻博客。我创建了一个简码,显示主页上的最后 15 个帖子。我的问题是需要每小时删除一次服务器缓存。所以我决定通过 AJAX 提供帖子,这样这个区域就会在每次页面加载时获得最新的帖子。

我找到了这个answer 并将其与我的代码结合起来。

我的问题是它显示了所有帖子,而不仅仅是 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);
        });
    }
});

【问题讨论】:

    标签: javascript php jquery ajax wordpress


    【解决方案1】:

    这可能对你有帮助:

    Pagination parameters

    (nopaging (boolean) – 显示所有帖子或使用分页。默认值 为“假”,使用分页。 )

    通过禁用分页显示所有帖子:

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

    如果您想使用posts_per_page 显示一定数量的帖子,我认为您应该删除该参数。

    【讨论】:

      【解决方案2】:

      试试这段代码我已经编辑了你的代码请看下面

      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 循环结束后使用,这意味着在你的两个循环中你必须有

      wp_reset_postdata()  // use this at both loops
      

      【讨论】:

      • 我已经添加了 - wp_reset_postdata(),它不会在 15 内停止...
      • 我不知道“nopaging”这一行是什么 => 真的,当我删除它时它正在工作......谢谢。
      猜你喜欢
      • 2013-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多