get_the_term_listをリンクなしで表示する方法を教えてください。
-
はじめまして、WP・PHPにつきましては全くの初心者になります。
何卒宜しくお願い致します。<?php //get terms $terms = get_the_term_list( get_the_ID(), 'portfolio_cats' ); ?>
タグをそのままにリンクのみを消したいのですが、どうすればいいのでしょうか?
get_the_term_listをget_the_termsに変更するだけじゃだめなのでしょうか?<?php //get terms $terms = get_the_terms( get_the_ID(), 'portfolio_cats' ); ?>
他にも、get_the_term_listをsingle_term_titleに変更したのですがうまくいきませんでした。
説明がうまくできず申し訳ございません。
アドバイス頂けましたら幸いでございます。
-
RMVPさん
1週間前に立てられたトピックなので解決済みかもしれませんが……
get_the_term_list() と get_the_terms() の違いは、前者ではリンク付きのHTML文字列が返されるのに対し、後者では配列が返されるという点です。そのため get_the_terms() の返り値をそのまま echo しても文字列をうまく表示させることができません。
ベーシックな用例ですが、下のようにすればリンクなしでタグだけが表示されるかとおもいます(HTMLタグは適宜追加してくださいね)。
$terms = get_the_terms( get_the_ID(), 'portfolio_cats' ); if ( !empty($terms) ) { if ( !is_wp_error( $terms ) ) { foreach( $terms as $term ) { echo $term->name; } } }
tecking様
ご返事が大変遅くなりまして誠に申し訳ございません。
とんでもございません、お忙しい中ご回答いただきましてありがとうございます。<?php //get terms $terms = get_the_term_list( get_the_ID(), 'portfolio_cats' ); ?>
上記タグをこのような変更でいいのでしょうか?
<?php //get terms $terms = get_the_terms( get_the_ID(), 'portfolio_cats' ); if ( !empty($terms) ) { if ( !is_wp_error( $terms ) ) { foreach( $terms as $term ) { echo $term->name; } } } ?>
PHPについて全くの初心者のため、度々質問してしまい申し訳ありません。
お時間ある際に、お返事いただけましたら幸いでございます。
何卒宜しくお願い申し上げます。
> 上記タグをこのような変更でいいのでしょうか?
それでオッケイですよ。
繰り返しになりますが、上で例示したコードではHTMLタグをまったく考慮してないので注意してくださいね。HTMLタグを挿入するのであれば、WordPressループっぽくこんな形で書いてはどうでしょう。
<?php $terms = get_the_terms( get_the_ID(), 'shape' ); if ( !empty($terms) ) : if ( !is_wp_error($terms) ) : ?> <ul> <?php foreach( $terms as $term ) : ?> <li><?php echo $term->name; ?></li> <?php endforeach; ?> </ul> <?php endif; endif; ?>
あ、コードがちょっと違ってました。RMVPさんのテンプレートにあてはめるなら
$terms = get_the_terms( get_the_ID(), 'shape' );
は
$terms = get_the_terms( get_the_ID(), 'portfolio_cats' );
が正しいです。失礼しました。
tecking様
度々すみません。ありがとうございます。
無事にリンクだけになったのですが、「Array」という文字とCSSが適用されなくなってしまいました。CSSはこのような記述となっております。
#single-portfolio-meta{ margin-top: -10px; margin-bottom: 20px; font-weight: bold; } #single-portfolio-meta a{ display: block; float: left; margin-right: 5px; padding: 6px; padding-bottom: 4px; padding-top: 4px; background: #000; color: #fff; } #single-portfolio-meta a:hover{ background: #333 !important; color: #fff; }
CSSを適用させる方法と「Array」という文字はどういう意味でしょうか?
お時間ある際に、お返事いただけましたら幸いでございます。
何卒宜しくお願い申し上げます。
間違えました
二つの課題が混在しているので、まずは課題を切り分けましょうか。
1. CSSについて
上記のコードではあくまで表示の骨格だけを示しているので、お使いのテーマのCSSについては考慮しておりません。コード内の ul タグや li タグ、あるいは表示部全体を囲む div タグなどに ID名 single-portfolio-meta を追記する必要があるかとおもいます。2. Arrayについて
配列を直接 echo しようとしていませんか? 上記のコードでいうと<li><?php echo $term->name; ?></li>
を
<li><?php echo $terms; ?></li>
としてしまうと、配列 $terms を直接 echo するかたちとなりページ上では Array と表示されてしまいます。
現状、課題となっている箇所でどのようなコードを書かれていますか? 本トピックは「get_the_term_listをリンクなしで表示する方法」としてスタートしているので、まずは2の解決に向けて進めていきましょう。
tecking様
ご返信が大変遅くなりまして大変申し訳ございません。
1.Arrayにつきまして
一番初めにアドバイスいただきました通り、<?php //get terms $terms = get_the_term_list( get_the_ID(), 'portfolio_cats' ); ?>
上記記述を下記記述に変更いたしました。
<?php $terms = get_the_terms( get_the_ID(), 'portfolio_cats' ); if ( !empty($terms) ) : if ( !is_wp_error($terms) ) : ?> <ul> <?php foreach( $terms as $term ) : ?> <li><?php echo $term->name; ?></li> <?php endforeach; ?> </ul> <?php endif; endif; ?>
特に変更などはしておりませんが「Array」表示されてしまいました。
記述前はこのような表示となっております。
http://martinmuseum.com/test/wordpress/?portfolio=test
太文字で「test」と表示されている下の部分(背景グレー/マウスオーバー時:黄色)が問題の部分となります。
2.CSSについて
<?php $terms = get_the_terms( get_the_ID(), 'portfolio_cats' ); if ( !empty($terms) ) : if ( !is_wp_error($terms) ) : ?> <ul> <?php foreach( $terms as $term ) : ?> <li><?php echo $term->name; ?></li> <?php endforeach; ?> </ul> <?php endif; endif; ?>
に<div id=”single-portfolio-meta”>でくくってみましたが、CSSは適応されましせんでした。背景色・オーバー時の色など。
PHPについて全く知識がなく、当初はHTMLに近いものだと勘違いしておりました。
御迷惑をおかけ致しまして申し訳ございません。例:
<a>
タグのようなもので、<a>
タグを外せばリンクがなくなる例のように捉えており、何かの記述をすれば、そのままリンクが外れるのではないかなっと大変お恥ずかしいですが勝手考えておりました。
様々なアドバイスをいただきとても感謝致しております。
ありがとうございます。
お使いのテーマ(Workz)をダウンロードして判明しました。
ちょっと、言葉足らずのところがあって、こちらこそご迷惑おかけしました。1. Arrayの解消
single-portfolio.php の38~47行目あたり
<?php //get terms $terms = get_the_term_list( get_the_ID(), 'portfolio_cats' ); ?> <?php if($terms) { ?> <div id="single-portfolio-meta" class="clearfix"> <?php echo $terms; ?> </div> <?php } ?>
を
<?php $terms = get_the_terms( get_the_ID(), 'portfolio_cats' ); if ( !empty($terms) ) : if ( !is_wp_error($terms) ) : ?> <div id="single-portfolio-meta" class="clearfix"> <?php foreach( $terms as $term ) : ?> <span><?php echo $term->name; ?></span> <?php endforeach; ?> </div> <?php endif; endif; ?>
に、まるっと入れ替えれば解消するかとおもいます。
2. CSSの適用
style.css の692~703行あたり#single-portfolio-meta a{ display: block; float: left; margin-right: 5px; padding: 5px; background: #eee; color: #666; } #single-portfolio-meta a:hover{ background: #fee825 !important; color: #000; }
で背景の四角や背景色を設定しているので、リンクを外しつつ、背景色をつけたい場合は
#single-portfolio-meta a{
を
#single-portfolio-meta a, #single-portfolio-meta span {
といったふうにしてはどうでしょう?
tecking様
ご返信いただきましてありがとうございます。
いえとんでもございません。わざわざテーマをインストールまでしていただき、またお調べまでしていただきましてありがとうございます。
無事解決いたしました。
希望通りにでき、大変満足しております。ずっとわからずとても困っていたのでとても感謝しております。
説明不足など多々ございましたが、とても親身にご丁寧にアドバイスいただきありがとうございます。
心よりお礼申し上げます。
- トピック「get_the_term_listをリンクなしで表示する方法を教えてください。」には新たに返信することはできません。