-
ID:8rlB45 さんの質問

WordPressのタグについての質問です。
タグで
名前 | スラッグ | パーマリング
デザイン | design | /tag/design
ロゴ | logo | /tag/logo
バナー | banner | /tag/banner
と設定したときに、the_tags()で出力される3つのリンクのうち、1つだけ任意のリンク先に変更することは可能でしょうか?

Tags:<a href="/tag/design">デザイン</a> , <a href="/tag/logo">ロゴ</a> , <a href="/?p123">バナー</a>

みんなの回答 2 件

ID:JPgu9K さんの回答

やり方は色々あるけど
the_tags();をget_the_tagsに置き換えて、

<?php
$posttags = get_the_tags();
if ( $posttags ) {
foreach ( $posttags as $tag ) {
if($tag->slug == ’banner’){
echo ’/?123’;
}else{
echo get_tag_link( $tag->term_id );
}
}
}
?>

見たいな感じでやる。
適当に書いてるからキチンと動くように書き直してくれ
WPのリファレンスはここを見ると幸せになれる。
ttp://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

もっと詳しくなりたいなら
/4.2.2/src/wp-includes/category-template.phpファイルの

① 1363行目
$term_links = apply_filters( "term_links-$taxonomy", $links );

② 1196行目
apply_filters( ’get_the_tags’, get_the_terms( $id, ’post_tag’ ) );
のフィルターフックを使って、add_filterして、正規表現で置き換えたりする。

category-template.php in tags/4.2.2/src/wp-includes – WordPr...

https://core.trac.wordpress.org/browser/tags/4.2.2/src/wp-includes/category-template.php
ID:8rlB45

ちょうど、wp-includes/category-template.php しこしこ見てるとこでした。
参考になります。ありがとうございます!

ID:8rlB45 さんの回答

function my_tag_link($link,$id) {
if($id == 3){
return ’/?p123’;
}
return $link;
}
add_filter(’tag_link’, ’my_tag_link’, 10, 2);

これで何とか行けたものの、slugで一致が出来ずです・・・

ID:JPgu9K

if($id === 3){
return get_tag_link(3);
}
return $link;
}

例えば上記のような形で、必ずURLを直接返すんじゃなくて必ずWPの関数を介して結果を返すようにしたほうがいい。そうしないと何かの拍子にスラッグが変更になったときにリンク切れの要因になる。

ID:JPgu9K

正規表現がわかるなら、slugでの一致・不一致はpreg-match使って正規表現でやってみれ。
ttp://php.net/manual/ja/function.preg-match.php

ID:8rlB45

大変参考になります&slugでもやってみます。
ありがとうございます!

最終更新日:2015-07-03 (2,720 views)

関連するトピックス

ページ上部に戻る