新着やお知らせなどはWPを使いCMSとして運用することは多く、最近の投稿一覧をサイトトップの任意の場所に表示させることはWPを導入したらもはや常に行うことですが、さらに、単純に記事を作るだけではなく、タイトルクリックで任意(指定)のURLに直接リンクさせたいことも結構あると思う。。。新着以外はWP化していない場合や、外部のサイトに直接リンクさせたいなど。
なのに意外と情報が少ないので、自分用も兼ねてメモ。
ちなみにWordPressはバージョン3.1.4~3.4.1にて導入。それ以前のバージョンでは試してません。。。がまぁ動きそう。
記事内にmetaタグ書いてリダイレクトでも良いかもしれないけど、リダイレクトまでページが一瞬表示されてしまうなど、どうしてもタイムラグがありスマートじゃないしでちょっと気が引ける。。。
そもそもお客さんにmetaタグ書かせるのもちょっと・・・
そんなときにはカスタムフィールドが便利。
カスタムフィールドで名前部分を今回の場合「link」とかに決めておいて(もちろん名前はなんでもOK)、値にURLを記述したら、そのURLにリンクさせるコードの例は以下。
カスタムフィールドの内容はget_post_metaで取得できることを利用。
条件分岐でlinkが設定された場合のみURLに直接リンク。そうじゃなければ普通に記事へリンク。
リンクのURLは相対でもhttpから始まる絶対URLでもどちらでもOK。
単純にa href=”指定した値” となる。
<?php $posts = get_posts('numberposts=50&category=3');//カテゴリと表示件数指定 global $post; if($posts): foreach($posts as $post): setup_postdata($post); ?> <dl> <dt><?php the_time(__('Y/n/j')) ?></dt> <?php $post_id = $post->ID; $link = get_post_meta($post_id,'link',true); ?> <dd> <?php if($link) : ?> <a href="<?php echo $link; ?>"><?php the_title(); ?></a> <?php else : ?> <a href="<?php the_permalink() ?>"><?php the_title(); ?></a> <?php endif; ?> </dd> </dl> <?php endforeach; endif;?>
HTMLタグはあくまで実装したサイトのものなので、基本的になんでもOK。
※ちなみにこのコードを張り付ければ指定したカテゴリのタイトルが一覧で表示されるいわゆる新着一覧などになる。
ポイントは以下部分。
<?php $post_id = $post->ID; $link = get_post_meta($post_id,'link',true); ?> <?php if($link) : ?> <a href="<?php echo $link; ?>"><?php the_title(); ?></a> <?php else : ?> <a href="<?php the_permalink() ?>"><?php the_title(); ?></a> <?php endif; ?>
$linkにカスタムフィールド「link」で指定されたURLを入れ、
if文で条件分岐。
if($link)は$linkが空ではなかったらの意味。
もちろん
if(!empty($link))やif($link!='')
なんかでもOKと思う。
要するにlinkでなにかしらURLが設定されていたらURLへリンク。
されていなければ通常の記事へリンクとなる。
これって結構使うと思うんだけどな。。。情報が少ないのは検索の仕方が悪いのか?w
記事の内容が近いもの:
- WordPressを導入したがWPではないページ(.php)にWPタグや新着一覧を表示
- WordPressプラグイン ソースコードを表示させたいとき
- WordPress特定のカテゴリ時のみ表示させたい
- WordPressプラグイン アクセス解析
- WordPressページごとに特定カテゴリの表示、非表示
- PHPのバージョンアップでAdvanced Category Excluderの不具合解決
- WordPress(XOOPSモジュール)IE8での記事入力不具合解消(暫定処置)
- WordPress3.2.1へバージョンアップ時のIEで投稿入力中に文字が消える件
- WordPressの「WordPress○○○が利用可能です ! 更新してください。」を表示させない(非表示処理)
この情報やっと見つけることが出来ました。良記事ありがとうございます。