it-swarm.com.de

Unterschiedliche Anzahl von Beiträgen in jeder Kategorie

Ich habe kategoriengetriebene Seiten. Ich habe verschiedene Vorlagen für jede Kategorie. Ich würde gerne eine andere Anzahl von Beiträgen einstellen - für jede Kategorie unterschiedlich . Außerdem möchte ich in jeder Kategorie die richtigen vorherigen und nächsten Links hinzufügen.

zum Beispiel möchte ich in diesem category-1.php 4 Beiträge pro Seite:

<?php query_posts('showposts=4'); ?>
<a href="<?=next_posts()?>"> PREVIOUS </a>
<a href="<?=previous_posts()?>"> NEXT </a>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
...
<?php endwhile; endif; ?>

aber in diesem Beispiel funktionieren next_posts() und previous_posts() nicht.

5
sydbeat

Wie @StephenHarris hervorhob gibt es auch den pre_get_posts filter .

function hwl_home_pagesize( $query ) 
{
    if ( is_category( 9 ) ) 
    {
        // If you want "posts per page"
        $query->query_vars['posts_per_page'] = 1;
        return;
    }
    if ( is_category( 'movie' ) )
    {
        // If you want "showposts"
        $query->query_vars['showposts'] = 50;
        return;
    }
}
add_action( 'pre_get_posts', 'hwl_home_pagesize', 1 );

Beispiel geändert von Codex-Beispiel.

5
kaiser

Sie können den pre_get_posts hook verwenden (Bedingungen sind vorhanden):

function wpse47875_change_posts_per_page( $query ) {
    //Only alter main query. This only works for 3.3+
    if( ! $query->is_main_query() )
        return;

    if ( is_category('9') ){
        //Display 4 posts for category 1
        $query->set( 'posts_per_page', 4);
    }
}
add_action('pre_get_posts', 'wpse47875_change_posts_per_page', 1);

Sie möchten wahrscheinlich nur die 'Hauptabfrage' ändern, daher ist die erste Überprüfung wichtig. Wenn Sie WP <3.3 verwenden, können Sie stattdessen Folgendes überprüfen:

 if( $wp_the_query === $query ){
    //$query is the main query
 }else{
    //$query is *not* the main query
 }
4
Stephen Harris

Aktion "Anfordern analysieren"

Nicht sicher, ob dies funktionieren wird - es kann sein, dass die Bedingungen an dieser Stelle nicht funktionieren ...

// inside functions.php
function wpse47861_intercept_main_query( $wp )
{
    // default
    $nr_posts = 10; 

    if ( is_category( 'CAT NAME' ) )
        $nr_posts = 4;

    if ( is_category( array( 9 /*Ex. Cat-ID*/, 'CAT NAME A', 'CAT NAME B' ) ) )
        $nr_posts = 6;

    // Modify the main query object
    $wp->query_vars['showposts'] = $nr_posts;

    return $wp;
}
add_filter( 'parse_request', 'wpse47861_intercept_main_query' );

Beiträge Filter begrenzen

Dies wäre die andere Chance, da möglicherweise bereits Bedingungen vorhanden sind.

function wpse47861_intercept_query_limit( $limit )
{
    // default
    $nr_posts = 10; 

    if ( is_category( 'CAT NAME' ) )
        $nr_posts = 4;

    if ( is_category( array( 9 /*Ex. Cat-ID*/, 'CAT NAME A', 'CAT NAME B' ) ) )
        $nr_posts = 6;

    return "LIMIT 0, {$nr_posts}";
}
add_filter( 'posts_limit', 'wpse47861_intercept_query_limit', 9999 );

Hinweis: Beide Funktionen werden nicht getestet. Plus: Verwenden Sie eine oder die andere. Beides sollte in deiner functions.php Datei abgelegt sein.

1
kaiser

Ich habe flexible Möglichkeiten, wo es möglich ist, jeden per_page-Wert für jede/jede woprdpress-Site-Seite festzulegen:

  • öffne functions.php des aktuellen wp Themes

  • benutze etw wie folgt:

*

add_filter('pre_option_posts_per_page', function($num)
{
    if ($_SERVER['SCRIPT_URL'] == '/category/faq/')
    {
    return 999;
    }

    return $num;
});
0
realmag777

Bei query_posts funktioniert die Paginierung nur dann ordnungsgemäß, wenn Sie query_posts () in einer Seitenvorlage verwenden und die Variable 'paged' entsprechend festlegen: http://codex.wordpress.org/Template_Tags/query_posts

Es kann jedoch einfacher sein, ein Plugin mit dem Namen "Benutzerdefinierte Post-Limits" zu verwenden und die Schleifen Ihrer Kategorieseite gleich zu lassen. Sie können für jede Kategorie unterschiedliche Obergrenzen für die erste Seite und die Seitenanzahl festlegen. Siehe WordPress ›Benutzerdefinierte Post-Limits" WordPress-Plugins

0
markratledge