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

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

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

2056閲覧

wordpress php タグで絞り込んだ投稿内で次の記事、前の記事へ遷移したい

nekora

総合スコア501

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/01/24 04:12

やりたい事:投稿をタグで絞り込んで取得しページャーで絞り込まれた投稿において次、前への投稿に遷移したい。

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\">&lt;&lt; </span>前の記事へ<span class=\"pager_br\"><br/>&lt;&lt; </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> &gt;&gt;</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で
確認できました。
ちゃんとタグで絞り込まれた記事においての次の記事を取得したいです。皆様お知恵をお貸しください。

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nekora

2020/02/22 03:55

亀レスになってしまい申し訳ありません m(_ _)m タクソノミーは試したのですが絞り込みたいタグを指定しても記事が取得出来ませんでしたので もう開き直って自前でハンドリングして解決しましたが別の問題が発生して解決法を模索してて 返事が遅れました。こんな私にアドバイスをくださって心から感謝しております。
guest

回答2

0

やりたい事:投稿をタグで絞り込んで取得しページャーで絞り込まれた投稿において次、前への投稿に遷移したい。

get_next_post関数とget_previous_post関数を適切に使えば、解決しそうな問題に見えますが、こういうことではないのですか?

single.php記載

PHP

1<?php get_header(); ?> 2<?php 3 if(have_posts()) 4 { 5 while (have_posts()){ 6 the_post(); 7 8 the_content(); 9 10 11 echo '<ul>'; 12 $next_post = get_next_post(true, '', 'post_tag'); 13 if (!empty( $next_post )) 14 { 15 ?><li>Next:<a href="<?php echo get_permalink( $next_post->ID ); ?>"><?php echo $next_post->post_title; ?></a></li><?php 16 } 17 18 $previous_post = get_previous_post(true, '', 'post_tag'); 19 if (!empty( $previous_post )) 20 { 21 ?><li>Previous:<a href="<?php echo get_permalink( $previous_post->ID ); ?>"><?php echo $previous_post->post_title; ?></a></li><?php 22 } 23 echo '</ul>'; 24 25 } 26 } 27 wp_reset_postdata(); 28?> 29<?php get_footer(); ?>

投稿2020/02/22 09:27

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/02/22 09:30

nekoraさん 質問文では「タグ」と記載しているのに、ページャーのソースコードだと「カテゴリー」を使っているようですが、結局どちらなのでしょう?
nekora

2020/02/22 09:40

ああそれは、すべての記事が出てきて別カテゴリーの記事まで出てきたので、同一カテゴリー内で目的のタグをもつ投稿を自前でハンドリングしたものです
退会済みユーザー

退会済みユーザー

2020/02/22 09:53

それでは、「やりたい事」は「同カテゴリ、同タグを持つ前後の日付の投稿へのリンクを表示したい」ということですか?
nekora

2020/02/22 10:06

はい、そうです。質問文に十分に記載できなかった自分の責任でいらぬ誤解をさせてしまいました申し訳ありません。 ご覧の通り投稿一覧をスマートじゃないですが自前で無理やりハンドリングしてなんとか目的を達成できました。 ただ、クッキーを使えなくなったので、single.phpでグローバル変数の問題が出てそちらを別で質問させていただいた次第です。
退会済みユーザー

退会済みユーザー

2020/02/22 10:19

であれば、get_next_post関数のコードをベースに自分用のmy_get_next_post関数をつくるのが、WordPressのしくみに則ったベターな方法のように思えます。 が、別の方法でなんとかしようとしているのであれば、そちらの方法をどうぞ。 新しい質問の方の解決法は私にはまったくわかりませんが、頑張ってください。
guest

0

自己解決

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 9 global $post; 10 global $present_tags; 11 $inst_tag_title = tag_title_handler::getInstance(); 12 $tag_title_array = $inst_tag_title->get_tag_title(); 13 //echo "<pre>"; 14 //echo "pager get\n"; 15 //var_dump($tag_title_array); 16 //echo "</pre>"; 17 if (!empty($tag_title_array)) { 18 $main_post = $post; 19 $post = get_previous_post( true ); 20 if (!empty($post)) { 21 $present_tags = get_the_tags(); 22 while (!empty($post)) { 23 if (!empty($present_tags)) { 24 foreach ($present_tags as $value) { 25 if ($tag_title_array['tag']==$value->slug) {break 2;} 26 } 27 } 28 $post = get_previous_post( true ); 29 $present_tags = get_the_tags(); 30 } 31 } 32 $prev_post = $post; 33 $post = $main_post; 34 //echo "<pre>"; 35 //var_dump($prev_post); 36 //echo "</pre>"; 37 } else { 38 $prev_post = get_previous_post(); 39 } 40 41 $cat = get_the_category(); 42 43 $cat_id = $cat[0]->cat_ID; //現在のカテゴリーIDを取得 44 $prev_cat_id = get_the_category($prev_post->ID)[0]->cat_ID; //前の記事のカテゴリーIDを取得 45 46 if( !empty( $prev_post ) and $prev_cat_id == $cat_id ) { 47 $url = get_permalink( $prev_post ); 48 echo "<p class=\"detail_btn order_unset\"><a href=\"$url\" rel=\"prev\"><span class=\"pager_lt\">&lt;&lt; </span>前の記事へ<span class=\"pager_br\"><br/>&lt;&lt; </span></a></p>"; 49 }else{ 50 echo "<p class=\"detail_btn\"></p>"; 51 } 52 53 if( empty($cat_id) ) { 54 $link = get_post_type_archive_link( $post_type ); 55 }else{ 56 //$link = get_category_link($cat_id); 57 if (!empty($tag_title_array)) { 58 $link = $tag_title_array['return']; 59 } else { 60 $link = get_category_link($cat_id); 61 } 62 } 63 64 $back_url = parse_url($link, PHP_URL_PATH); 65 //echo '$cat=' . $cat . "\n"; 66 //echo '$cat_id=' . $cat_id . "\n"; 67 //echo '$link=' . $link . "\n"; 68 //echo '$back_url=' . $back_url . "\n"; 69 ?> 70 <p class="detail_btn order_unset"><a href="<?= $back_url; ?>">一覧へ<span class="pager_br"><br /></span>もどる</a></p> 71 72 <?php 73 global $post; 74 global $present_tags; 75 $inst_tag_title = tag_title_handler::getInstance(); 76 $tag_title_array = $inst_tag_title->get_tag_title(); 77 if (!empty($tag_title_array)) { 78 $main_post = $post; 79 $post = get_next_post( true ); 80 if (!empty($post)) { 81 $present_tags = get_the_tags(); 82 while (!empty($post)) { 83 if (!empty($present_tags)) { 84 foreach ($present_tags as $value) { 85 if ($tag_title_array['tag']==$value->slug) {break 2;} 86 } 87 } 88 $post = get_next_post( true ); 89 $present_tags = get_the_tags(); 90 } 91 } 92 $next_post = $post; 93 $post = $main_post; 94 //echo "<pre>"; 95 //var_dump($next_post); 96 //echo "</pre>"; 97 } else { 98 $next_post = get_next_post(); 99 } 100 101 $cat = get_the_category(); 102 103 $cat_id = $cat[0]->cat_ID; //現在のカテゴリーIDを取得 104 $next_cat_id = get_the_category($next_post->ID)[0]->cat_ID; //次の記事のカテゴリーIDを取得 105 106 if( !empty( $next_post ) and $next_cat_id == $cat_id ) { 107 $url = get_permalink( $next_post ); 108 echo "<p class=\"detail_btn order_unset\"><a href=\"$url\" rel=\"next\">次の記事へ<span class=\"pager_br\"><br/></span> &gt;&gt;</a></p>"; 109 }else{ 110 echo "<p class=\"detail_btn\"></p>"; 111 } 112?> 113</div> 114

とりあえず自力でほしいタグが付いている記事以外を読み飛ばして関連記事だけを表示できましたが
別の問題が発生しました。そちらは、改めて質問させていただきます。

投稿2020/02/22 04:01

nekora

総合スコア501

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問