it-swarm.dev

Pogrupowana mapa witryny HTML

Doszedłem do punktu, w którym musiałem podzielić moją mapę witryny HTML na kilka stron. Zawierał ponad 2000 linków.

Duży układ pokazywał wszystkie tytuły postów pod nazwami kategorii na jednej stronie. Postanowiłem go rozbić (paginacja to) w kolejności alfabetycznej przy użyciu WP_Query, więc każda strona będzie zawierać około 60 tytułów postów (linków). Również na każdej stronie obok tytułów postów wyświetlane były odpowiednie linki kategorii oraz jedna inna niestandardowa taksonomia.

Zrobiłem to i pomyślałem, że będzie dobrze, mądry i mądry Google. Jednak wkrótce potem zostałem zbombardowany e-mailami. Użytkownicy nie lubili nowego wyglądu stron w formacie HTML/alfabetycznym mapy witryny HTML. Chcieli mieć szybki dostęp do wszystkich postów z jednej strony (lub mniejszej liczby stron, jak to możliwe). Cofnąłem się z powrotem.

Nie mogę zachować tej dużej strony, ale jednocześnie muszę iść z użytkownikami.

Czy istnieje sposób na podzielenie mapy witryny HTML na strony, a każda strona zawiera tytuły postów (linki) z kilku kategorii?

Mogę to zrobić, tworząc kilka szablonów i mocno zakodując paginację na każdym szablonie (połącz je), ale to jest trudna sprawa.

Sprawdziłem wiele pętli, zagnieżdżonych pętli, niestandardowych zapytań, WP_Query, eksperymentowałem dużo, ale wygląda na to, że nie mogę osiągnąć tego, co chcę, w elegancki i czysty sposób.

1
Vila

Nie testowałem tego, ale tutaj, lemmie wie, jak to działa. Będziesz potrzebować własnych linków do stron, ale to powinno być całkiem proste

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