本当は Movable Type に集中したいんだけど、ブログに質問を頂くので Custom Field GUI Utility 関係(当ブログで公開している WordPress のプラグインです)の記事を書いてしまう今日この頃です。 さて、当ブログに以下のような質問を頂きました。 複数選択チェックボックス(共通表示)で、 チェックを入れ出力された値に、該当ページのURLを自動的にリンク設定したい...
本当は Movable Type に集中したいんだけど、ブログに質問を頂くので Custom Field GUI Utility 関係(当ブログで公開している WordPress のプラグインです)の記事を書いてしまう今日この頃です。
さて、当ブログに以下のような質問を頂きました。
複数選択チェックボックス(共通表示)で、 チェックを入れ出力された値に、該当ページのURLを自動的にリンク設定したいのです。 この値だったらこのURLにリンクを貼る、なんてことができるでしょうか。 (略)
この解決策を書いておきます。
今回のサンプルでは、以下のような「conf.ini」を用意しました。
[website]
fieldname = 選択してください
type = multi_checkbox
class = post
value = Yahoo!#Google#tinybeans
sample = 良く使うサイトを選択してください。
管理画面では次のように表示されます。
ちなみに、Custom Field GUI Utility では、選択された項目がカンマ区切りのテキストとして保存される仕様になっています。
今回やりたいことは、このような複数選択チェックボックスにおいて、選択された項目によって表示させる内容を変える、というものです。
これを実現する方法はいくつかあると思いますが、今回は応用しやすくするために、
という方法をとり、結果をカンマ区切りで表示させます。
コードの説明は、該当する行の前の行のコメントを参照してください。
<?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="">かたつむりくんのWWW</a>';
}
/* カウント数を1増やす */
$count++;
}
/* 結果を出力 */
echo $out;
?>
以上です。参考になりましたでしょうか。