複数選択チェックボックスで選択された項目によって内容を変えるにはどうしたらいいの? - Custom Field GUI Utility の FAQ

本当は Movable Type に集中したいんだけど、ブログに質問を頂くので Custom Field GUI Utility 関係(当ブログで公開している WordPress のプラグインです)の記事を書いてしまう今日この頃です。

さて、当ブログに以下のような質問を頂きました。

複数選択チェックボックス(共通表示)で、 チェックを入れ出力された値に、該当ページのURLを自動的にリンク設定したいのです。 この値だったらこのURLにリンクを貼る、なんてことができるでしょうか。 (略)

この解決策を書いておきます。

設定

今回のサンプルでは、以下のような「conf.ini」を用意しました。

[website]
fieldname = 選択してください
type = multi_checkbox
class = post
value = Yahoo!#Google#tinybeans
sample = 良く使うサイトを選択してください。

管理画面では次のように表示されます。

ishot-100528-1.png

ちなみに、Custom Field GUI Utility では、選択された項目がカンマ区切りのテキストとして保存される仕様になっています。

やりたいこと

今回やりたいことは、このような複数選択チェックボックスにおいて、選択された項目によって表示させる内容を変える、というものです。

Yahoo! が選択された場合
http://www.yahoo.co.jp/ へのリンク
Google が選択された場合
http://www.google.com/ へのリンク
tnybeans が選択された場合
http://www.tinybeans.net/blog/ へのリンク

サンプル

これを実現する方法はいくつかあると思いますが、今回は応用しやすくするために、

  • カスタムフィールドの値を取得し、
  • カンマで区切って配列として格納し、
  • それをループで回して判定する

という方法をとり、結果をカンマ区切りで表示させます。

コードの説明は、該当する行の前の行のコメントを参照してください。

<?php 
    /* その投稿に属するカスタムフィールドの値を文字列として取得 */
    $custom = get_post_meta($post->ID, 'website', true);
    /* カスタムフィールドの値をカンマで区切って配列として変数に格納 */
    $websites = explode(',', $custom);
    /* 出力結果を格納する変数の初期化 */
    $out = '';
    /* ループの回数をカウントする変数の初期化 */
    $count = 0;
    /* foreachで配列$websitesの値を一つずつ$websiteに代入して処理 */
    foreach ($websites as $website) {
        /* 要素が二つ目以上の場合はカンマで区切る */
        if ($count > 0) {
            $out .= ',';
        }
        /* Yahoo!が選択されていたら、Yahoo! Japanへのリンクを出力 */
        if ($website == 'Yahoo!') {
            $out .= '<a href="http://www.yahoo.co.jp">Yahoo! Japan</a>';
        /* Googleが選択されていたら、Googleへのリンクを出力 */
        } elseif ($website == 'Google') {
            $out .= '<a href="http://www.google.com">Google</a>'; 
        /* tinybeansが選択されていたら、かたつむりくんのWWWへのリンクを出力 */
        } elseif ($website == 'tinybeans') {
            $out .= '<a href="http://www.tinybeans.net">かたつむりくんのWWW</a>';
        }
        /* カウント数を1増やす */
        $count++;
    }
    /* 結果を出力 */
    echo $out;
?>

以上です。参考になりましたでしょうか。

  • このエントリーをはてなブックマークに追加
Just a second...