web-dev-qa-db-ja.com

ページ区切り付きHTMLサイトマップ

HTMLサイトマップを複数のページに分割する必要があるところまで来ました。それは2000+リンクを含んでいました。

大きなレイアウトでは、1ページのカテゴリ名の下にすべての投稿タイトルが表示されていました。私はWP_Queryを使用してアルファベット順に分割する(ページ付けする)ことにしました。そのため、各ページには約60の投稿タイトル(リンク)が含まれることになります。投稿タイトルの横の各ページにも、それぞれのカテゴリリンクが表示され、さらに1つのカスタム分類法が表示されました。

私はそれをしました、そしてそれは大丈夫だと思いました、グーグル賢明とユーザー賢明。しかしその直後に、私は電子メールで砲撃されました。ユーザーは、HTMLサイトマップの新しいページ区切り付き/アルファベット順の外観を好みませんでした。彼らは、1ページ(またはできるだけ少ないページ数)からすべての投稿にすばやくアクセスすることを望んでいました。私は元に戻りました。

私はその大きなページを維持することはできませんが、同時に私はユーザーと一緒に行かなければなりません。

HTMLサイトマップをページに分割し、各ページに複数のカテゴリからの投稿タイトル(リンク)を含めることができる方法はありますか。

これを行うには、いくつかのテンプレートを作成し、各テンプレートのページ番号をハードコード(リンク)します。ただし、それが難しい方法です。

私は複数のループ、入れ子のループ、カスタムクエリ、WP_Queryなどをたくさん試してみましたが、私が望むものを上品できれいな方法で達成することはできないようです。

1
Vila

これをテストしていません、しかし、ここであなたは行き​​ます、レミーはそれがどのように働くか知っています。あなたはあなた自身のページネーションリンクをする必要があるでしょう、しかしそれはかなり簡単であるべきです

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