web-dev-qa-db-de.com

Beiträge pro Seite in query_posts festlegen

Tragen Sie mit mir hier ..

Die Standardposts pro Seite im Admin-Bereich sind 10. Während einiger Tests wollte ich die Posts pro Seite für mein benutzerdefiniertes Post-Archiv auf 2 setzen (in WP 3.1).

Das Problem ist, dass ich nur 4 Posts habe, es also 2 Seiten mit jeweils 2 Posts geben sollte, aber da der Standardwert 10 ist, gibt/page/2 error-404 zurück (vorausgesetzt, mit 10 Posts pro Seite gäbe es keine keine zweite Seite sein)

Die einzige Möglichkeit, dies zu umgehen, bestand darin, die Standardeinstellung im Admin-Bereich auf 1 zu setzen, aber dies ist nicht wirklich ideal, da ich jetzt einen benutzerdefinierten query_post für alle Beitragstyp-Archive ausführen muss, um die Beiträge pro Seite festzulegen.

Hat jemand einen besseren Weg, um dies zu tun, oder irgendwelche Ideen? Vielen Dank.

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('Previous work', '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> Older posts', 'twentyten' ) ); ?></div>
            <div class="nav-next"><?php previous_posts_link( __( 'Newer posts <span class="meta-nav">&rarr;</span>', 'twentyten' ) ); ?></div>
        </div>
    <?php endif; ?>

<?php get_footer(); ?>

art des Registrierungspostens:

register_post_type('project', array(
    'capability_type' => 'post',
    'has_archive' => true,
    'hierarchical' => false,
    'labels' => array(
        'name' => __('Projects', 'fullycharged'),
        'singular_name' => __('Project', 'fullycharged'),
        'all_items' => __('All Projects', 'fullycharged'),
        'add_new_item' => __('Add New Project', 'fullycharged'),
        'edit_item' => __('Edit Project', 'fullycharged'),
        'update_item' => __('Update Project', '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')
));
1
Andrew Lawson

In den Wordpress.org-Supportforen wird genau zu diesem Thema diskutiert. Das OP zu dieser Diskussion hat eine Antwort gefunden, die jedoch noch nicht veröffentlicht wurde.

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

Trotzdem vielen Dank für Ihre Hilfe.

1
Andrew Lawson

Mit der Aktion pre_get_posts ändere ich normalerweise einen einzelnen Abfragewert für eine Taxonomie- oder Kategorieseite:

/**
 * Control the number of search results
 */
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' );
2
Kevin Leary