web-dev-qa-db-fra.com

Plan du site HTML paginé

J'ai eu besoin de décomposer mon plan Sitemap HTML en plusieurs pages. Il contenait plus de 2000 liens.

La grande mise en page montrait tous les titres d'articles sous les noms de catégories sur une page. J'ai décidé de le décomposer (paginer) par ordre alphabétique à l'aide de WP_Query, afin que chaque page contienne environ 60 titres d'articles (liens). Également sur chaque page à côté des titres de publication, des liens de catégories respectives ont été affichés et une autre taxonomie personnalisée.

Je l'ai fait et je pensais que tout irait bien, selon Google et les utilisateurs. Cependant, peu après, j'ai été bombardé de courriels. Les utilisateurs n'aimaient pas le nouveau style alphabétique paginé du plan Sitemap HTML. Ils voulaient un accès rapide à tous les articles d'une page (ou au moins nombre de pages possible). Je suis revenu en arrière.

Je ne peux pas garder cette grande page, mais dans le même temps, je dois aller avec les utilisateurs.

Alors, y a-t-il un moyen de scinder le plan Sitemap HTML en pages, chaque page contenant des titres de publications (liens) de plusieurs catégories?

Je peux le faire en créant plusieurs modèles et en codant la pagination en dur sur chaque modèle (les lier), mais c’est la voie la plus difficile.

J'ai examiné plusieurs boucles, boucles imbriquées, requêtes personnalisées, WP_Query, expérimenté beaucoup, mais il semble que je ne puisse pas atteindre ce que je veux, de manière élégante et propre.

1
Vila

Je n'ai pas testé cela, mais voilà, Lemmie sait comment ça marche. Vous aurez besoin de faire vos propres liens de pagination, mais cela devrait être assez simple

//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