WordPress: Anzahl der angezeigten Posts pro Seite ändern

Bei den Arbeiten an meinem Fotoblog bin ich auf ein Problem gestoßen. Ich wollte, dass für eine Kategorie und deren Unterkategorie nur ein Post pro Archivseite dargestellt wird. Dies kann man laut Dokumentation mit folgendem Code vor der Loop machen:

1
2
3
4
5
6
7
8
9
10
11
12
13
// Das Query
global $query_string;
query_posts($query_string . "&posts_per_page=5");

// Die Loop
if ( have_posts() ) : while ( have_posts() ) : the_post();
 ..
endwhile; else:
 ..
endif;

// Query zurücksetzen
wp_reset_query();

Also habe ich den Code in der archive.php verpackt und vorher je nach Kategorie posts_per_page verändert. Leider hat das in den Unterkategorien nicht funktioniert. Ich bin immer wieder auf 404 Seiten gelandet. 🙁 Ich habe schon einen WordPress-Bug vermutet und auf anraten anderer Entwickler ein Ticket eröffnet. Das Ticket wurde mit dem Hinweis, dass dies ein normales WordPress-Verhalten sei, geschlossen. Grund hierfür ist, dass WordPress das Paging errechnet bevor das Query abgeschickt wird, d.h. Query und errechnetes Paging stimmen nicht überein. Zum Glück hat der Entwickler, der das Ticket bearbeitet hat, mir einen Workaround aufgezeigt.
Das Problem lässt sich mit Hilfe eines Filters beheben. Dieser wird in der functions.php mit diesem Code gesetzt.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// Filter hinzufügen
add_filter('request', 'set_post_per_page_for_cat');

function set_post_per_page_for_cat($vars) {

    // ID der Kategorie, bei der und deren Unterkategorien posts_per_page geändert werden sollen
    $cat = 7;

    // Anzahl der Posts
    $post_count = 1;

    // Aktuelle Kategorie
    $cur_category_slug = get_term_by( 'slug', $vars['category_name'], 'category' );
    $cur_category = $cur_category_slug->term_id;
    if ( $cat == $cur_category ) {
        // Wenn die Kategorie die zu Ändernde ist
        $vars['posts_per_archive_page'] = $post_count;
        return $vars;
    } else {
        $subcats=explode('/',get_category_children($cat));
        if( in_array($cur_category, $subcats) ){
            // Wenn die Kategorie eine Unterkategorie der zu Ändernden ist
            $vars['posts_per_archive_page'] = $post_count;
            return $vars;
        }
    }

    $vars['posts_per_archive_page']=get_option('posts_per_page');
    return $vars;
}

Ich hoffe dieser Codeschnipsel hilft Euch weiter. Freue mich über Fragen und Anregungen. 🙂

5 Reaktionen auf: WordPress: Anzahl der angezeigten Posts pro Seite ändern

Schreibe einen Kommentar zu Айки Дзюдо Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht.