サポート » 使い方全般 » カスタムフィールドテンプレートでフィールドに値が入っていない場合(画

  • カスタムフィールドテンプレートを使用して、写真や本文、会場、参加費、定員、料金、申込み方法…などの項目があるイベント情報を作ろうとしています。

    下記ページを参考に、本文や会場、参加費等はフィールドに値が入っていない場合はその値が絡むテーブルの行ごと(<tr>から</tr>まで)非表示にできたのですが、pdfと画像についてが非表示にできず困っています。
    http://ja.forums.wordpress.org/topic/2378?replies=7

    【PDFの場合】
    カスタムフィールドテンプレートのファイルアップボタンでアップしたPDFのURLを取得し、タイトルでリンクするようにしています。フィールドに値が入っていなくてもタイトルが表示され、リンク先も空白のページが表示されてしまいます。

    <?php
    $files = get_post_meta($post->ID, PDF, false);
    foreach($files as $file){
    $file = wp_get_attachment_url($file);
    }
    ?>
    <tr>
    <td>” target=”_blank”><?php the_title(); ?></td>
    </tr>

    【画像の場合】
    ファイルアップボタンでアップした画像をサイズ指定して表示するようにしていますが、こちらもフィールドに値が入っていない場合は非表示にしたいのですが、値が入っていなくてもバツ印で表示されてしまいます。

    <?php
    $attach_id = get_post_meta($post->ID,”画像1″,true);
    $image_info = wp_get_attachment_image_src( $attach_id , ‘full’ );
    list( $url, $w, $h) = $image_info;
    $h = intval(200 * ( $h / $w ));
    $alt = get_post_meta($attach_id , ‘_wp_attachment_image_alt’, true);
    ?>
    <img class=”zzzz” src=”<?php echo $url; ?>” alt=”<?php echo $alt; ?>” width=”200px” height=”146px” />

    どなたかお力をかして頂けると幸いです。
    どうぞ宜しくお願いします。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • リンク先のページに忠実に、if~endifを忘れないように追加。

    【PDFの場合】

    <?php
    $files = get_post_meta($post->ID, PDF, false);
    foreach($files as $file):
        $file = wp_get_attachment_url($file);
        if ( !empty( $file ) ) :
    ?>
        <tr>
        <td><a href="<?php echo $file ?>" target="_blank"><?php the_title(); ?></a></td><br>
        </tr>
    <?php
        endif;
    endforeach;
    ?>

    トピック投稿者 nagaib

    (@nagaib)

    kurosquareさん

    ご回答ありがとうございます。

    教えていただいた通りif~endifを追記したところ、非表示にすることができました。
    また、画像のほうも同じようにif~endifを追記し、実現することができました。

    いろんなことが可能なのですね。
    今後は、勉強をして自分でも対応できるように頑張りたいです。
    本当にありがとうございます。

    トピック投稿者 nagaib

    (@nagaib)

    上記で画像も実現することができたと書かせてもらったのですが、思い違いだったようです。(pdfの場合は無事に実現する事ができました。)
    kurosquareさんに教えていただいたpdfの場合を参考に、画像の場合も下記のように記述したのですが、フィールドに画像ファイルがある時も、逆に非表示になってしまうようです。

    どなたかお力をかして頂けると幸いです。
    どうぞ宜しくお願いします。

    <?php
    $attach_id = get_post_meta($post->ID,”画像1″,true);
    $image_info = wp_get_attachment_image_src( $attach_id , ‘full’ );
    list( $url, $w, $h) = $image_info;
    $h = intval(200 * ( $h / $w ));
    $alt = get_post_meta($attach_id , ‘_wp_attachment_image_alt’, true);
    foreach($files as $file):
    $file = wp_get_attachment_url($file);
    if ( !empty( $file ) ) :
    ?>
    <img class=”zzzz” src=”<?php echo $url; ?>” alt=”<?php echo $alt; ?>” width=”200px” height=”146px” />
    <?php
    endif;
    endforeach;
    ?>

    上記だと$filesが常にNULL(空っぽ)なので、$filesを$attach_idに代えてみるといいかもです。

    <?php
    $attach_id = get_post_meta($post->ID,"画像1",true);
    foreach($attach_id as $file):
        list( $url, $w, $h) = wp_get_attachment_image_src( $attach_id , 'full' );
        $h = intval(200 * ( $h / $w ));
        $alt = get_post_meta($attach_id , '_wp_attachment_image_alt', true);
        $url = wp_get_attachment_url($file);
        if ( !empty( $file ) ) :
    ?>
    <img class="zzzz" src="<?php echo $url; ?>" alt="<?php echo $alt; ?>" width="200px" height="146px" />
    <?php
        endif;
    endforeach;
    ?>

    `

    トピック投稿者 nagaib

    (@nagaib)

    kurosquareさん、ご回答ありがとうございます。
    覚えて頂いていて、ありがとうございます。うれしいです。

    教えていただいたとおりに書き換えたのですが、フィールドに画像ファイルがある時でも非表示になってしまうようです。

    前後の記述とかに問題があるのでしょうか?
    ちなみに全文を書いておきます。

    phpの知識がないもので、こちらを頼りになんとか状況です。
    何か考えられるアドバイス等いただければうれしいです。

    <?php get_header(); ?>

    <div id=”econtent”>

    <?php if(have_posts()):
    while(have_posts()): the_post(); ?>

    <div id=”sinfobox”>
    <?php if (function_exists(‘get_cat_icon’)) get_cat_icon(); ?>
    <h3><?php the_title(); ?></h3>

    <div id=”stext”>
    <?php echo nl2br(get_post_meta($post->ID,”本文”,true)); ?>
    <!– /#stext –></div>

    <div class=”item”>

    <table class=”postmeta”>
    <?php
    $metakeys = array(‘日時’, ‘会場’, ‘講師’, ‘対象’, ‘定員’, ‘参加者’, ‘締切日’, ‘参加費’, ‘主催’, ‘企画・運営’, ‘共催’, ‘協賛’, ‘後援’, ‘協力’, ‘その他’, ‘お申込み・お問合せ’ ); // 表示したいカスタムフィールドのキーを配列に格納
    foreach( $metakeys as $key ) :
    $value = get_post_meta( $post->ID, $key, true );
    $value = esc_html( $value ); // WP2.8+
    // $value = wp_specialchars( $value );
    $value = nl2br($value);
    if ( !empty( $value ) ) :
    ?>
    <tr>
    <th scope=”row”><?php echo $key; ?></th>
    <td><?php echo $value; ?></td>
    </tr>
    <?php
    endif;
    endforeach;
    ?>
    </table>

    <table class=”cautions”>
    <tr>
    <td>
    ※事務連絡以外には使用いたしません。
    </td>
    </tr>
    </table>

    <?php
    $files = get_post_meta($post->ID, PDF, false);
    foreach($files as $file):
    $file = wp_get_attachment_url($file);
    if ( !empty( $file ) ) :
    ?>

    <table class=”pdf”>
    <tr>
    <td>” target=”_blank”><?php the_title(); ?></td>
    </tr>
    <tr>
    <td>(PDFファイルをご覧いただく為には、Adobe(R)ReaderTMが必要です。下記アイコンをクリックしてダウンロードいただけます。)
    </td>
    </tr>
    <tr>
    <td><img src=”<?php bloginfo(‘template_url’); ?>/images/bnn_pdf.gif” />
    </td>
    </tr>
    </table>

    <?php
    endif;
    endforeach;
    ?>

    <!– /#item –></div>

    <div class=”simg”>
    <?php
    $attach_id = get_post_meta($post->ID,”画像1″,true);
    foreach($attach_id as $file):
    list( $url, $w, $h) = wp_get_attachment_image_src( $attach_id , ‘full’ );
    $h = intval(200 * ( $h / $w ));
    $alt = get_post_meta($attach_id , ‘_wp_attachment_image_alt’, true);
    $url = wp_get_attachment_url($file);
    if ( !empty( $file ) ) :
    ?>
    <img class=”zzzz” src=”<?php echo $url; ?>” alt=”<?php echo $alt; ?>” width=”200px” height=”146px” />
    <?php
    endif;
    endforeach;
    ?>

    <?php
    $attach_id = get_post_meta($post->ID,”画像2″,true);
    foreach($attach_id as $file):
    list( $url, $w, $h) = wp_get_attachment_image_src( $attach_id , ‘full’ );
    $h = intval(200 * ( $h / $w ));
    $alt = get_post_meta($attach_id , ‘_wp_attachment_image_alt’, true);
    $url = wp_get_attachment_url($file);
    if ( !empty( $file ) ) :
    ?>
    <img class=”zzzz” src=”<?php echo $url; ?>” alt=”<?php echo $alt; ?>” width=”200px” height=”146px” />
    <?php
    endif;
    endforeach;
    ?>

    <!– /#simg –></div>
    <div style=”clear:both;”></div>
    <!– /#sinfobox –></div>
    <?php endwhile; endif; ?>
    <!– /#econtent –></div>

    <?php get_footer(); ?>

    すみません。おそらく
    $attach_id = get_post_meta($post->ID,"画像1",true);
    ではなくて、
    $attach_id = get_post_meta($post->ID,"画像1",false);
    ですね。

    参考:get_post_meta

    それから
    $url = wp_get_attachment_url($file);
    は無くてもよさそうな…。

    整理しまして、エスケープも忘れずに、以下でどうでしょうか。

    <?php
    $attach_id = get_post_meta($post->ID,"画像1",false);
    foreach($attach_id as $file):
      if ( !empty( $file ) ) :
        list( $url, $w, $h) = wp_get_attachment_image_src( $attach_id , 'full' );
        $h = intval(200 * ( $h / $w ));
        $alt = get_post_meta($attach_id , '_wp_attachment_image_alt', true);
    ?>
    echo '<img class="zzzz" src=". clean_url($url) ." alt=". the_title_attribute($alt) ." width="200" height=".  the_title_attribute($h). >" />';
      endif;
    endforeach;
    ?>

    トピック投稿者 nagaib

    (@nagaib)

    kurosquareさん、ご回答ありがとうございます。
    何度もお返事いただけて、本当に感謝しております。

    教えていただいたとおりに書き換えたのですが、なぜかページを表示できません。となりました。

    $attach_id = get_post_meta($post->ID,”画像1″,true);
    ではなくて、
    $attach_id = get_post_meta($post->ID,”画像1″,false);
    というのを教えて頂いたので、
    試しに前回のコードのまま、trueをfalseに書き換えたところ上手くいったようです。

    <?php
    $attach_id = get_post_meta($post->ID,”画像1″,false);
    foreach($attach_id as $file):
    list( $url, $w, $h) = wp_get_attachment_image_src( $attach_id , ‘full’ );
    $h = intval(200 * ( $h / $w ));
    $alt = get_post_meta($attach_id , ‘_wp_attachment_image_alt’, true);
    $url = wp_get_attachment_url($file);
    if ( !empty( $file ) ) :
    ?>
    <img class=”zzzz” src=”<?php echo $url; ?>” alt=”<?php echo $alt; ?>” width=”200px” height=”146px” />
    <?php
    endif;
    endforeach;
    ?>

    なくてもよさそうなコードについてですが、
    $url = wp_get_attachment_url($file);

    他のところで参考にしたコードを編集する知識がないため、そのままコピーして使っていたのですが、確かにリンクはしていないので必要ないですね。取ってみます。

    下記もなんなのかよくわかっていません。
    $h = intval(200 * ( $h / $w ));

    アップロードした画像のサイズがバラバラでも、サイズを統一して(200px×146px)表示させたいのと画像のアップロードフィールドを3つ用意しているので、フィールドに値が入っていない場合は非表示にしたいだけなので、こちらも必要ないかもです。

    これから勉強が必要なようです。

    いろいろ知恵をおかしくださり、ありがとうございました。
    前に進めそうです。

    解決して良かったです。

    蛇足ですが、私の書いた問題アリなコードについての訂正です。
    8行目の?>が余計でした。それから9行目が間違いで、直すなら
    echo '<img class="zzzz" src="'. clean_url($url) .'" alt="'. the_title_attribute($alt) .'" width="200" height="'. the_title_attribute($h). '>" />';
    ですね。

    あと
    $h = intval(200 * ( $h / $w ));
    は、縦横比を損なわずに横幅を200pxにした場合に、高さが何ピクセルになるかを求めています。

    今後もまた疑問点がありましたら、こちらのフォーラムに書き込んでみてください。ヒントが見つかるかもしれません。

    トピック投稿者 nagaib

    (@nagaib)

    kurosquareさん
    ご回答ありがとうございます。

    こちらのフォーラムでは、解決につながる回答をたくさん頂き本当に感謝しております。
    また直接質問したものだけではなく、検索でこちらのフォーラムの回答に辿り着く事も多く、本当にこちらの存在は大きいです。

    本当にありがとうございました。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • トピック「カスタムフィールドテンプレートでフィールドに値が入っていない場合(画」には新たに返信することはできません。