首页 视频课程 主题开发课程第17章、AJAX异步 WordPress中加载更多文章示例

WordPress中加载更多文章示例

2023-06-11 / 473阅

WordPress加载更多文章示例

在WordPress中,我们可以使用ajax技术来实现加载更多文章功能,这样可以减少页面的加载时间,增强用户体验。本文提供一个简单的示例来展示如何实现WordPress加载更多文章功能。

1. 创建一个加载更多按钮

首先,我们需要在页面上创建一个按钮,当用户点击按钮时加载更多文章,这里我们使用一个简单的HTML按钮:

<button id="load-more" class="btn btn-primary">加载更多</button> 

2. 创建一个ajax请求

接下来,我们需要通过ajax技术来实现加载更多文章。我们可以使用jQuery来简化ajax请求的创建:

jQuery(document).ready(function($){
  var page = 2; //从第二页开始获取文章
  var loading = false; //标记是否正在加载文章

  $('#load-more').click(function(){
    if( ! loading ){
      loading = true;

      //显示加载动画
      $('#load-more').html('<i class="fa fa-spinner fa-spin"></i> 正在加载...');

      //发送ajax请求获取文章
      $.ajax({
        url : ajax_url,  //ajax_url是通过wp_localize_script方法传递到前端的WordPress AJAX URL
        type : 'post',
        data : {
          action : 'load_more',  //执行的后台方法名
          page : page,  //页码
          nonce : ajax_nonce  //ajax_nonce是通过wp_localize_script方法传递到前端的WordPress AJAX Nonce
        },
        success : function( response ){
          //在页面上插入新文章
          $('#post-container').append( response );

          //隐藏加载动画
          $('#load-more').html('<i class="fa fa-refresh"></i> 加载更多');

          //更新页码
          page++;

          loading = false;
        }
      });
    }
  });
}); 

3. 编写后台方法

最后,我们需要编写一个后台方法来获取文章并返回到前端。我们可以通过WordPress的WP_Query类来获取文章:

add_action('wp_ajax_load_more', 'load_more_posts');
add_action('wp_ajax_nopriv_load_more', 'load_more_posts');

function load_more_posts(){
  //验证nonce
  $nonce = $_POST['nonce'];
  if( ! wp_verify_nonce($nonce, 'load_more_nonce') ){
    die('非法请求!');
  }

  //获取页码
  $page = $_POST['page'];

  //获取文章
  $args = array(
    'post_type' => 'post',
    'post_status' => 'publish',
    'paged' => $page
  );
  $query = new WP_Query( $args );

  //在页面上输出文章
  if( $query->have_posts() ){
    while( $query->have_posts() ){
      $query->the_post();
      get_template_part( 'content', get_post_format() );
    }
  }

  die();
} 

4. 将ajax_url和ajax_nonce传递到前端

最后一步是将ajax_url和ajax_nonce传递到前端。我们可以使用WordPress的wp_localize_script方法来实现:

add_action('wp_enqueue_scripts', 'my_enqueue_scripts');

function my_enqueue_scripts(){
  //注册脚本
  wp_register_script('my-script', get_stylesheet_directory_uri() . '/js/my-script.js', array('jquery'));

  //将ajax_url和ajax_nonce传递到前端
  wp_localize_script('my-script', 'my_ajax_object', array(
    'ajax_url' => admin_url('admin-ajax.php'),
    'ajax_nonce' => wp_create_nonce('load_more_nonce')
  ));

  //加载脚本
  wp_enqueue_script('my-script');
} 

总结

以上就是一个简单的WordPress加载更多文章功能的实现示例。通过ajax技术和WordPress的WP_Query类,我们可以在不刷新页面的情况下动态加载更多文章,增强用户体验。

阅读文章或者观看视频过程中有任何问题,请下方留言或者联系我Q248758228

大家谈论
    我的见解
    目录