Impostazione dei post per pagina in query_posts
Abbiate pazienza...
Il numero predefinito di post per pagina nell'area amministrativa è 10. Durante alcuni test volevo cambiare i post per pagina per il mio archivio di custom post a 2 (in WP 3.1).
Il problema è che ho solo 4 post, quindi dovrebbero esserci 2 pagine con 2 post ciascuna, ma poiché il valore predefinito è 10, andando su /page/2 viene restituito un errore-404 (presumibilmente perché con 10 post per pagina non ci sarebbe una seconda pagina)
L'unico modo per aggirare questo era impostare il valore predefinito nell'area amministrativa a 1, ma non è davvero ideale poiché ora devo fare una query_post personalizzata per tutti gli archivi dei tipi di post per impostare i post per pagina.
Qualcuno ha un modo migliore per farlo, o qualche idea? Grazie.
archive-project.php:
<?php get_header(); ?>
<?php
// Imposta la query globale
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('Lavori precedenti', '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> Post più vecchi', 'twentyten' ) ); ?></div>
<div class="nav-next"><?php previous_posts_link( __( 'Post più recenti <span class="meta-nav">→</span>', 'twentyten' ) ); ?></div>
</div>
<?php endif; ?>
<?php get_footer(); ?>
registrazione del tipo di post:
register_post_type('project', array(
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'labels' => array(
'name' => __('Progetti', 'fullycharged'),
'singular_name' => __('Progetto', 'fullycharged'),
'all_items' => __('Tutti i Progetti', 'fullycharged'),
'add_new_item' => __('Aggiungi Nuovo Progetto', 'fullycharged'),
'edit_item' => __('Modifica Progetto', 'fullycharged'),
'update_item' => __('Aggiorna Progetto', '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')
));

Ecco ciò che solitamente utilizzo con l'azione pre_get_posts
per modificare un singolo valore della query per una tassonomia o una pagina di categoria:
/**
* Controlla il numero di risultati della ricerca
*/
function custom_posts_per_page( $query ) {
if ( $query->is_tax('miatassonomia') || $query->is_category('miacategoria') ) {
set_query_var('posts_per_page', 9);
}
}
add_action( 'pre_get_posts', 'custom_posts_per_page' );

La documentazione qui http://codex.wordpress.org/Function_Reference/query_posts dà l'impressione che si possa semplicemente "aggiornare" una variabile di query usando la funzione query_posts()
. Questo non ha funzionato nel mio caso, mentre il tuo esempio usando $wp_query->query_vars
sì. Hai idea del perché?

Aggiungendo alle variabili di query esistenti non stiamo riscrivendo nulla. È come dire: "Dammi le tue impostazioni, cambierò un valore, poi le reimposterò." prima di eseguire la query.

C'è una discussione sui forum di supporto di Wordpress.org riguardante questo stesso problema. L'autore originale della discussione ha trovato una soluzione ma deve ancora pubblicarla.
Grazie comunque per il tuo aiuto.
