やりたい事:投稿をタグで絞り込んで取得しページャーで絞り込まれた投稿において次、前への投稿に遷移したい。
get_postsでtagを指定して投稿を絞り込みして取得できたが別ファイルのページャーでは絞り込む前の投稿リストになっている。
get_previous_postで取得した投稿は別タグの投稿になってしまう。
どこが悪いのかご指摘いただければ幸いです。
以下のようなコードです。php3か月の初心者です。(C#、VB.netは経験があります)
single.php
php
1<?php global $post;?> 2<?php get_header(); ?> 3<div class="wrap clearfix contents"> 4 <?php get_breadcrumbs(); ?> 5 <?php $array = get_tag_title(); 6 echo "FULLNAME=" . $array[0] . "TAG=" . $array[1] . "RETURN=" . $array[2];?> 7 <?php 8 if (empty($_COOKIE['tag_title'])) { 9 //echo "enter tag empty"; 10 if(have_posts()){ 11 while (have_posts()){ 12 the_post(); 13 get_template_part('inc/content'); 14 } 15 } 16 } else { 17 //echo "enter tag enabled"; 18 19 $args = array( 20 'post_type' => 'post', 21 'orderby' => 'date', // 日付でソート 22 'order' => 'DESC', // DESCで最新から表示、ASCで最古から表示 23 'tag' => get_tag_title()[1] // 表示したいタグのスラッグを指定 24 ); 25 global $post; 26 $post = get_posts( $args ); 27 //echo "<pre>"; 28 //var_dump($post); 29 //echo "</pre>"; 30 if(have_posts()){ 31 while (have_posts()){ 32 the_post(); 33 get_template_part('inc/content'); 34 } 35 } 36 } 37 wp_reset_postdata(); 38 ?> 39</div> 40<?php get_footer(); ?>
inc/content.php
php
1<article> 2 <div class="contents-main"> 3 <div class="wrap clearfix contents blog"> 4 <!--pager--> 5 <?php include dirname(__FILE__) . '/pager.php'; ?> 6 <h2 class="contents-head"> 7 <?php the_title(); ?> 8 </h2> 9 <div class="social-btn"> 10 <?php include 'snsBtn.php'; ?> 11 </div><br /> 12 <p>タグ:<?php the_tags('', ', '); ?></p> 13 <time pubdate="pubdate" datetime="<?php the_time('Y-m-d'); ?>" class="entry-date"> 14 <?php the_time(get_option('date_format')); ?> 15 </time> 16 <section class="entry-content"> 17 <div class="content-box"> 18 <?php the_content(); ?> 19 </div> 20 <br /> 21 <!--pager--> 22 <?php include dirname(__FILE__) . '/pager.php'; ?> 23 <div class="bannar-link-box"> 24 <a href="<?php echo home_url('/');?>humangrow/indetail/"></a> 25 </div> 26 <div class="social-btn"> 27 <?php include 'snsBtn.php'; ?> 28 </div> 29 </section> 30 </div> 31 </div> 32 <aside class="contents-side"> 33 <?php include(dirname(__FILE__).'/../office/blog-list.php'); ?> 34 </aside> 35</article>
office/blog-list.php
php
1<ul class="contents-side-childpagelist isPC"><br> 2<h4>事業所別ブログ一覧</h4> 3<li>・<a href="<?php home_url() ?>/tag/itabashi/">板橋</a></li> 4<li>・<a href="<?php home_url() ?>/tag/takadanobaba/">高田馬場</a></li> 5<li>・<a href="<?php home_url() ?>/tag/koiwa/">小岩</a></li> 6<li>・<a href="<?php home_url() ?>/tag/kasaiekimae/">葛西駅前</a></li> 7<li>・<a href="<?php home_url() ?>/tag/umejima/">梅島</a></li> 8<br><h4>ジャンル別ブログ一覧</h4> 9<li>・<a href="<?php home_url() ?>/tag/syusyoku/">就職</a></li> 10<li>・<a href="<?php home_url() ?>/tag/event/">イベント</a></li> 11<li>・<a href="<?php home_url() ?>/tag/program/">プログラム</a></li> 12</ul>
inc/pager.php
php
1<?php 2/** 3 *@author 4 */ 5global $siteurl, $tempurl,$topparents_slug,$topparents_id,$post; 6?> 7<div class="single-hedder-link imgright_row_flex space-between three"> 8 <?php $prev_post = get_previous_post(); 9 //echo "<pre>"; 10 //var_dump($prev_post); 11 //echo "</pre>"; 12 $present_tags = get_the_tags(); 13 $present_tags_count = count($present_tags); 14 15 $tag_title_array = get_tag_title(); 16 17 //if (!in_array($tag_title_array[0], $present_tags)) { 18 // $prev_post = get_previous_post( true, "", "" ); 19 //} 20 21 $cat = get_the_category(); 22 23 $cat_id = $cat[0]->cat_ID; //現在のカテゴリーIDを取得 24 $prev_cat_id = get_the_category($prev_post->ID)[0]->cat_ID; //前の記事のカテゴリーIDを取得 25 26 if( !empty( $prev_post ) and $prev_cat_id == $cat_id ) { 27 $url = get_permalink( $prev_post->ID ); 28 echo "<p class=\"detail_btn order_unset\"><a href=\"$url\" rel=\"prev\"><span class=\"pager_lt\"><< </span>前の記事へ<span class=\"pager_br\"><br/><< </span></a></p>"; 29 }else{ 30 echo "<p class=\"detail_btn\"></p>"; 31 } 32 33 if( empty($cat_id) ) { 34 $link = get_post_type_archive_link( $post_type ); 35 }else{ 36 $link = get_category_link($cat_id); 37 } 38 39 $back_url = parse_url($link, PHP_URL_PATH); 40 //echo '$cat=' . $cat . "\n"; 41 //echo '$cat_id=' . $cat_id . "\n"; 42 //echo '$link=' . $link . "\n"; 43 //echo '$back_url=' . $back_url . "\n"; 44 ?> 45 <p class="detail_btn order_unset"><a href="<?= $back_url; ?>">一覧へ<span class="pager_br"><br /></span>もどる</a></p> 46 <?php $next_post = get_next_post(); 47 $cat = get_the_category(); 48 $cat_id = $cat[0]->cat_ID; //現在のカテゴリーIDを取得 49 $next_cat_id = get_the_category($next_post->ID)[0]->cat_ID; //次の記事のカテゴリーIDを取得 50 51 if( !empty( $next_post ) and $next_cat_id == $cat_id ) { 52 $url = get_permalink( $next_post->ID ); 53 echo "<p class=\"detail_btn order_unset\"><a href=\"$url\" rel=\"next\">次の記事へ<span class=\"pager_br\"><br/></span> >></a></p>"; 54 }else{ 55 echo "<p class=\"detail_btn\"></p>"; 56 } 57?> 58</div> 59
やってみた事、single.phpでうまくタグ指定で取得できているかvar_dumpしてみましたが、この時点ではうまく取得できていました。
inc/pager.phpでしょっぱなにget_previous_postを行うとタグで絞り込まれていない関係ない記事が取得されていることがvar_dumpで
確認できました。
ちゃんとタグで絞り込まれた記事においての次の記事を取得したいです。皆様お知恵をお貸しください。
回答2件
あなたの回答
tips
プレビュー