質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.97%

同一ページでスラッグ毎タブで分けた場合のそれぞれ対応したページネーションの作り方

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,322

tomy

score 102

前提・実現したいこと

category.phpに投稿一覧を作成しています。
タブで内容を切り替えるようにしていて下記の構成です。
・全一覧
・該当スラッグその1
・該当スラッグその2

問題1
記事の出し分けはできたのですが、ページネーションの紐付けがうまくできません。
一覧のタブの2ページ目に行くとその他のものも2ページ目に入ってしまいます。

問題2
ページ遷移をする際に開いていたタブをキープしたままページ遷移をするようにしたいです。

問題3
投稿記事内のaタグがぺージネーション内にも複製されてしまいます。

該当のソースコード

category.php

<div class="tabwrap">
    <div class="tabSet">
        <ul class="tabs clrFix">
          <li id="newstab"><a href="#panel1-1" class="on" style="display: inline-block;">
          <h3>
          <img src="<?php  echo esc_url(get_template_directory_uri());?>/shared/images/newslist_ico_01_on.png" class="ico on">
          <img src="<?php  echo esc_url(get_template_directory_uri());?>/shared/images/newslist_ico_01_off.png" class="ico off" style="display:none;">一覧</h3></a></li>
          <li id="schooltab" class="center"><a href="#panel1-2" class="" style="display: inline-block;">
          <h3>
          <img src="<?php  echo esc_url(get_template_directory_uri());?>/shared/images/newslist_ico_02_on.png" class="ico on" style="display:none;">
          <img src="<?php  echo esc_url(get_template_directory_uri());?>/shared/images/newslist_ico_02_off.png" class="ico off">その1</h3></a></li>
          <li id="salontab"><a href="#panel1-3" class="" style="display: inline-block;">
          <h3>
          <img src="<?php  echo esc_url(get_template_directory_uri());?>/shared/images/newslist_ico_03_on.png" class="ico on" style="display:none;">
          <img src="<?php  echo esc_url(get_template_directory_uri());?>/shared/images/newslist_ico_03_off.png" class="ico off">その2</h3></a></li>
        </ul>
        <div class="panels">
          <div class="panel" id="panel1-1" style="display: block;">

<?php if(have_posts()): ?>
  <?php while(have_posts()): ?>
    <?php the_post(); ?>

            <div class="content">
              <p class="date"><?php the_time('Y/m/d'); ?></p>
              <h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4>
              <p class="text"><a href="<?php the_permalink(); ?>"><?php echo mb_substr($post->post_content,0, 100).'...';?></a></p>
            </div>

  <?php endwhile; ?>
<?php endif; ?>
        <ul class="page clrFix">
<?php wp_pagination(); ?>
        </ul>
          </div>
          <div class="panel" id="panel1-2" style="display: none;">

<?php query_posts("cat=3&paged=".$paged); ?>
<?php if(have_posts()): ?>
  <?php while(have_posts()): ?>
    <?php the_post(); ?>

            <div class="content">
              <img src="<?php  echo esc_url(get_template_directory_uri());?>/shared/images/top_news_03.png" class="newstag">
              <p class="date"><?php the_time('Y/m/d'); ?></p>
              <h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4>
              <p class="text"><a href="<?php the_permalink();?>"><?php echo mb_substr($post->post_content,0, 100).'...';?></p>
            </div>

  <?php endwhile; ?>
<?php endif; ?>
        <ul class="page clrFix">
<?php wp_pagination(); ?>
        </ul>
<?php wp_reset_query(); ?>

          </div>
          <div class="panel" id="panel1-3" style="display: none;">

<?php query_posts("cat=4&paged=".$paged); ?>
<?php if(have_posts()): ?>
  <?php while(have_posts()): ?>
    <?php the_post(); ?>

            <div class="content">
              <img src="<?php  echo esc_url(get_template_directory_uri());?>/shared/images/top_news_01.png" class="newstag">
              <p class="date"><?php the_time('Y/m/d'); ?></p>
              <h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4>
              <p class="text"><a href="<?php the_permalink();?>"><?php echo mb_substr($post->post_content,0, 100).'...';?></p>
            </div>

  <?php endwhile; ?>
<?php endif; ?>
        <ul class="page clrFix">
<?php wp_pagination(); ?>
        </ul>
<?php wp_reset_query(); ?>

          </div>
        </div><!-- .panels -->
    </div><!-- .tabset -->

    </div><!-- .tabwrap -->


function.php

<?php
function wp_pagination() {
    global $wp_query;
    $big = 99999999;
    $page_format = paginate_links( array(
        'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
        'format' => '?paged=%#%',
        'current' => max( 1, get_query_var('paged') ),
        'total' => $wp_query->max_num_pages,
        'prev_next'    => True,
        'prev_text'    => __('prev'),
        'next_text'    => __('next'),
        'type'  => 'array',
        'mid_size' => '1',
        'end_size' => '1'
    ) );
    if( is_array($page_format) ) {
        $paged = ( get_query_var('paged') == 0 ) ? 1 : get_query_var('paged');
        // echo '<li><span>'. $paged . ' of ' . $wp_query->max_num_pages .'</span></li>';
        foreach ( $page_format as $page ) {
            echo "<li>$page</li>";
        }
    }
    wp_reset_query();
}
?>


jQuery

//tab
$(function(){
    $('.tabSet').each(function(){
        var topDiv = $(this);
        var anchors = topDiv.find('ul.tabs a');
        var panelDivs = topDiv.find('div.panel');
        var lastAnchor;
        var lastPanel;
        anchors.show();
        lastAnchor = anchors.filter('.on');
        lastPanel = $(lastAnchor.attr('href'));
        panelDivs.hide();
        lastPanel.show();
        anchors.click(function(event){
            event.preventDefault();
            var currentAnchor = $(this);
            var currentPanel = $(currentAnchor.attr('href'));
            lastAnchor.removeClass('on');
            currentAnchor.addClass('on');
            lastPanel.hide();
            currentPanel.show();
            lastAnchor = currentAnchor;
            lastPanel = currentPanel;
        });
    });
});


//newslisttabの画像切り替え
$(function(){
    $('#newstab').click(function(){
        $('#newstab .on').show();
        $('#newstab .off').hide();
        $('#schooltab .on').hide();
        $('#schooltab .off').show();
        $('#salontab .on').hide();
        $('#salontab .off').show();
    });
});

$(function(){
    $('#schooltab').click(function(){
        $('#newstab .on').hide();
        $('#newstab .off').show();
        $('#schooltab .on').show();
        $('#schooltab .off').hide();
        $('#salontab .on').hide();
        $('#salontab .off').show();
    });
});

$(function(){
    $('#salontab').click(function(){
        $('#newstab .on').hide();
        $('#newstab .off').show();
        $('#schooltab .on').hide();
        $('#schooltab .off').show();
        $('#salontab .on').show();
        $('#salontab .off').hide();
    });
});
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

https://github.com/tsuyoshiwebcake/jq-plugin-tab-pager

こちらを利用しました。
ありがとうございます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.97%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる