Configurando posts por página en query_posts
Tengan paciencia aquí...
El número predeterminado de posts por página en el área de administración es 10. Durante algunas pruebas quise cambiar los posts por página para mi archivo de posts personalizados a 2 (en WP 3.1).
El problema es que solo tengo 4 posts, así que debería haber 2 páginas con 2 posts en cada una, pero como el valor predeterminado es 10, al ir a /page/2 devuelve error-404 (suponiendo que con 10 posts por página no habría una segunda página)
La única forma de solucionar esto fue establecer el valor predeterminado en el área de administración a 1, pero no es realmente ideal ya que ahora tengo que hacer una query_post personalizada para todos los archivos de tipos de post para establecer los posts por página.
¿Alguien tiene una mejor manera de hacer esto, o alguna idea? Gracias.
archive-project.php:
<?php get_header(); ?>
<?php
// Consulta global para mostrar 2 posts por página
global $wp_query;
query_posts(array_merge($wp_query->query, array(
'paged' => get_query_var('paged'),
'posts_per_page' => 2
)));
?>
<h1 class="title"><?php _e('Trabajos anteriores', 'fullycharged'); ?></h1>
<?php if (have_posts()): while(have_posts()): the_post();?>
<a href="<?php the_permalink(); ?>" id="post-<?php the_ID(); ?>" <?php post_class('launch col col-' . $i); ?>>
<span class="project-title"><?php the_title(); ?></span>
<?php the_content(); ?>
</a>
<?php endwhile; endif; ?>
<?php if ($wp_query->max_num_pages > 1): ?>
<div id="nav-below" class="navigation">
<div class="nav-previous"><?php next_posts_link( __( '<span class="meta-nav">←</span> Posts antiguos', 'twentyten' ) ); ?></div>
<div class="nav-next"><?php previous_posts_link( __( 'Posts nuevos <span class="meta-nav">→</span>', 'twentyten' ) ); ?></div>
</div>
<?php endif; ?>
<?php get_footer(); ?>
registrar tipo de post:
register_post_type('project', array(
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'labels' => array(
'name' => __('Proyectos', 'fullycharged'),
'singular_name' => __('Proyecto', 'fullycharged'),
'all_items' => __('Todos los Proyectos', 'fullycharged'),
'add_new_item' => __('Añadir Nuevo Proyecto', 'fullycharged'),
'edit_item' => __('Editar Proyecto', 'fullycharged'),
'update_item' => __('Actualizar Proyecto', 'fullycharged')
),
'menu_icon' => get_stylesheet_directory_uri() . '/images/monitor-off.png',
'menu_position' => 5,
'public' => true,
'publicly_queryable' => true,
'exclude_from_search' => false,
'rewrite' => array('slug' => 'work', 'with_front' => false),
'supports' => array('title', 'editor', 'thumbnail', 'custom-fields')
));

Esto es lo que suelo usar con la acción pre_get_posts
para cambiar un valor único de consulta para una página de taxonomía o categoría:
/**
* Controlar el número de resultados de búsqueda
*/
function custom_posts_per_page( $query ) {
if ( $query->is_tax('mytaxonomy') || $query->is_category('mycategory') ) {
set_query_var('posts_per_page', 9);
}
}
add_action( 'pre_get_posts', 'custom_posts_per_page' );

La documentación aquí http://codex.wordpress.org/Function_Reference/query_posts da la impresión de que puedes simplemente "actualizar" una variable de consulta usando la función query_posts()
. Eso no funcionó para mí, pero tu ejemplo usando $wp_query->query_vars
sí. ¿Alguna idea de por qué?

Al agregar a las variables de consulta existentes no estamos reescribiendo nada. Esto es como decir: "Dame tus configuraciones, voy a cambiar un valor, luego las restableceré." antes de ejecutar la consulta.

Hay una discusión en los foros de soporte de Wordpress.org sobre este problema exacto. El autor de la publicación en esa discusión ha encontrado una solución pero aún no la ha compartido.
Gracias de todas formas por tu ayuda.
