我真的很难找到一种方法来为我的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)."'>«</a>"; if($paged > 1 && $showitems < $pages) echo "<a href='".get_pagenum_link($paged - 1)."'>‹</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)."'>›</a>"; if ($paged < $pages-1 && $paged+$range-1 < $pages && $showitems < $pages) echo "<a href='".get_pagenum_link($pages)."'>»</a>"; echo "</div>\n</div>\n"; }
}
这是我正在使用的PHP,如何使用此php创建ajax请求,以使页面不会重新加载?
您需要做的是防止分页链接上的默认设置,并发送AJAX请求以获取帖子。WordPress以这种方式用于AJAX:您将所有请求发送到wp- admin/admin-ajax.php一个action参数,该参数将标识请求,以便使用and 钩子将其捕获到 functions.php中 。wp_ajax_nopriv_my_action``wp_ajax_my_action
wp- admin/admin-ajax.php
action
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。