Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
function init_load_posts() {
// Grid Loop Query Args
add_action( 'pre_get_posts', 'be_grid_loop_query_args' );
}
add_action( 'init', 'init_load_posts' );
function be_grid_loop_query_args( $query ) {
//if( $query->is_main_query() && !is_admin() ) {
// First Page
$page = $_POST['page'];
if( ! $page ) {
$query->set( 'posts_per_page', 7 );
// Other Pages
} else {
$query->set( 'posts_per_page', 2 );
// Offset is posts on first page + posts on internal pages * ( current page - 2 )
// example $args['offset'] = 5 + 2 * ( $page - 2) - 5 posts on home page, 2 posts on subsequent pages
$query->set( 'offset', 7 + 2 * ( $page - 2 ) );
}
//}
}
/**
* Javascript for Load More
*
*/
function be_load_more_js() {
global $wp_query;
$args = array(
'nonce' => wp_create_nonce( 'be-load-more-nonce' ),
'url' => admin_url( 'admin-ajax.php' ),
'query' => $wp_query->query,
);
wp_enqueue_script( 'be-load-more', get_stylesheet_directory_uri() . '/js/load-more.js', array( 'jquery' ), '1.0', true );
wp_localize_script( 'be-load-more', 'beloadmore', $args );
}
add_action( 'wp_enqueue_scripts', 'be_load_more_js', 10 );
/**
* AJAX Load More
*
*/
/*
* Use your query here. Remember that if you make a call to $custom->the_post()
* you'll need to reset the post data after the loop by calling wp_reset_postdata().
*/
function be_ajax_load_more() {
check_ajax_referer( 'be-load-more-nonce', 'nonce' );
$args = isset( $_POST['query'] ) ? $_POST['query'] : array();
$args['post_type'] = isset( $args['post_type'] ) ? $args['post_type'] : 'post';
$args['paged'] = $_POST['page'];
$args['post_status'] = 'publish';
$loop = new WP_Query( $args );
if( $loop->have_posts() ): while( $loop->have_posts() ): $loop->the_post();
echo '<h1>' . the_title() . '</h1>';
echo '<p>' . $args['paged'] . '</p>';
endwhile; endif; wp_reset_postdata();
$data = ob_get_clean();
wp_send_json_success( $data );
}
add_action( 'wp_ajax_be_ajax_load_more', 'be_ajax_load_more' );
add_action( 'wp_ajax_nopriv_be_ajax_load_more', 'be_ajax_load_more' );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.