WordPress 指定したURLに直接リンクさせたい

新着やお知らせなどは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のメモ書き | 1件のコメント