[WordPress]CustomFieldTemplateでPDFかURLか本文でリンク先をそろぞれ変える

タイトル分かりづらいですね。

詳しく説明するとこういうことです。
CustomFieldTemplateでPDFアップロード、URL入力欄を作っておきます。
記事一覧を出力する際にPDFをアップロードされていればPDFにリンクを貼り、URLが入力されていればそのURLにリンクを貼り、PDFでもURLでもなければ通常通り記事を表示するっていうのをやってみようってことです。

ではさっそく




CustomFieldTemplateの作成

まずはCustomFieldTemplateでPDFアップロードとURL入力を作成します。

[PDF]
type = file
mediaPicker = true
mediaRemove = true
label = PDFファイルをリンクしたい場合

[URL]
type = text
size = 50
label = 外部サイトにリンクをしたい場合

PDFは「type = file」、URLは「type = text」で作成していれば他の設定は何でも構いません。

一覧表示部分(テンプレート側)

一覧表示したい場所(例えばindex.phpやcategory.phpなど)に以下をコピペ。

<?php if(have_posts()): while(have_posts()): the_post(); ?>
    <?php if(post_custom('PDF')): ?>
    <?php
        $files = get_post_meta($post->ID, PDF, false);
        foreach($files as $file){
        $file = wp_get_attachment_url($file);
        }
    ?>
        <li><a href="<?php echo $file; ?>" target="_blank"><?php the_title(); ?></a></li>
    <?php elseif(post_custom('URL')): ?>
        <li><a href="<?php echo nl2br(get_post_meta($post->ID, 'URL', true)); ?>" target="_blank"><?php the_title(); ?></a></li>
    <?php else: ?>
        <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    <?php endif; ?>
<?php endwhile; endif; ?>

以上でデモのような表示は可能です。

これで完成としたいところですが、ここで1つ問題が・・・
直接個別ページ(single.phpやpage.phpなど)にアクセスしたらどうでしょう。

こういうときの対処として、そのページにPDFまたはURLのリンクを貼っておくと対応はできますよね。

個別ページの対処

single.phpやpage.phpなどに以下をコピペ。

<?php if(have_posts()): while(have_posts()): the_post(); ?>
<h2><?php the_title(); ?></h2>
<?php if(post_custom('PDF')): ?>
<?php
    $files = get_post_meta($post->ID, PDF, false);
    foreach($files as $file){
    $file = wp_get_attachment_url($file);
    }
?>
    <p>PDFが表示されます<br><a href="<?php echo $file; ?>" target="_blank"><?php the_title(); ?></a></p>
<?php elseif(post_custom('URL')): ?>
    <p>外部サイトへ移動します<br><a href="<?php echo nl2br(get_post_meta($post->ID, 'URL', true)); ?>" target="_blank"><?php the_title(); ?></a></p>
<?php else: ?>
    <?php the_title(); ?>
<?php endif; ?>
<?php endwhile; endif; ?>

一覧表示のphpを少し編集しただけですけど、こうしておけば検索などにヒットして直接ページにアクセスした際の対処になりますね。

実際に表示は以下のようになります。

PDFの場合 URLの場合 通常(PDF、URLどちらでもない)の場合

以上で完成です。

まとめ

新着情報でPDFをリンクしたいとか、記事じゃなくURLに飛ばしたいなどよくある要件だと思います。