注意,我现在不能真正测试这个。然而,我认为可以从您的代码中改进以下几点。
首先,如果我们阅读codex 或者一些tips on using ajax 我们可以设置一个ajax回调函数,该函数不指向必须引导WordPress加载函数的文件。
我将假设您的所有脚本都在JS文件中,并且已正确排队:
// embed the javascript file that makes the AJAX request
wp_enqueue_script( \'wpa-95258-ajax-request\', plugin_dir_url( __FILE__ ) . \'js/ajax.js\', array( \'jquery\' ) );
// declare the URL to the file that handles the AJAX request (wp-admin/admin-ajax.php)
wp_localize_script( \'wpa-95258-ajax-request\', \'wpa-95258-ajax\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' ) ) );
使用
wp_localize_script
我们可以将一些变量传递给脚本对象,然后该对象将在脚本中可用。我们将使用此
.ajax
URL参数。我们还需要
action
参数,因为WordPress将查找
// this hook is fired if the current viewer is not logged in
do_action( \'wp_ajax_nopriv_\' . $_REQUEST[\'action\'] );
// if logged in:
do_action( \'wp_ajax_\' . $_POST[\'action\'] );
因此,我们可以稍后使用它将回调函数附加到任何ajax操作。首先我改编了你的
.ajax
要执行操作并使用WordPress ajax url:
function _batchhandler() {
var getamount = localStorage.getItem(\'amount\');
console.log(\'amount of posts to retrive \' + JSON.parse(getamount));
// Ajax call
$.ajax({
type: \'GET\',
data: {
posts: getamount,
page: page,
category: \'work\',
action: \'batchhandler\' // use this to add a callback
},
dataType: \'html\',
url: wpa-95258-ajax.ajaxurl, //from localize script
beforeSend: function() {
_setHeader;
if( page != 1 ) {
console.log(\'Loading\');
// Show the preloader
$(\'body\').prepend(\'<div class="preloader"><span class="rotate"></span></div>\');
}
// If we reach the end we hide the show more button
if( page >= total ) {
$(\'.load\').hide();
}
},
success: function(data) {
console.log(page);
var scroll = ($(\'.thumb\').height() * posts);
// If thumbs exist append them
if( data.length ) {
// Append the data
$(\'#batch\').append(data);
// Remove the crappy width and height attrs from the image * Generated by WP *
$(\'img\').removeAttr(\'height\').removeAttr(\'width\');
// Animate each new object in a nice way
(function _showitem() {
$(\'#batch .thumb:hidden:first\').addClass(\'show\', 80, _showitem);
// On the last request do load any more
loading = false;
})();
// Remove the preloader
$(\'.preloader\').fadeOut(200, function() {
$(\'.preloader\').remove();
});
}
// return false;
},
complete: function() {
// Delete storage
localStorage.clear();
// Update the scroller to match the updated content length
if (scroller)
setTimeout("scroller.refresh()", 300);
// Initalize the load more button
_clickhandler();
},
error: function() {
console.log(\'No page found\');
}
});
}
现在我们有了一个挂钩,可以在没有引导加载程序的情况下构建回调函数了。我还建议摆脱
query_posts()
. 这对查询来说是不可靠的,通常建议在这里使用
new WP_Query
.
我已经调整了你的batchloop。php将改为回调函数:
function wp_ajax_batchhandler_callback(){
// Our variables
$posts = (isset($_GET[\'numPosts\'])) ? $_GET[\'numPosts\'] : 0;
$page = (isset($_GET[\'pageNumber\'])) ? $_GET[\'pageNumber\'] : 0;
$category = (isset($_GET[\'category_name\'])) ? $_GET[\'category_name\'] : 0;
var_dump($posts);
$args = array(
\'posts_per_page\' => $posts,
\'category_name\' => $category,
\'post_status\' => \'publish\',
\'orderby\' => \'date\',
\'order\' => \'DESC\',
\'paged\' => $page
);
$ajax_query = new WP_query($args);
// our loop
if ($ajax_query->have_posts()) {
while ($ajax_query->have_posts()){
$ajax_query->the_post();
get_template_part( \'thumbs\', get_post_format() );
}
}
// unset($page, $posts, $category);
wp_reset_postdata();
}
add_action( \'wp_ajax_nopriv_batchhandler\', \'batchhandler_callback\' ); //logged out users
add_action( \'wp_ajax_batchhandler\', \'batchhandler_callback\' ); //logged in users
正如我所说,我没有测试这个,但看起来您正在使用:
$page = (isset($_GET[\'pageNumber\'])) ? $_GET[\'pageNumber\'] : 0;
获取查询中使用的页码。但是,您没有在中发送页码
.ajax
所以我怀疑你是否能得到正确的分页。然而,您现在应该掌握在WordPress中进行ajax调用的适当方法,我认为可以通过传递pageNumber变量来修复分页。