Cambiar número de posts por página en Wordpress

  • Autor Autor colorMagento
  • Fecha de inicio Fecha de inicio
C

colorMagento

Curioso
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Hola muy buenas,

Tengo un problema con el panel de administración de Wordpress, resulta que tengo un blog con diferentes categorías divididas en pestañas. En cada una de ellas siempre se han mostrado en miniatura unas 9 entradas por página, cada entrada con un enlace a post. Mi sorpresa llegó cuando intenté cambiar este valor desde el wp-admin > Ajustes > Lectura > Número máximo de entradas a mostrar en el sitio; una vez pongo cualquier otro número y pulso "Guardar cambios" la página se actualiza pero sigue mostrando que el valor es igual a 9 sin mostrar ningún error ni alerta y por supuesto, sin haber ningún cambio en mi blog.

No sé a qué puede ser esto debido, quizá algún bug de mi versión de Wordpress (v. 3.9.2), quizá algún plugin u otra parte de mi código que esté forzando que siempre sea 9. La verdad, no lo sé :S.

También he intentado modificar varios PHPs para forzar la variable que utiliza pero sin resultado alguno. He probado ya varios caminos:

- Localizar la variable $post_per_page, que parecía ser la que guardaba este valor y meterle cualquier otro número a pelo. Hay un montón de archivos .php con esta variable, en todos los que he probado este método no he obtenido resultado alguno.

- Modificar el archivo /midominio.com/web/htdocs/wp-content/themes/gonzo/loop-blog-style-2.php que parece imprimir los posts y añadirle una wp_query propia mientras comento el bucle que parece que imprime los posts. De esta forma sí que consigo cambiar el número de posts pero no parece la forma correcta, ya que lo que hace es que de los 9 posts originales, sólo muestra 6 (en este caso el número que le indico) y el resto de los de esa página los oculta en vez de moverlos a la página siguiente. Además esta consulta muestra entradas repetidas en varias páginas, por lo que esta solución no me vale, pongo a continuación el archivo original y mi código:

loop-blog-style-2.php original:

Insertar CODE, HTML o PHP:
<?php 
if ( have_posts() ) : while ( have_posts() ) : the_post(); 
$omc_review_enable =  get_post_meta(get_the_ID(), 'omc_review_enable', true);
$omc_final_score =  get_post_meta(get_the_ID(), 'omc_final_score', true);
$omc_final_percentage = $omc_final_score * 20 ;
$format = get_post_format();
if ( false === $format )
$format = 'standard';
?>		

<article class="omc-blog-two omc-half-width-category" id="post-<?php the_ID(); ?>">		
    <?php 
      global $h_sticky;
      global $displayed;
      $home_page = get_option ('shareit_home', 0);
      if (!$displayed and $h_sticky && $home_page == 1) {
        echo $h_sticky;
        $displayed = true;
      } 
    ?>	
	<div class="omc-resize-290 omc-blog">		

		<?php $category = get_the_category(); ?>
		
		<h3 class="omc-blog-two-cat"><a href="<?php echo home_url(); echo ('/?cat='.$category[0]->term_id); ?>"><?php echo $category[0]->cat_name; ?></a></h3>
		
		<?php if ($omc_review_enable == 1) { ?><span class="omc-blog-two-stars-under leading-article"><span class="omc-blog-two-stars-over leading-article" style="width:<?php echo $omc_final_percentage; ?>%"></span></span><?php } ?>
		
		<a href="<?php the_permalink();?>" >
		
			<?php if ($format == 'video' || $format == 'audio') { ?><span class="module-a-video-icon-big omc-half-width-icon omc-module-b-left"></span><?php } ?>
			
			<?php if (has_post_thumbnail()) { 
			
				the_post_thumbnail('half-landscape', array('class' => 'omc-image-resize')); 
				
			} else {
			
				echo('<img src="'.get_template_directory_uri().'/images/no-image-half-landscape.png" class="omc-image-resize" alt="no image" />');
				
			} ?>

		</a>
		
	</div><!-- /omc-resize-290 -->
	
	<div class="omc-blog-two-text">
	
		<h2><a href="<?php the_permalink();?>"><?php the_title();?></a></h2>

		<p class="omc-blog-two-date"><?php the_time('F jS, Y') ?> </p>
		
		<p class="omc-blog-two-exceprt" ><?php wpe_excerpt('blog_2', 'wpe_excerptmore'); ?></p>
		
		<br class="clear" />
	
	</div><!-- /omc-blog-two-text -->
	
</article>

<?php endwhile;  endif; ?> 

<br class="clear" />

<?php kriesi_pagination(); wp_reset_query(); ?>

Y estas mis modificaciones (sólo las primeras líneas):

Insertar CODE, HTML o PHP:
<?php
//Obtengo categoría
$cate = get_the_category();
$cat_id = $cate[0]->term_id;

//Valor de entradas por páginas introducido por mí a palanca
$num_entries = 6;

//Mi consulta "custom"
$specified_cat = new wp_query( 'cat='.$cat_id.'&posts_per_page='.$num_entries );
if ( have_posts() ) : while($specified_cat->have_posts()) : $specified_cat->the_post();

//Comentario para que no se ejecuten ambos loop's
//if ( have_posts() ) : while ( have_posts() ) : the_post();


/*
.
.
.

El resto del archivo está intacto
*/
?>

Alguna sugerencia sobre este problema y que pueda iluminarme sería bien recibida.
Gracias de antemano, un saludo.
 
¿Reseteaste la caché? :distant:
 
Sí, eso lo hice y no parece problema de caché.
 
Sí, eso lo hice y no parece problema de caché.

Intenta desde otro navegador, si no funciona, coloca el plugin wp clean y dale a delete all y luego a optimizar 🙂, haber si esto aregla tu problema
 
También probé esa opción y nada, aun actualizando la caché sigue sin actualizarme el número de entradas por página. Desde otros navegadores más de lo mismo; parece que es algún tipo de bug.

He seguido investigando un poco y he comprobado que si entro en la base de datos, y cambio el valor "post_per_page" (id:23) de la tabla "wp_options" por el número de entradas que me interesa y recargo mi blog sí que me muestra los posts que quiero. Esto parecía ser una solución, pero me di cuenta enseguida que tan pronto hacía algún cambio en el wp-admin se me jorobaba el invento y volvía a mostrarme los dichosos 9 posts por página.

Esto último parece que sucede debido a que esta variable tiene por defecto la opción: autoload=yes. Probé a cambiar este parámetro a "no" también desde la BD pero volvía a chafarmelo cada actualización del panel.

Estoy intentando de alguna manera que esta tabla no se actualice y así al menos me mantiene el valor que le ponga por el dbadmin.

¿Alguna idea de cómo hacerlo?

- - - Actualizado - - -

Finalmente encontré una solución más o menos casera.

PHP:
$value = 6;
update_option( 'posts_per_page', $value );

Con esta línea al principio del fichero loop-blog-style-2.php actualizo el valor post_per_page en la BD y me cercioro que en el momento inmediatamente después se ejecute el código que imprime el array de entradas.

Para más información de la función update_option pincha aquí.

Como ya digo es bastante casero, pero no encuentro otra camino de momento.
 
Última edición:
Atrás
Arriba