• 解決済 nagaib

    (@nagaib)


    カスタムフィールドでラジオボタンを作り、ラジオボタンの値が”表示、非表示”で、表示にチェックが入った記事のみ(記事数3つまで)表示したいと思っています。

    また、表示にチェックが入った記事のテキストフィールドにある項目「サイトURL」にURLが入力された場合と入力無しの場合のリンク先もそれぞれリンク先を変えたいです。

    下記コードでうまくいきません。

    どなたか解決方法をご存知でしたら、どうかご教授ください。
    よろしくお願いします。

    <div id="pickupbox">
    
    <?php query_posts(array('post_type' => array('news'), 'posts_per_page' => 3)); ?>
    <?php if(have_posts()): while(have_posts()): the_post(); ?>
    
    <?php $tai = get_post_meta($post->ID,"ピックアップ",true); ?>
    <?php if ($tai == '表示') : ?>
    
    <?php if ( post_custom('サイトURL') ) : ?>
    
    <div class="input">
    
    <?php
    $attach_id = get_post_meta($post->ID,"画像",true);
    $image_info = wp_get_attachment_image_src( $attach_id  , 'full' );
    list( $url, $w, $h) = $image_info;
    $alt = get_post_meta($attach_id , '_wp_attachment_image_alt', true);
    ?>
    <div class="pickupimg">
    <a href="<?php echo post_custom('サイトURL'); ?>" title="<?php the_title(); ?>の詳細へ" target="_blank">
    <img class="zzzz" src="<?php echo $url; ?>" alt="<?php echo $alt; ?>" width="300px" height="160px" /></a>
    <!-- /pickupimg --></div>
    
    <p class="caption">
    <?php echo get_the_date('Y/m/d'); ?>
    </p>
    <p class="caption2">
    <a href="<?php echo post_custom('サイトURL'); ?>" title="<?php the_title(); ?>の詳細へ" target="_blank">
    <?php the_title(); ?></a>
    </p>
    <p class="more">
    <a href="<?php echo post_custom('サイトURL'); ?>" title="<?php the_title(); ?>の詳細へ" target="_blank">もっと見る</a>
    </p>
    
    <!-- /input --></div>
    
    <?php else: ?>
    
    <div class="input">
    
    <?php
    $attach_id = get_post_meta($post->ID,"画像",true);
    $image_info = wp_get_attachment_image_src( $attach_id  , 'full' );
    list( $url, $w, $h) = $image_info;
    $alt = get_post_meta($attach_id , '_wp_attachment_image_alt', true);
    ?>
    <div class="eventimg">
    <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>の詳細へ">
    <img class="zzzz" src="<?php echo $url; ?>" alt="<?php echo $alt; ?>" width="300px" height="160px" /></a>
    <!-- /.eventimg --></div>
    
    <p class="caption">
    <?php echo get_the_date('Y/m/d'); ?>
    </p>
    <p class="caption2">
    <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>の詳細へ">
    <?php the_title(); ?></a>
    </p>
    <p class="more">
    <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>の詳細へ">もっと見る</a>
    </p>
    
    </div>
    
    <?php endif; ?>
    
    <?php else : ?>
    
    <?php endif; ?>
    
    <?php endwhile; endif; ?>
    
    <div style="clear:both;"></div>
    <!-- /pickupbox --></div>
4件の返信を表示中 - 1 - 4件目 (全4件中)
  • モデレーター jim912

    (@jim912)

    下記コードでうまくいきません。

    具体的に何がどのようにうまくいっていないのか説明願います。

    トピック投稿者 nagaib

    (@nagaib)

    jim912さん、お返事ありがとうございます。
    説明不足ですみません。

    表示にチェックが入った記事を下記のように横並びに3個表示したいと思っています。

    ■■■■■■  ■■■■■■  ■■■■■■
    ■ 写真 ■  ■ 写真 ■  ■ 写真 ■
    ■    ■  ■    ■  ■    ■
    ■■■■■■  ■■■■■■  ■■■■■■
    公開日     公開日     公開日
    タイトル    タイトル

    しかし、テスト的に表示、非表示の記事をいくつかアップしてみると
    左に1個が表示され、右側2個が空白になったりと不具合がでます。

    非表示にチェックが入った場合は記事を抜くのではなく空白になっているのでしょうか?

    詳しくないもので、解決法が全く分かりません。

    ご教授いただけると幸いです。
    どうぞ、よろしくお願いいたします。

    モデレーター jim912

    (@jim912)

    今のロジックですと、

    1. 投稿タイプが newsのものから、公開日時の新しい順に記事を3件取得
    2. 取得した3件をループ
    3. カスタムフィールドの「ピックアップ」が「表示」として設定されているときのみ、画像やタイトルを表示

    となっています。このため、1で取得した3件のうち「ピックアップ」が「表示」に設定されているものがあると、その分、抜けが発生してしまいます。

    これを防ぐには、3件取得する段階で、「ピックアップ」が「表示」に設定されているものという条件の指定が必要になります。
    この条件の指定は、WP_Queryのカスタムフィールドパラメータと同じ指定ができますので、これを用いてください。
    この指定があれば、

    <?php $tai = get_post_meta($post->ID,"ピックアップ",true); ?>
    <?php if ($tai == '表示') : ?>

    の分岐処理は不要になります。

    トピック投稿者 nagaib

    (@nagaib)

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

    そういう事だったのですね。
    教えていただいた通りに修正したところ
    表示にチェックをつけたもののみ表示されるようになりました!

    ネットから同じ事をやっている人を見つけて、
    カスタマイズするくらいしか理解できていないレベルだったのですが、
    丁寧に教えていただき、少し前進できそうです。

    本当に感謝しております。
    ありがとうございました。

    念のため修正したコードを記載しておきます。

    <div id="pickupbox">
    
    <?php $args = array(
    	'post_type' => 'news',
    	'posts_per_page' => 3,
    	'meta_query' => array(
    		array(
    			'key' => 'ピックアップ',
    			'value' => '表示'
    		)
    	)
     ); ?>
    <?php query_posts( $args ); ?>
    
    <?php if(have_posts()): while(have_posts()): the_post(); ?>
    
    <?php if ( post_custom('サイトURL') ) : ?>
    
    <div class="input">
    
    <?php
    $attach_id = get_post_meta($post->ID,"画像",true);
    $image_info = wp_get_attachment_image_src( $attach_id  , 'full' );
    list( $url, $w, $h) = $image_info;
    $alt = get_post_meta($attach_id , '_wp_attachment_image_alt', true);
    ?>
    <div class="pickupimg">
    <a href="<?php echo post_custom('サイトURL'); ?>" title="<?php the_title(); ?>の詳細へ" target="_blank">
    <img class="zzzz" src="<?php echo $url; ?>" alt="<?php echo $alt; ?>" width="300px" height="160px" /></a>
    <!-- /pickupimg --></div>
    
    <p class="caption">
    <?php echo get_the_date('Y/m/d'); ?>
    </p>
    <p class="caption2">
    <a href="<?php echo post_custom('サイトURL'); ?>" title="<?php the_title(); ?>の詳細へ" target="_blank">
    <?php the_title(); ?></a>
    </p>
    <p class="more">
    <a href="<?php echo post_custom('サイトURL'); ?>" title="<?php the_title(); ?>の詳細へ" target="_blank">もっと見る</a>
    </p>
    
    <!-- /input --></div>
    
    <?php else: ?>
    
    <div class="input">
    
    <?php
    $attach_id = get_post_meta($post->ID,"画像",true);
    $image_info = wp_get_attachment_image_src( $attach_id  , 'full' );
    list( $url, $w, $h) = $image_info;
    $alt = get_post_meta($attach_id , '_wp_attachment_image_alt', true);
    ?>
    <div class="eventimg">
    <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>の詳細へ">
    <img class="zzzz" src="<?php echo $url; ?>" alt="<?php echo $alt; ?>" width="300px" height="160px" /></a>
    <!-- /.eventimg --></div>
    
    <p class="caption">
    <?php echo get_the_date('Y/m/d'); ?>
    </p>
    <p class="caption2">
    <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>の詳細へ">
    <?php the_title(); ?></a>
    </p>
    <p class="more">
    <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>の詳細へ">もっと見る</a>
    </p>
    
    </div>
    
    <?php endif; ?>
    
    <?php endwhile; endif; ?>
    
    <?php wp_reset_query(); ?>
    
    <div style="clear:both;"></div>
    <!-- /pickupbox --></div>
4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「カスタムフィールドでラジオボタンの表示にチェックが入った記事のみ表」には新たに返信することはできません。