it-swarm.dev

Sitemap HTML paginado

Cheguei ao ponto em que precisei dividir meu Sitemap HTML em várias páginas. Continha mais de 2000 links.

O layout grande estava mostrando todos os títulos de postagens sob nomes de categorias em uma página. Eu decidi dividi-lo (paginar) por ordem alfabética usando WP_Query, então cada página conteria cerca de 60 títulos de posts (links). Também em todas as páginas ao lado dos títulos das postagens, foram mostrados os respectivos links de categorias e mais uma outra taxonomia personalizada.

Eu fiz isso e pensei que seria OK, o Google sábio e usuários sábios. No entanto logo depois, fui bombardeado com e-mails. Os usuários não gostavam da nova aparência paginada/alfabética do Sitemap HTML. Eles queriam acesso rápido a todas as postagens de uma página (ou menor número de páginas possível). Eu reverti de volta.

Eu não posso manter essa página grande, mas ao mesmo tempo eu tenho que ir com os usuários.

Então, existe uma maneira de dividir o Sitemap HTML em páginas e cada página para conter títulos de publicações (links) de várias categorias?

Eu posso fazer isso criando vários modelos e codificar a paginação em cada modelo (vinculá-los), mas essa é a maneira mais difícil.

Eu olhei em vários loops, loops aninhados, consultas personalizadas, WP_Query, experimentando muito, mas parece que não consigo alcançar o que eu quero, de uma forma elegante e limpa.

1
Vila

Não testei isso, mas aqui vai, lemmie sabe como funciona. Você precisará fazer seus próprios links de paginação, mas isso deve ser bastante direto

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