小编典典

WordPress类别发布AJAX分页

ajax

我真的很难找到一种方法来为我的Wordpress帖子创建使用ajax的分页。我找到的解决方案不起作用。

为了在此提供更多信息,下面是一个链接,该链接的底部具有用于分页的项目符号。单击这些后,我希望网站的效果加载新帖子而不触发页面刷新。
http://maxlynn.co.uk/natural-
interaction/category/all/

我的问题是,对于这种效果,是否有任何好的教程可以使您成功。

如果您需要更多信息,请与我们联系。

**更新**

function kriesi_pagination($pages = '', $range = 2) {
 $showitems = ($range * 2)+1;

 global $paged;
 if (empty($paged)) $paged = 1;

 if ($pages == '') {
     global $wp_query;
     $pages = $wp_query->max_num_pages;
     if (!$pages) {
         $pages = 1;
     }
 }

 if (1 != $pages) {
     echo "<div class='pagination'><div class='pagination-container'>";
     if($paged > 2 && $paged > $range+1 && $showitems < $pages) echo "<a href='".get_pagenum_link(1)."'>&laquo;</a>";
     if($paged > 1 && $showitems < $pages) echo "<a href='".get_pagenum_link($paged - 1)."'>&lsaquo;</a>";

     for ($i=1; $i <= $pages; $i++) {
         if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems ))
         {
             echo ($paged == $i)? "<span class='current'>".$i."</span>":"<a href='".get_pagenum_link($i)."' class='inactive' >".$i."</a>";
         }
     }

     if ($paged < $pages && $showitems < $pages) echo "<a href='".get_pagenum_link($paged + 1)."'>&rsaquo;</a>";
     if ($paged < $pages-1 &&  $paged+$range-1 < $pages && $showitems < $pages) echo "<a href='".get_pagenum_link($pages)."'>&raquo;</a>";
     echo "</div>\n</div>\n";
 }

}

这是我正在使用的PHP,如何使用此php创建ajax请求,以使页面不会重新加载?


阅读 254

收藏
2020-07-26

共1个答案

小编典典

您需要做的是防止分页链接上的默认设置,并发送AJAX请求以获取帖子。WordPress以这种方式用于AJAX:您将所有请求发送到wp- admin/admin-ajax.php一个action参数,该参数将标识请求,以便使用and 钩子将其捕获到 functions.php中
wp_ajax_nopriv_my_action``wp_ajax_my_action

因此,基本上,您将在模板文件中执行此操作:

<script type="text/javascript">
    jQuery(document).ready(function($) {
        $('.pagination a').click(function(e) {
            e.preventDefault(); // don't trigger page reload
            if($(this).hasClass('active')) {
                return; // don't do anything if click on current page
            }
            $.post(
                '<?php echo admin_url('admin-ajax.php'); ?>', // get admin-ajax.php url
                {
                    action: 'ajax_pagination',
                    page: parseInt($(this).attr('data-page')), // get page number for "data-page" attribute
                    posts_per_page: <?php echo get_option('posts_per_page'); ?>
                },
                function(data) {
                    $('#content-posts').html(data); // replace posts with new one
                }
            });
        });
    });
</script>

您必须根据模板来更改类名称/属性等。

而在 functions.php 方面:

function my_ajax_navigation() {
    $requested_page = intval($_POST['page']);
    $posts_per_page = intval($_POST['posts_per_page']) - 1;
    $posts = get_posts(array(
        'posts_per_page' => $posts_per_page,
        'offset' => $page * $posts_per_page
    ));
    foreach ($posts as $post) {
        setup_postdata( $post );
        // DISPLAY POST HERE
        // good thing to do would be to include your post template
    }
    exit;
}
add_action( 'wp_ajax_ajax_pagination', 'my_ajax_navigation' );
add_action( 'wp_ajax_nopriv_ajax_paginationr', 'my_ajax_navigation' );

问题是查询所请求页面的帖子(以便我们计算页码和每页帖子选项的偏移量),并使用用于单个帖子的模板显示它们。

您可能还需要操纵浏览器历史记录,为此,您应该检查一下History API

2020-07-26