Setarea numărului de articole pe pagină în query_posts

8 feb. 2011, 18:25:11
Vizualizări: 24.2K
Voturi: 1

Aveți puțină răbdare...

Numărul implicit de articole pe pagină în zona de administrare este 10. În timpul unor teste, am vrut să schimb numărul de articole pe pagină pentru arhiva mea de postări personalizate la 2 (în WP 3.1).

Problema este că am doar 4 postări, deci ar trebui să fie 2 pagini cu câte 2 postări pe fiecare, dar pentru că valoarea implicită este 10, accesarea /page/2 returnează eroarea-404 (presupunând că cu 10 postări pe pagină nu ar exista o a doua pagină)

Singura modalitate de a rezolva acest lucru a fost să setez valoarea implicită în zona de administrare la 1, dar nu este ideal deoarece acum trebuie să fac un query_posts personalizat pentru toate arhivele de tip postare pentru a seta numărul de postări pe pagină.

Are cineva o modalitate mai bună de a face acest lucru sau alte idei? Mulțumesc.

archive-project.php:

<?php get_header(); ?>

    <?php
        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('Lucrări anterioare', '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> Articole mai vechi', 'twentyten' ) ); ?></div>
            <div class="nav-next"><?php previous_posts_link( __( 'Articole mai noi <span class="meta-nav">&rarr;</span>', 'twentyten' ) ); ?></div>
        </div>
    <?php endif; ?>

<?php get_footer(); ?>

înregistrare tip postare:

register_post_type('project', array(
    'capability_type' => 'post',
    'has_archive' => true,
    'hierarchical' => false,
    'labels' => array(
        'name' => __('Proiecte', 'fullycharged'),
        'singular_name' => __('Proiect', 'fullycharged'),
        'all_items' => __('Toate Proiectele', 'fullycharged'),
        'add_new_item' => __('Adaugă Proiect Nou', 'fullycharged'),
        'edit_item' => __('Editează Proiect', 'fullycharged'),
        'update_item' => __('Actualizează Proiect', '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
Comentarii

Pot să văd codul pe care îl folosești? Apelezi 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 ))); Acestea sunt toate modificările aduse interogării, nu am folosit get_query_var( 'page' );, dar am utilizat variabila globală $paged deoarece paginarea arhivelor folosește $paged în loc de $page

Îmi cer scuze pentru formatarea proastă

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

@Andre Lawson, Ai o pagină obișnuită și un tip de postare personalizată cu același slug? De exemplu, să presupunem că ai o pagină numită "Rețete" cu slug-ul "/retete" și apoi ai un tip de postare numit "Rețete" unde regula de rescriere este setată la 'rewrite' => 'retete'? Dacă da, încurci WordPress cu linkurile tale

eileencodes eileencodes
8 feb. 2011 20:26:46

Nu există o pagină obișnuită la /recipes, doar am înregistrat postul personalizat în fișierul functions.php.

Pot accesa prima pagină a arhivei mele de rețete la /recipes, dar când schimb valoarea posts_per_page în fișierul archive-recipes.php la altceva decât valoarea din WP-Admin -> Settings -> Reading, rezultă o eroare "pagina 'n' nu ar trebui să existe (când de fapt ar trebui, conform posts_per_page modificat)".

Nu cred că e o problemă cu codul din archive-recipes.php deoarece plasând exit; în partea de sus a fișierului nu face nimic

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

@eileen @designpx Deci, cu alte cuvinte, cererea către /recipes afișează prima pagină a arhivei, /recipes/page/2 nu ajunge la fișierul șablon archive-recipes.php deoarece pagina 2 nu ar trebui să existe, conform setărilor din WP-Admin -> Settings -> Reading

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

@Andrew Lawson - Nu știu care este problema, setările din wp-admin nu ar trebui să conteze dacă posts_per_page și $paged sunt setate. Aș încerca să înlocuiesc 'paged' => $paged cu 'paged' => get_query_var('paged') și să văd dacă asta rezolvă problema. Altfel, aș posta tot codul pe care îl ai în archives-recipes.php

eileencodes eileencodes
8 feb. 2011 21:21:00

@eileen get_query_var('paged') nu face nicio diferență, așa că am adăugat codul meu la întrebarea originală, dar nu cred că va ajuta deoarece cererea work/page/2 nici măcar nu ajunge în fișierul template

Andrew Lawson Andrew Lawson
8 feb. 2011 21:36:31
Arată celelalte 2 comentarii
Toate răspunsurile la întrebare 2
3

Iată ce folosesc de obicei acțiunea pre_get_posts pentru a modifica o singură valoare a interogării pentru o pagină de taxonomie sau categorie:

/**
 * Controlează numărul de rezultate ale căutării
 */
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' );
6 iul. 2011 16:46:06
Comentarii

Documentația de aici http://codex.wordpress.org/Function_Reference/query_posts lasă impresia că poți pur și simplu să "actualizezi" o singură variabilă de interogare folosind funcția query_posts(). Nu a funcționat pentru mine, dar exemplul tău folosind $wp_query->query_vars funcționează. Ai vreo idee de ce?

Niko Nyman Niko Nyman
8 sept. 2011 11:15:53

Prin adăugarea la variabilele de interogare existente, nu rescriem nimic. Este ca și cum am spune: "Dă-mi setările tale, voi schimba o singură valoare, apoi le voi reseta." înainte de a rula interogarea.

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

Mă întreb doar de ce query_posts() nu pare să funcționeze în acest fel pentru a permite schimbarea unei singure valori, chiar dacă documentația spune asta?

Niko Nyman Niko Nyman
24 sept. 2012 13:08:41
0

Există o discuție pe forumurile de suport Wordpress.org despre această problemă exactă. Persoana care a inițiat discuția a găsit un răspuns, dar nu l-a postat încă.

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

Mulțumesc oricum pentru ajutor.

8 feb. 2011 23:18:07