quiero mostrar más publicaciones en mis subpáginas
Mi código en las funciones.php
function number_of_posts($query)
{
if($query->is_main_query())
{
$paged = $query->get( 'paged' );
if ( ! $paged || $paged < 2 )
{
}
else
{
$query->set('posts_per_page', 24);
}
}
return $query;
}
add_filter('pre_get_posts', 'number_of_posts');
Problema:
En la primera página obtengo una paginación incorrecta. Muestra un enlace a la subpágina 4 pero una subpágina 4 no sale.
Creo que debo agregar algo como esto.
....
if ( ! $paged || $paged < 2 )
{
// show only 10 posts but calculate the pagination with 18 posts
}
.....
es posible?
pieter goosen
Aquí hay una versión modificada de una publicación que hice en WPSE hace un tiempo
DE WPSE
PASO 1
Necesitamos conseguir el posts_per_page
opción configurada desde el back-end (que debe configurarse en 10) y también configure su offset
que vamos a utilizar. Eso será 14
ya que necesitará 24 publicaciones en la página uno y 24 en el resto.
Si no desea modificar la posts_per_page
opción, puede simplemente establecer la variable $ppg
a 10
$ppg = get_option( 'posts_per_page' );
//$ppg = 10;
$offset = 14;
PASO 2
En la página uno, tendrás que restar el offset
a posts_per_page
$query->set( 'posts_per_page', $ppp - $offset );
PASO 3
Debe aplicar su offset
a todas las páginas subsiguientes, de lo contrario obtendrá una repetición de la última publicación de la página en la página siguiente
$offset = ( ( $query->query_vars['paged']-1 ) * $ppp ) - $offset;
$query->set( 'posts_per_page', $ppp );
$query->set( 'offset', $offset );
PASO 4
Por último, debe agregar su compensación a found_posts
de lo contrario, su paginación no mostrará la última página
add_filter( 'found_posts', function ( $found_posts, $query )
{
$offset = 14;
if( $query->is_home() && $query->is_main_query() ) {
$found_posts = $found_posts + $offset;
}
return $found_posts;
}, 10, 2 );
TODOS JUNTOS
Así es como se verá su consulta completa que debería ir a functions.php
add_action('pre_get_posts', function ( $query )
{
if ( !is_admin() && $query->is_main_query() ) {
$ppp = get_option( 'posts_per_page' );
//$ppp = 10;
$offset = 14;
if ( !$query->is_paged() ) {
$query->set( 'posts_per_page', $ppp - $offset );
} else {
$offset = ( ( $query->query_vars['paged']-1 ) * $ppp ) - $offset;
$query->set( 'posts_per_page', $ppp );
$query->set( 'offset', $offset );
}
}
});
add_filter( 'found_posts', function ( $found_posts, $query )
{
$offset = 14;
if( $query->is_main_query() ) {
$found_posts = $found_posts + $offset;
}
return $found_posts;
}, 10, 2 );
<?php
function number_of_posts($query)
{
if($query->is_main_query())
{
$paged = $query->get( 'paged' );
//if page is less than 2 get 10 post on that page (that is on page 1)
if ( ! $paged || $paged < 2 )
{
$query->set('posts_per_page', 10);
}
else
{
$query->set('posts_per_page', 24);
}
}
return $query;
}
add_filter('pre_get_posts', 'number_of_posts');?>
y en la consulta principal donde ha especificado todos los argumentos para Wp_Query. por favor añadir $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
Bueno, supongo que debes modificar el código de paginación en lugar de este, ya que Pagination calculará las páginas en función del número fijo de publicaciones, por lo que te enfrentas a este error.
– Anand Thakkar
9 de enero de 2016 a las 5:38
La paginación de @Anandthakkar funciona con las consultas principales.
$max_num_pages
propiedad que se calcula dividiendo el$found_posts
por la cantidad de publicaciones por página. Todo lo que necesita hacer es modificar el$found_posts
propiedad con lafound_posts
filtrar– Pieter Goosen
9 de enero de 2016 a las 7:45
¿Puede ser más específico sobre lo que quiere decir con “subpáginas”?
–Jim Maguire
10 de enero de 2016 a las 18:22