it-swarm.com.de

Paginierte HTML-Sitemap

Ich bin an dem Punkt angelangt, an dem ich meine HTML-Sitemap in mehrere Seiten aufteilen musste. Es enthielt mehr als 2000 Links.

Das große Layout zeigte alle Beitragstitel unter Kategorienamen auf einer Seite. Ich beschloss, es mit WP_Query in alphabetischer Reihenfolge aufzuschlüsseln (zu paginieren), sodass jede Seite etwa 60 Post-Titel (Links) enthält. Außerdem wurden auf jeder Seite neben den Beitragstiteln die entsprechenden Kategorielinks und eine weitere benutzerdefinierte Taxonomie angezeigt.

Ich habe es getan und dachte, es wird in Ordnung sein, was Google und die Nutzer betrifft. Bald darauf wurde ich mit E-Mails bombardiert. Den Benutzern gefiel das neue, paginierte/alphabetische Erscheinungsbild der HTML-Sitemap nicht. Sie wollten schnellen Zugriff auf alle Beiträge von einer Seite (oder weniger Seiten als möglich). Ich kehrte zurück.

Ich kann diese große Seite nicht behalten, aber gleichzeitig muss ich mit den Benutzern gehen.

Gibt es eine Möglichkeit, die HTML-Sitemap in Seiten aufzuteilen und auf jeder Seite Pfostentitel (Links) aus mehreren Kategorien anzuzeigen?

Ich kann dies tun, indem ich mehrere Vorlagen erstelle und die Paginierung für jede Vorlage fest codiere (verknüpfe sie), aber das ist der schwierige Weg.

Ich habe mich mit mehreren Schleifen, verschachtelten Schleifen, benutzerdefinierten Abfragen und WP_Query beschäftigt und viel experimentiert, aber es scheint, als könne ich nicht auf elegante und saubere Weise das erreichen, was ich will.

1
Vila

Ich habe das noch nicht getestet, aber hier, lemmie, weiß wie es funktioniert. Sie müssen Ihre eigenen Paginierungslinks erstellen, aber das sollte ziemlich einfach sein

//pagination
$offset = '0';
$no_of_posts = the_posts_per_page( false ); //Number of posts to display on each page
if (preg_match( '/page/', $_SERVER['REQUEST_URI'] ) ) {
    $uri = explode( '/', $_SERVER['REQUEST_URI'] );
    foreach ( $uri as $key => $value ) {
        if ( $value == '' ) {
        unset( $uri[$key] );
        }
    }
    $offset = array_pop( $uri );
    $sql_offset = ( $offset * $no_of_posts ) - $no_of_posts;
}
//get categories
my_category_build( array(), 0 );

//function
function my_category_build( $args, $offset = 0  ) {

    //set defaults
    $defaults = array(
        'type'                     => 'post',
        'parent'                   => 0,
        'orderby'                  => 'name',
        'order'                    => 'ASC',
        'hide_empty'               => 1,
        'hierarchical'             => 1,
        'taxonomy'                 => 'category',
        'pad_counts'               => 1
    );

    //parse args
    $args = wp_parse_args( $args, $defaults );

    //do real work
    $categories = get_categories( $args );
    $cat_c = count( $categories );
    for( $i=$offset; $i<$offset+2 && $i<$cat_c; $i++ ) {
        //set current category object
        $categories[$i] = $cat;

        //drill down deeper
        $args['parent'] = $cat->cat_ID;
        $children = get_categories( $args );
        if( count( $children ) > 0 ) {
            my_category_build( $args );
        }

        //output posts from category
        $wp_query_args = array(
            'posts_per_page' => -1,
            'post_status'    => 'publish',
            'cat'            => $cat->cat_ID
        );
        $posts = new WP_Query( $wp_query_args );
        foreach( $posts as $p ) {
            //your output here
        }
    }
}
1
mor7ifer