サポート » 使い方全般 » カスタムフィールド(画像)の値があるときだけループ内に10件表示

  • 解決済 komatterwww

    (@komatterwww)


    index.phpにて

    表題の通り、photoというカスタムフィールド(画像)の値があるときだけループ内に10件表示させたくて、
    下記のように書きました。

    ———-

    <?php query_posts(‘post_type=post&orderby=rand&posts_per_page=10&nopaging=false’); ?>
    <?php if(have_posts()): while(have_posts()): the_post(); ?>
    <?php if(get_post_meta($post->ID,’photo’, true)):?>
    ここにループ
    <?php endif;?>
    <?php endwhile; ?>
    <?php else: ?>
    データがありません
    <?php endif; ?>
    <?php wp_reset_query(); ?>

    ———-

    結果、10件以上(全て)表示されてしまいます。
    最初の行の「&nopaging=false」がクセモノのようで、
    しかし、「&nopaging=false」を削除すると10件以上あるにも関わらず何故か約3件~6件がランダムで表示されます。

    本気で困ってます。TT
    どなたかご教授下さい。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック投稿者 komatterwww

    (@komatterwww)

    わかりづらかったかもしれません。改めて投稿させていただきます。

    カスタムフィールドテンプレートで画像をアップロードできるようにしました。
    meta_keyがphotoです。

    このphotoに画像をアップロードした投稿のみ
    query_postsで10件ランダムにトップページで抽出したいのです。

    どなたか教えてくださいTT

    「&nopaging=false」を削除すると10件以上あるにも関わらず何故か約3件~6件がランダムで表示されます。

    query_postsで「ランダムで10件」に絞り込んだ後、さらに「カスタムフィールドの値を含む」投稿を絞り込んでいるからなので、絞り込みを1回にしてみては?

    テンプレートタグ/query_posts – WordPress Codexなどを参考に未検証ですが以下など。

    <?php
    // クエリ
    query_posts('post_type=post&posts_per_page=10&meta_key=photo');
    
    // ループ
    if(have_posts()):
    	while(have_posts()):
    		the_post();
    		//ここにループ
    	endwhile;
    else:
    	//データがありません
    endif;
    
    // クエリをリセット
    wp_reset_query();
    ?>
    トピック投稿者 komatterwww

    (@komatterwww)

    kurosquare さん

    ありがとうございます。また、返信遅れてごめんなさい。
    kurosquareの教えてくださったコードで試してみましたが、駄目でした。

    10件表示にはなるんですが、photoの値を持っていない投稿も表示されています。
    &meta_key=photoってのが効いていない感じの出力表示になってしまいます。

    こんにちは、
    posts_per_page=10を使わないで、

    <?php
    $i 	= 0;
    $max 	= 10;
    $args 	= array('meta_key' => 'photo' 		               //メタキーがフォトの
    				, 'post_type' => 'post'		//投稿を
    				, 'post_status' => 'public'	//公開しているものから
    				, 'orderby' => 'rand' 		//ランダムに
    				, 'nopaging' => true 		//ページングをしないで、
    				, 'post__not_in' => get_option( 'sticky_posts' )
    					//stickyは、除外して
    					//抽出してね
    				);
    query_posts($args);
    	if( have_posts() ){
    		while(have_posts()){
    			the_post();
    			the_title('<p>','</p>');
    			$i++;
    			/* 必要な件数確保したら、ループを抜ける*/
    			if( $i > $max ){ break; }
    		}
    	}
    	/* 足りない時のダミー*/
    	if( $i < $max ){
    		for ( $i; $i < $max; $i++ ){
    			echo '<p>none</p>';
    		}
    	}
    wp_reset_query(); ?>

    トピック投稿者 komatterwww

    (@komatterwww)

    nobita さん

    ご丁寧に教えていただきありがとうございます。
    無事解決できました! 本当に本当にありがとうございました。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「カスタムフィールド(画像)の値があるときだけループ内に10件表示」には新たに返信することはできません。