it-swarm.dev

Sitemap HTML impaginata

Sono arrivato al punto in cui avevo bisogno di abbattere la mia Sitemap HTML in diverse pagine. Conteneva oltre 2000 link.

Il grande layout mostrava tutti i titoli dei post sotto i nomi delle categorie su una pagina. Ho deciso di scomporlo (paginandolo) in ordine alfabetico usando WP_Query, quindi ogni pagina conterrebbe circa 60 post titoli (link). Inoltre su ogni pagina accanto ai titoli dei post, sono stati mostrati i rispettivi link di categoria e più un'altra tassonomia personalizzata.

L'ho fatto, e ho pensato che sarebbe stato OK, Google saggio e gli utenti saggi. Tuttavia, poco dopo, sono stato bombardato da e-mail. Agli utenti non piaceva il nuovo aspetto in ordine alfabetico della Sitemap HTML. Volevano un rapido accesso a tutti i messaggi da una pagina (o meno il numero di pagine possibile). Sono tornato indietro.

Non riesco a mantenere quella pagina grande, ma nello stesso tempo devo andare con gli utenti.

Quindi, c'è un modo in cui posso dividere la Sitemap HTML in pagine e ogni pagina per contenere i titoli di post (link) di diverse categorie?

Posso farlo creando diversi modelli e hard-code l'impaginazione su ogni modello (collegarli), ma questo è il modo difficile.

Ho esaminato più loop, cicli annidati, query personalizzate, WP_Query, sperimentando molto ma sembra che non riesco a ottenere ciò che voglio, in modo elegante e pulito.

1
Vila

Non ho provato questo, ma qui vai, lemmie sapere come funziona. Avrai bisogno di fare i tuoi link di paginazione, ma questo dovrebbe essere abbastanza semplice

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