This is the basic loop
I want to show 20 posts on the search results page. I know we can chang
I find this solution and it works for me.
global $wp_query;
$args = array_merge( $wp_query->query_vars, ['posts_per_page' => 20 ] );
query_posts( $args );
if(have_posts()){
while(have_posts()) {
the_post();
//Your code here ...
}
}
You can limit the number of posts per loop through a $wp_query object. it takes multiple parameters for example:
<?php
$args = array('posts_per_page' => 2, 'post_type' => 'type of post goes here');
$query = new WP_Query( $args );
while( $query->have_posts()) : $query->the_post();
<!-- DO stuff here-->
?>
More on wp_query object here->
Great reference: http://codex.wordpress.org/The_Loop
Just before you call the while statement, you need to query the posts. So:
<?php query_posts('posts_per_page=20'); ?>
<?php while (have_posts()) : the_post(); ?>
<!-- Do stuff... -->
<?php endwhile;?>
EDIT: Sorry about the pagination, try this:
<?php
global $query_string;
query_posts ('posts_per_page=20');
if (have_posts()) : while (have_posts()) : the_post();
?>
<!-- Do stuff -->
<?php endwhile; ?>
<!-- pagination links go here -->
<? endif; ?>
Answers with new query inside template will not work correctly with custom post types.
But documentation offers to hook on any query, check is it main query, and modify it before execution. That can be done inside template functions:
function my_post_queries( $query ) {
// do not alter the query on wp-admin pages and only alter it if it's the main query
if (!is_admin() && $query->is_main_query()) {
// alter the query for the home and category pages
if(is_home()){
$query->set('posts_per_page', 3);
}
if(is_category()){
$query->set('posts_per_page', 3);
}
}
}
add_action( 'pre_get_posts', 'my_post_queries' );
Add 'paged' => $paged Pagination would work!
<?php
$args = array('posts_per_page' => 2, 'paged' => $paged);
$query = new WP_Query( $args );
while( $query->have_posts()) : $query->the_post();
<!-- DO stuff here-->
?>