Respuestas de foro creadas

Viendo 8 respuestas - de la 16 a la 23 (de un total de 23)
  • Iniciador del debate SerGi

    (@sdesergi)

    Creo que no me explico. Por si acaso lo pruebo de nuevo.

    El hecho de que el nº de páginas de la paginación responda a los ajustes o a los parámetros de la función es irrelevante. Ese no es el problema y funciona tal como dices, es decir, siguiendo la configuración marcada en general desde «Ajustes» mientras no se especifique otra cosa mediante código.

    El problema era que, teniendo 10 entradas en la categoria ID = 3, de las 30 entradas que tenia el blog en total, el nuevo query ceñido a mostrar la categoria ID = 3 se paginaba fabricando espacio para las 30 entradas en vez de las 10. Daba igual si en cada página mostraba 3, 6 u 8, eso funcionaba correctamente, pero siempre se paginaban las páginas necesarias para meter las 30 entradas totales del blog, en vez de las 10 entradas que debía mostrar.

    Bueno lo volví a explicar por que con la última respuesta no me quedó claro de que se entendiera. Si no es así y no surgen más aportaciones creo que debería de cerrar esto, no? Dudo por que en realidad, aunque yo lo haya solucionado mediante pre_get_posts, sigo pensando en que hay un error en el códex. Dejo una semanita.

    ¡Y vuelvo a agradeceros las respuestas!
    Un saludo

    Iniciador del debate SerGi

    (@sdesergi)

    Los parámetros de cat, posts_per_page y paged ya los probé en su dia usando todas las posibles combinaciones. Almendron, ese código que compartes es el que acabé por usar pero es necesario probarlo metiendo entradas ajenas a esa categoria para darse cuenta de que la paginación responde al nº total de posts de todo el blog, en vez de los post de esa categoria. Seguro que te ha funcionado? En ese caso lo entendería menos pues a mi, en local, con todo pelado y de serie, tampoco me funcionaba.

    Finalmente terminé por controlar el contenido desde el archivo Functions.php, con el código que se describe en este enlace del códex o en la sección para desarrolladores.

    Me gustaba la idea de controlar el contenido desde cada archivo.php y dejar el functions.php en paz pero… el pre_get_posts funciona con la paginación a la perfección metiendo en la función los condicionales que te dé la gana ¡y listos! Los pros y los contras de hacerlo de una u otra forma los desconozco por lo que, de no haberlos, daria el tema por zanjado. Aunque sigo pensando en que hay un error en esa función del LOOP con la paginación…

    ¡Saludos!

    Iniciador del debate SerGi

    (@sdesergi)

    Pufff menudo lio, hice ya como 40 index.php de pruebas…

    Vuelvo a copiar el index.php tal cual lo tengo en la web

    <?php
    /**
     * The main template file
     *
     * This is the most generic template file in a WordPress theme
     * and one of the two required files for a theme (the other being style.css).
     * It is used to display a page when nothing more specific matches a query.
     * E.g., it puts together the home page when no home.php file exists.
     *
     * @link https://codex.wordpress.org/Template_Hierarchy
     *
     * @package WordPress
     * @subpackage Twenty_Seventeen
     * @since 1.0
     * @version 1.0
     */
    
    get_header(); ?>
    
    <div class="wrap">
    
    	<div id="primary" class="content-area">
    		<div id="main" class="site-main" role="main">
    
    			<?php
          
          $query = new WP_Query(array('cat' => 3, 'paged' => $paged));  
          if ($query-> have_posts()):
    
    				/* Start the Loop */
    				while ($query-> have_posts()): $query-> the_post();
    
    					/*
    					 * Include the Post-Format-specific template for the content.
    					 * If you want to override this in a child theme, then include a file
    					 * called content-___.php (where ___ is the Post Format name) and that will be used instead.
    					 */
    					get_template_part( 'template-parts/post/content', get_post_format() );
    
    				endwhile;
    
    				the_posts_pagination( array(
    					'prev_text' => twentyseventeen_get_svg( array( 'icon' => 'arrow-left' ) ) . '<span class="screen-reader-text">' . __( 'Previous page', 'twentyseventeen' ) . '</span>',
    					'next_text' => '<span class="screen-reader-text">' . __( 'Next page', 'twentyseventeen' ) . '</span>' . twentyseventeen_get_svg( array( 'icon' => 'arrow-right' ) ),
    					'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'twentyseventeen' ) . ' </span>',
    				) );
    
    			else :
    
    				get_template_part( 'template-parts/post/content', 'none' );
    
    			endif;
    			?>
    
    		</div><!-- #main -->
    	</div><!-- #primary -->
    	<?php get_sidebar(); ?>
    </div><!-- .wrap -->
    
    <?php get_footer();

    Disculpad la confusión 😛

    Iniciador del debate SerGi

    (@sdesergi)

    Ups…

    Lo copié incompleto. Rectifico la línea del while…
    while ($query-> have_posts()): $query-> the_post();

    Iniciador del debate SerGi

    (@sdesergi)

    Bien, entonces sigamos 🙂

    Ahí va el index.php más básico que tengo (el de las pruebas que hice esta mañana):

    <?php
    /**
     * The main template file
     *
     * This is the most generic template file in a WordPress theme
     * and one of the two required files for a theme (the other being style.css).
     * It is used to display a page when nothing more specific matches a query.
     * E.g., it puts together the home page when no home.php file exists.
     *
     * @link https://codex.wordpress.org/Template_Hierarchy
     *
     * @package WordPress
     * @subpackage Twenty_Seventeen
     * @since 1.0
     * @version 1.0
     */
    
    get_header(); ?>
    
    <div class="wrap">
    	<?php if ( is_home() && ! is_front_page() ) : ?>
    		<header class="page-header">
    			<h1 class="page-title"><?php single_post_title(); ?></h1>
    		</header>
    	<?php else : ?>
    	<header class="page-header">
    		<h2 class="page-title"><?php _e( 'Posts', 'twentyseventeen' ); ?></h2>
    	</header>
    	<?php endif; ?>
    
    	<div id="primary" class="content-area">
    		<main id="main" class="site-main" role="main">
    
    			<?php
          $query = new WP_Query(array('cat' => 3, 'paged' => $paged));
    			if ( have_posts() ) :
    
    				/* Start the Loop */
    				while ( have_posts() ) : the_post();
    
    					/*
    					 * Include the Post-Format-specific template for the content.
    					 * If you want to override this in a child theme, then include a file
    					 * called content-___.php (where ___ is the Post Format name) and that will be used instead.
    					 */
    					get_template_part( 'template-parts/post/content', get_post_format() );
    
    				endwhile;
    
    				the_posts_pagination( array(
    					'prev_text' => twentyseventeen_get_svg( array( 'icon' => 'arrow-left' ) ) . '<span class="screen-reader-text">' . __( 'Previous page', 'twentyseventeen' ) . '</span>',
    					'next_text' => '<span class="screen-reader-text">' . __( 'Next page', 'twentyseventeen' ) . '</span>' . twentyseventeen_get_svg( array( 'icon' => 'arrow-right' ) ),
    					'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'twentyseventeen' ) . ' </span>',
    				) );
    
    			else :
    
    				get_template_part( 'template-parts/post/content', 'none' );
    
    			endif;
    			?>
    
    		</main><!-- #main -->
    	</div><!-- #primary -->
    	<?php get_sidebar(); ?>
    </div><!-- .wrap -->
    
    <?php get_footer();

    Poniendo el Loop en el home.php tampoco funciona

    Iniciador del debate SerGi

    (@sdesergi)

    Sisi, e incluso he ido probando lo que se me ocurria. La categoria funciona, el problema era que las entradas se multiplicaban como hamsters y luego que aparecian «con paginaciones vacías de más».

    ¡Os agradezco las soluciones! Aunque no sabria cómo hacerlo seguro que si me pongo no es complicado. Supongo que establecer una página estática como inicio seria otra posible solución pero perdiendo la funcionalidad característica que tiene la plantilla en su Frontpage y que no sabría emular (y menos en el backend).

    Creo que me conformaré con mostrar un número limitado de entradas en el index.php con un enlace al final del estilo… «ver todoas las noticias». Ya estoy conencido de que será mucho mejor 🙂

    ¡Gracias de nuevo y Un saludo!

    Iniciador del debate SerGi

    (@sdesergi)

    Buenas,

    Hoy hice los deberes: limpié datos de navegación e instalé un wordpress en local desde 0, última versión, plantilla Twenty Seventeen. 0 plugins (ni akismet o Hello Dolly), 0 modificaciones. Base de datos nueva no compartida. Xampp actualizado a 7.1.7 (antes corría con la 5.6.24). Ajustes y configuraciones intactas. A partir de ahí creé 1 categoria con 20 entradas y 3 categorias con 10 entradas cada una. Al comprobar la paginación funcionaba correctamente. Todo bien.

    Modifico el Loop substituyendo solamente las siguientes líneas:

    			<?php
    			if ( have_posts() ) :
    
    				/* Start the Loop */
    				while ( have_posts() ) : the_post();

    Por éstas otras:

    			<?php
          $query = new WP_Query( array( 'cat' => 1, 'posts_per_page' => 10, 'paged' => $paged ) );  
          if ($query-> have_posts()):
    
    				/* Start the Loop */
    				while ($query-> have_posts()): $query-> the_post();

    Resultado: páginas vacías con el mensaje «nada encontrado». Solo estaban llenas las dos páginas correspondientes a las 20 entradas a mostrar, sin embargo habia 5 páginas dónde navegar.

    Hice pruebas configurando enlaces permanentes, cambiando la categoría por defecto, añadiendo en el código el parámetro que especifica también el nº de entradas por página (por aquéllo de copiar intacto el código que te aconsejan), cambiando la categoría a filtrar… y una variedad de cambios y pruebas que se acostumbran a hacer cuando vamos perdidos, aún sabiendo que poco o nada tienen que ver con la solución.

    Entonces… ¿es fallo del códex? Si es fallo mio no tengo ni idea de a dónde más puedo buscar.

    Iniciador del debate SerGi

    (@sdesergi)

    ¡Gracias a los dos!

    LGrusin el argumento paged es el que funciona. Por fin se paginan las entradas sin repetir contenido, solo que el nº de paginaciones sigue respondiendo al nº de entradas totales en el blog en vez del nº de entradas de esa categoria en concreto. Como la cantidad siempre es mayor tenemos como resultado páginas vacías, sin entradas en los últimos números.

    Sigo buscando por qué debo estar cerca ^^

Viendo 8 respuestas - de la 16 a la 23 (de un total de 23)