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

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

ただいまの
回答率

90.12%

カスタム投稿のページネーションがうまく動かない

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 2,129

tomy

score 102

前提・実現したいこと

event organizerというプラグインを使っています。
https://ja.wordpress.org/plugins/event-organiser/

こちらでeventのカスタム投稿を作りそれをさらに
eventとholidayというtermsに分けてます。

archive-event.phpに一覧を作り、holidayは出さないようにするとこまではできたのですが、ページネーションが動きません。

ページネーションはfunctions.phpに記載したものを使用しており、
通常の投稿ページでは機能しております。

カスタム投稿初めてなので用語などの間違いがありましたら申し訳ございません。
よろしくお願いします。

発生している問題・エラーメッセージ

ページネーションが2ページ目も同じ内容になってしまいます。

該当のソースコード

archive-event.php

<?php $my_query = new WP_Query( array(
  'post_type' => 'event',
  'posts_per_page' => 5,
  'tax_query' => array(
    array(
        'taxonomy' => 'event-category',
        'field' => 'slug',
        'terms' => 'event'
      ),
    ),

) ); ?>
<?php if ( $my_query->have_posts() ) : while ( $my_query->have_posts() ) : $my_query->the_post(); ?>
<div class="child_column_article">
<div class="child_column_article_left">
<?php the_post_thumbnail('full', array('class' => 'column_relative')); ?>
<?php
    $days = 7;
    $today = date_i18n('U');
    $entry = get_the_time('U');
    $elapsed = date('U',($today - $entry)) / 86400;
    if( $days > $elapsed ){
        echo "<img src=\"/wp-content/themes/useful/shared/images/ico_01.png\" class=\"child_column_absolute\">";
    }
?>
</div>
<div class="child_column_article_right">
<h2><span><?php the_title();?></span></h2>
<div class="event_info">
  <div class="event_info_step ei_upper">
    <p class="event_green">日時</p>
    <p class="event_gray"><?php echo eo_get_schedule_start('Y年 n月 d日 (D)'); ?></p>
  </div>
  <div class="event_info_step ei_lower">
    <p class="event_green">場所</p>
    <p class="event_gray"><?php echo eo_get_venue_name(); ?></p>
  </div>
</div>
<div class="child_column_article_more">
<a href="<?php the_permalink();?>">
<img src="<?php echo get_template_directory_uri(); ?>/shared/images/btn_03.png" alt="MORE">
</a>
</div>
</div>
</div>
<?php endwhile; else : ?>
  <p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>
<?php endif; wp_reset_postdata(); ?>

functions.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'    => __(' '),
        'next_text'    => __(' '),
        'type'  => 'array'
    ) );
    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();
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

0

アーカイブページで使うループを new WP_Query で作っていますが、pre_get_posts を使えばページングの問題は解消します。

そもそもアーカイブページが表示される前の段階で WP_Query が1度実行されているため、テンプレート上に WP_Query を書くとDBへの問い合わせを2回することになり、特にメリットはありません。

pre_get_posts はアーカイブページのためのDB問い合わせの前の WP_Query のオプションを書き換えることが出来ます。

【[Wordpress]pre_get_postsを使いこなす!pre_get_posts使い方まとめ | EMiAC-Works】
http://emiac-works.com/coding/pre-get-posts-code-snipet/

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/11/18 11:36

    できました!ありがとうございます。

    キャンセル

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

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