Impostazione dei post per pagina in query_posts

8 feb 2011, 18:25:11
Visualizzazioni: 24.2K
Voti: 1

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">&larr;</span> Post più vecchi', 'twentyten' ) ); ?></div>
            <div class="nav-next"><?php previous_posts_link( __( 'Post più recenti <span class="meta-nav">&rarr;</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')
));
7
Commenti

Posso vedere il codice che stai usando? Stai chiamando get_query_var( 'page' );?

designpx designpx
8 feb 2011 18:40:23

@Designpx

global $paged; query_posts(array_merge($wp_query->query, array( 'paged' => $paged, 'posts_per_page' => 2 ))); Queste sono tutte le modifiche che ho apportato alla query, nessun get_query_var( 'page' );, ma ho usato la variabile globale $paged perché la paginazione degli archivi utilizza $paged invece di $page

Scusa per la formattazione non ottimale

Andrew Lawson Andrew Lawson
8 feb 2011 19:14:33

@Andre Lawson, Hai una pagina normale e un custom post type con lo stesso slug? Ad esempio, supponi di avere una pagina chiamata "Ricette" con slug "/ricette" e poi hai un post type chiamato "Ricette" con la regola di rewrite impostata su 'rewrite' => 'ricette'? Se è così, stai confondendo WordPress con i tuoi link

eileencodes eileencodes
8 feb 2011 20:26:46

Nessuna pagina regolare su /recipes, ho solo registrato il post personalizzato nel file functions.php.

Riesco a ottenere la prima pagina del mio archivio ricette su /recipes, ma quando cambio il valore di posts_per_page nel file archive-recipes.php in qualcosa di diverso dal valore in WP-Admin -> Impostazioni -> Lettura ottengo un errore "la pagina 'n' non dovrebbe esistere (quando invece dovrebbe, secondo il mio posts_per_page modificato)".

Non credo sia il mio codice in archive-recipes.php perché inserire exit; all'inizio del file non fa nulla

Andrew Lawson Andrew Lawson
8 feb 2011 20:41:15

@eileen @designpx Quindi in altre parole, la richiesta a /recipes mostra la prima pagina dell'archivio, /recipes/page/2 non raggiunge il file template archive-recipes.php perché la pagina 2 non dovrebbe esistere, in base alle impostazioni in WP-Admin -> Impostazioni -> Lettura

Andrew Lawson Andrew Lawson
8 feb 2011 21:07:30

@Andrew Lawson - Non so quale sia il problema, le impostazioni in wp-admin non dovrebbero contare se posts_per_page e $paged sono impostati. Proverei a sostituire 'paged' => $paged con 'paged' => get_query_var('paged') e vedere se risolve. Altrimenti pubblicherei tutto il codice che hai in archives-recipes.php

eileencodes eileencodes
8 feb 2011 21:21:00

@eileen get_query_var('paged') non fa differenza, quindi ho aggiunto il mio codice alla domanda originale, ma non credo che aiuterà poiché la richiesta work/page/2 non arriva nemmeno al file template

Andrew Lawson Andrew Lawson
8 feb 2011 21:36:31
Mostra i restanti 2 commenti
Tutte le risposte alla domanda 2
3

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' );
6 lug 2011 16:46:06
Commenti

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é?

Niko Nyman Niko Nyman
8 set 2011 11:15:53

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.

Kevinleary.net Kevinleary.net
31 lug 2012 21:51:27

Mi chiedo solo perché query_posts() non sembri funzionare in questo modo per consentire la modifica di un singolo valore, nonostante la documentazione dica il contrario?

Niko Nyman Niko Nyman
24 set 2012 13:08:41
0

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.

http://wordpress.org/support/topic/error-404-on-pagination-when-changing-posts_per_page-on-query_posts

Grazie comunque per il tuo aiuto.

8 feb 2011 23:18:07