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

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

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

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

PHP

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

Q&A

解決済

1回答

3159閲覧

1記事で表示されるタグの数を制限したい

Samson818

総合スコア162

WordPress

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

PHP

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

0グッド

0クリップ

投稿2019/01/28 07:44

編集2019/01/28 07:53

現在、以下のような記事一覧を表示するphpがあります。

php

1<div class="row"> 2<?php 3$my_query = new WP_Query(array( 4'post_type' => 'post', 5'posts_per_page' => 15, 6'orderby' => 'menu_order', 7'order' => 'ASC', 8)); 9?> 10 11<?php while($my_query->have_posts()) : $my_query->the_post(); ?> 12 13<div class="col-sm-6 a_box"> 14 <a href="<?php the_permalink(); ?>"> 15 <div> 16 17<?php 18$days = 3; 19$today = date_i18n('U'); 20$entry_day = get_the_time('U'); 21$keika = date('U',($today - $entry_day)) / 86400; 22if ( $days > $keika ): 23 echo '<span class="ribon_new">NEW</span>'; 24endif; 25?> 26 27<?php if (has_post_thumbnail()): ?> 28<?php the_post_thumbnail(array( 150, 150 )); ?> 29<?php else: ?> 30<img src="<?php echo bloginfo('template_directory'); ?>/images/common/noimage.jpg" /> 31<?php endif; ?> 32 33<div> 34<p class="upload_date"><?php echo get_the_date('Y年m月d日'); ?></p> 35 <h4><?php the_title(); ?></h4> 36 </div> 37 </div> 38 </a> 39 <p class="tag"><?php the_tags('','','');?></p> 40</div>

1記事当たりのタグを表示する個数を制限できないでしょうか?
今の書き方では4つのタグをつけたら4つ表示され、10個つけたら10個表示されてしまいます。
記事の一覧ではタグを2つに抑え、詳細ページではすべて表示するという事をしたいです。

<?php the_tags(); ?> や <?php get_the_tag(); ?> の Codex日本語版をみても、これらには数を制限する機能がなさそうです。

'posts_per_page' => 15, のように
'tags_per_post' => 2, と出来れば良いのですが、これも用意が無さそう。

どのように上記を変更したらタグの個数を制限できるでしょうか?
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

関数があればそれに越したことはないですが、ぱっと見なかったんで、こういうことすればいいのでは提案

php

1$count = 2; //2個? 2 3$first2 = array_slice(get_the_tags(), 0, $count); 4//→出力されちゃう// $first_2 = array_slice(explode(":", the_tags("", ":", "")), 0, $count); //:はタグで使わない文字である必要がある

--
the_tagは出力関数でした。申し訳ないです。↓でどうでしょうか?

php

1<p class="tag"><?php 2$count = 2; //2個? 3 4$wptags = array_slice(get_the_tags(), 0, $count); 5$stringify = ""; 6foreach($wptags as $tag) { 7 $stringify .= '<a href="'.get_tag_link( $tag->term_id ).'">'.$tag->name.'</a> ' ; 8 //$stringify .= $tag->name; 9} 10echo $stringify; 11?></p>

質問者様による改訂案を将来の訪問者のために共有します

php

1<?php 2$count = 2; 3$tagchk = get_the_tags(); 4if($tagchk){ //get_the_tagsはタグがない場合、空配列ではなくfalseを返す 5 $wptags = array_slice(get_the_tags(), 0, $count); 6 echo '<p class="tag">'; 7 foreach($wptags as $tag) { 8 $tagname = $tag->name; 9 $tagurl = get_tag_link( $tag->term_id ); 10 echo '<a href="'.$tagurl.'">'.$tagname.'</a>'; 11 } 12 echo '</p>'; 13} 14?>

投稿2019/01/28 08:08

編集2019/01/30 09:01
papinianus

総合スコア12705

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

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

Samson818

2019/01/30 07:09

お返事遅くなりました。ありがとうございます! うまく行きませんでした。 <p class="tag"><?php the_tags('','','');?></p> これを <p class="tag"> <?php $tagnum = 2;//表示するタグを2つまでにする $first2 = array_slice(get_the_tags(), 0, $tagnum); $first_2 = array_slice(explode(":", the_tags('',':','')), 0, $tagnum); //:はタグで使わない文字である必要がある ?> </p> としたのですがタグが依然3つ表示されており、邪魔な:が表示されるようになってしまいました。 codexのthe_tagsや phpのarray_slice, explodeを見ながら理解を深めたいと思います。 ありがとうございました!
papinianus

2019/01/30 07:17

まずは、the_tagが出力を伴う関数であることを見落しておりました。おわびします。 > どのように上記を変更したらタグの個数を制限できるでしょうか? どのように、とのことなので方法で提示したつもりでしたが、コピペ可能な状態にもっていきました。 あらためて、ご確認いただけると幸いです。
Samson818

2019/01/30 07:31 編集

the_tag, get_the_tag ともに the_tags, get_the_tags の誤植として良いのでしょうか? 単数形ではエラーが表示されてしまうので、勝手に複数形に変えてしまっていますが、 その点問題ないでしょうか? 単数形の際に表示されるエラーが Fatal error: Call to undefined function get_the_tag() in <略> 複数形に表示を変えた際に表示されるエラーが Notice: Array to string conversion in<略> という表示です。 ※「 conversion in」と隠れていた文字があったので加筆させていただきました。
papinianus

2019/01/30 07:30 編集

今回のご指摘について、対応し、回答に追記したつもりです。
Samson818

2019/01/30 07:36

お忙しい中時間を割いていただいているのに、 また理解不足の私に丁寧に対応していただいているのに、またエラーが出てしまいました。すみません。 Catchable fatal error: Object of class WP_Term could not be converted to string in <略>
papinianus

2019/01/30 07:47 編集

今回のエラーについて、あらためて改訂しました(つもり)。 こちらこそ直結した回答にならず重ねて申し訳ないことでございます。 (WPの細部に精通していないのに安易に回答してしまいました。すみません) タグ名の間に区切り文字を入れていません。これは何を入れるべきか分からなかったためです。
Samson818

2019/01/30 07:56

ありがとうございます。 最初に私が使用しているthe_tags()はタグ一覧へのリンク付きでタグの一覧を作ってくれるのですが、 get_the_tags() と $tag->name; だと 名前だけになってしまうようです。 手元で任意の1タグだけは取り出せるようなコードが書けたのでforeachと組み合わせてみます。 <p class="tag"> <?php $tags = get_the_tags(); echo '<a href="'.get_tag_link( $tags[0]->term_id ).'">'.$tags[0]->name.'</a>'; ?> </p> 後は出来そうなので自分でやってみます。
papinianus

2019/01/30 08:02

お手数おかけしました。 提示のもので、追記しました(後に他のかたがみたとき、正しい答えとなるように、です)
Samson818

2019/01/30 08:21

ありがとうございます! 自分でやったものはブサイクだったので、参考にさせていただきます。 <p class="tag"><?php $count = 2; //2個? $wptags = array_slice(get_the_tags(), 0, $count); $tagname = ""; $tagurl = ""; foreach($wptags as $tag) { $tagname .= $tag->name; $tagurl .= get_tag_link( $tag->term_id ); echo '<a href="'.$tagurl.'">'.$tagname.'</a>'; $tagname = ""; $tagurl = ""; } ?></p>
papinianus

2019/01/30 08:24

そう書きたいなら <p class="tag"><?php $count = 2; //2個? $wptags = array_slice(get_the_tags(), 0, $count); // 不要 $tagname = ""; // 不要 $tagurl = ""; foreach($wptags as $tag) { $tagname /* . */ = $tag->name; // . だけ削る $tagurl /* . */ = get_tag_link( $tag->term_id ); echo '<a href="'.$tagurl.'">'.$tagname.'</a>'; // 不要 $tagname = ""; // 不要 $tagurl = ""; } ?></p>
Samson818

2019/01/30 08:52

タグが空の場合にエラーが出てしまったので修正案追加しておきます。 <?php $count = 2; $tagchk = get_the_tags(); if($tagchk){ $wptags = array_slice(get_the_tags(), 0, $count); echo '<p class="tag">'; foreach($wptags as $tag) { $tagname = $tag->name; $tagurl = get_tag_link( $tag->term_id ); echo '<a href="'.$tagurl.'">'.$tagname.'</a>'; } echo '</p>'; } ?>
papinianus

2019/01/30 09:00

https://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/get_the_tags を見る限り、タグがないとき空の配列になるのだと思っていたのですが(なので、タグがない場合も、タグが2個未満の場合もarray_sliceが対応できると思っていた)、こちら https://elearn.jp/wpman/function/get_the_tags.html を見るとfalseになるのですね。これも仕様を把握せず申し訳なかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問