サポート » プラグイン » カスタムフィールドテンプレート / 値が一致したら画像表示

  • 解決済 gcr005

    (@gcr005)


    お世話になります。

    カスタムフィールドテンプレートで
    チェックボックスを選んだ値だけ画像表示したいのですが、
    うまくいきません…。

    もう少し詳しく言いますと、
    1つのキー対して、5つの値があります。
    それらを表(テーブルとか)にして
    選んだ値の箇所だけ画像を表示したいのです。

    どなたか教えていただけないでしょうか。
    よろしくお願い致します。

    環境は、mac、ブラウザはfirefox、wordpressのバージョンは、3.3.1です。
    よろしくお願い致します。

15件の返信を表示中 - 1 - 15件目 (全20件中)
  • モデレーター Takuro Hishikawa

    (@hissy)

    ここは誰かにプログラムの作成を依頼するところではありません。うまく行っていないコードを投稿してください。そうすれば、問題点を誰かが指摘してくれるでしょう。

    トピック投稿者 gcr005

    (@gcr005)

    返信遅くなりすいません。
    またおっしゃるとおりです。
    申し訳リありませんでした。

    改めまして、
    カスタムフィールドで投稿して
    single.phpに表を作成します。

    チェックボックスで5つの項目の中から選んだ箇所に
    ○×の画像を表示するというものです。
    (チェックしたら○、しなかったら×を表示します)

    現在、「チェックしたら○の画像を表示し、しなければ何も表示しない」
    ということは上手くいっております。
    以下は、5項目の内の一つのコードです。
    ※以下、やること2〜やること5まで続きます。

    <?php
    $hoges = (array)post_custom(‘チェックリスト’);
    foreach ($hoges as $hoge) {
    switch ($hoge) {
    case ‘やること1’:
    echo “<img src=’maru.jpg’ />\n”;
    break;
    }
    }
    ?>

    この状態から、チェックしたら○、しなかったら×を表示したいのですが、
    以下のコードで上手くいきません。
    具体的には、一つの項目に○と×の両方が表示されてしまいます。

    <?php
    $hoges = (array)post_custom(‘チェックリスト’);
    foreach ($hoges as $hoge) {
    switch ($hoge) {
    case ‘やること1’:
    echo “<img src=’maru.jpg’ />\n”;
    break;
     default:
     echo “<img src=’batu.jpg’ />\n”;
    }
    }
    ?>

    どなたか教えて頂けないでしょうか。
    よろしくお願い致します。

    モデレーター Takuro Hishikawa

    (@hissy)

    問題ないように見えますが、var_dump($hoges)して確認してみてはいかがでしょうか。
    あと、post_custom()はキーに対する値が0件であればfalse、1件であれば文字列、2件以上であれば配列が返ってくるので、arrayにキャストしてらっしゃいますが、使いにくいです。get_post_metaであれば第3引数で返り値を文字列に強制できるので、扱い易いです。

    トピック投稿者 gcr005

    (@gcr005)

    hissy様
    お返事遅くなりました。
    教えて頂きありがとうございます!

    教えて頂いたvar_dump($hoges)は
    やりかたがわからないので
    色々調べながら今やっております。

    get_post_metaについて試していたのですが、
    以下のような感じでしょうか?
    結果としてはなにも表示されないようです。
    間違っているところを教えて頂けないでしょうか?

    <?php
    $hoges = get_post_meta($post->ID,”チェックリスト”,true);
    foreach ($hoges as $hoge) {
    switch ($hoge) {
    case ‘やること1’:
    echo “<img src=’maru.jpg’ />\n”;
    break;
     default:
     echo “<img src=’batu.jpg’ />\n”;
    }
    }
    ?>

    お忙しいところ申し訳ありませんがよろしくお願いします。

    モデレーター Takuro Hishikawa

    (@hissy)

    get_post_metaで第3引数でにtrueを渡した際は、上に書いた通り文字列が返ってきますので、foreach文は使えません。if文を使ってください。

    トピック投稿者 gcr005

    (@gcr005)

    お返事、ありがとうございます。

    以下で試してみましたら、
    elseの×の画像は表示されましたが、
    値が入っているところで○が表示されません。
    (全部×になってしまう)

    <?php
    $hoge = get_post_custom($post->ID,”チェックリスト”,true);
    if($hoge == ‘やること1’) :
    echo “<img src=’maru.jpg’ />\n”;
    else :
    echo “<img src=’batu.jpg’ />\n”;
    endif;
    ?>

    何度も申し訳ないですが、
    教えて頂けないでしょうか?

    モデレーター Takuro Hishikawa

    (@hissy)

    んん?そもそも、このコード、どのテンプレートのどの場所に入れてますか?
    コード自体は合っていると思いますので、$post->IDで表示しているページのIDが取得できていないのではないかと思います。一番無難な書き方は、

    while ( have_posts() ) : the_post();

    endwhile; endif;

    の間で、

    $hoge = get_post_custom(get_the_ID(),"チェックリスト",true);

    と書く方法です。

    トピック投稿者 gcr005

    (@gcr005)

    ありがとうございます!
    何度もすいません。

    上手くいきませんでした…。
    while ( have_posts() ) : the_post();

    endwhile; endif;
    の間にも入っているようです。

    hissy様のご指摘で気付いたのですが、
    実は、他の項目ございまして、
    画像の値があれば投稿された画像を表示、
    なければ仮の画像を表示というのを
    以下のようにして上手くいっております。

    <?php if (get_post_meta($post->ID,’画像’,true)): ?>
    <?php echo wp_get_attachment_link(get_post_meta($post->ID,”画像”,true),’medium’); ?>
    <?php else : ?>
    <img src=”no-image.jpg”>
    <?php endif; ?>

    これを活用して、これに加えて「値が等しい時は…」を指定したら
    いけるかと思いました。

    いただいたコードなども含め参考にさせて頂き、

    <?php if (get_post_meta($post->ID,’チェックリスト’,true)== ‘やること1’) : ?>
    <?php echo “<img src=’maru.jpg’ />\n”; ?>
    <?php else : ?>
    <img src=”batu.jpg”>
    <?php endif; ?>

    としましたが、×の場合の画像しか表示されません。
    このコードはどのあたりがおかしいでしょうか。

    何度もすいません、よろしくお願い致します。

    モデレーター Takuro Hishikawa

    (@hissy)

    これで試してください

    $meta_value = get_post_meta($post->ID,'チェックリスト',true);
    var_dump($meta_value);

    トピック投稿者 gcr005

    (@gcr005)

    ありがとうございます!

    こういうことでしょうか?
    真っ白になってしまうのですが…。
    どこがおかしいでしょうか?
    何度も申し訳ありません。

    <?php $list1 = get_post_meta($post->ID,’チェックリスト’,true);
    var_dump($list1 == ‘やること1’);
    echo “<img src=’maru.jpg’ />\n”; ?>
    <?php else : ?>
    <img src=”batu.jpg”>
    <?php endif; ?>

    モデレーター Takuro Hishikawa

    (@hissy)

    $meta_value = get_post_meta($post->ID,'チェックリスト',true);
    var_dump($meta_value);

    このコードをif文の前にそのまま貼り付けて、get_post_metaで目的の値が正しく取れているか確認してください。

    トピック投稿者 gcr005

    (@gcr005)

    早速、ありがとうございます。

    やってみましたら、プレビュー画面で
    該当の部分でstring(0)と出ました。

    これは値を取得できていないということでしょうか?

    何度もありがとうございます。
    すいませんがよろしくお願い致します。

    モデレーター Takuro Hishikawa

    (@hissy)

    少なくとも「やること1」とは入っていないですね。編集画面で、カスタムフィールド「チェックリスト」に何が保存されているか確認してください。

    トピック投稿者 gcr005

    (@gcr005)

    ありがとうございます。

    編集画面で見てみましたが、
    「やること1」にチェックして保存されています…。

    以下のように試してみたのですが、「チェックリスト」という項目に
    何か値があればということなら、

    <?php if (get_post_meta($post->ID,’チェックリスト’,true)) : ?>
    <?php echo “<img src=’maru.jpg’ />\n”; ?>
    <?php else : ?>
    <img src=”batu.jpg”>
    <?php endif; ?>

    ○は表示されますが、

    <?php if (get_post_meta($post->ID,’チェックリスト’,true) == ‘やること1’) : ?>
    <?php echo “<img src=’maru.jpg’ />\n”; ?>
    <?php else : ?>
    <img src=”batu.jpg”>
    <?php endif; ?>

    1行目のような値の指定の仕方では取得されません。
    値の取得の仕方は他にあるのでしょうか?

    本当に何度も申し訳ないです。
    宜しくお願いします。

    モデレーター Takuro Hishikawa

    (@hissy)

    「やること1」にチェックして保存されています…。

    という表現がよくわからないのですが、カスタムフィールドテンプレートなど、カスタムフィールドの入力を補佐するプラグインを入れてらっしゃいますか?

    とにかく、カスタムフィールドに”実際に”どんなデータが保存されているのかが分からないと、対処のしようがありません。お手数ですが、次のコードで、投稿に関連付けられたすべてのカスタムフィールドの値を確認してもらえますか?

    $custom_fields = get_post_custom();
    var_dump($custom_fields);
15件の返信を表示中 - 1 - 15件目 (全20件中)
  • トピック「カスタムフィールドテンプレート / 値が一致したら画像表示」には新たに返信することはできません。