サポート » 使い方全般 » 複数回filter_whereを使いたい

  • 解決済 ensonoda

    (@ensonoda)


    お世話になっております。
    http://ja.forums.wordpress.org/topic/23169?replies=3で、
    カスタム投稿の指定した期間の投稿を表示させる事に成功しました。
    これを繰り返し行いたいのですが、filter_whereが重複しているせいなのか、
    一度目のループは求める結果が表示されるのですが、2度目のループの際は表示されません。

    <?php
    	//resultsには年が入ってきています。
    foreach ($results as $result) :
    
    	$resultcnt =1;
    	$resultyear =  $result->year;
    	//期間を指定するのに使用しています
    	$start_date = $resultyear.'-09-01';
    	$end_date = ($resultyear+1).'-08-31';
    
    	function filter_where( $where='' ) {
    		global $start_date,$end_date;
    		$where .= "AND post_date >= '$start_date' AND post_date < '$end_date'";
    		return $where;
    	}
    add_filter('posts_where', 'filter_where');?>
    	<?php query_posts('post_type=gallerys&order=ASC&showposts=-1');?>
    	<?php if(have_posts()):?>
    
    		<?php while(have_posts()):the_post();?>
    			<?php the_title();?>
    
    		<?php endwhile; wp_reset_query();?>
    	<?php endif; ?>
    	</div><!--tab-->
    <?php remove_action('posts_where', 'filter_where');?>
    <?php
    	$resultcnt++;
    	endforeach;
    	 ?>

    filter_whereではない方法はあるのでしょうか?
    どなたかご存じの方いらっしゃいましたら教えて下さい。
    宜しくお願い致します。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • pluto1234

    (@pluto1234)

    普通、ループの中で関数定義はしません。
    $resultcnt の初期設定の位置が変です。
    $resultcnt++; も wp_reset_postdata() の直後の方がいいのかもしれません。それは、その変数をどのように使うのかによります。
    この場合は、query_posts() よりは get_posts() の方が適切です(suppress_filters=0 追加)。

    ★functions.php

    function filter_where( $where='' ) {
        global $start_date,$end_date;
        $where .= "AND post_date >= '$start_date' AND post_date < '$end_date'";
        return $where;
    }
    <?php
    //resultsには年が入ってきています。
    $resultcnt =1;
    foreach ($results as $result) :
    
        $resultyear =  $result->year;
        //期間を指定するのに使用しています
        $start_date = $resultyear.'-09-01';
        $end_date = ($resultyear+1).'-08-31';
    
        add_filter('posts_where', 'filter_where');
        $my_posts = get_posts('post_type=gallerys&order=ASC&showposts=-1&suppress_filters=0');
        remove_action('posts_where', 'filter_where');
    
        if ($my_posts) :
            foreach ($my_posts as $post) :
                setup_postdata($post);
                the_title();
            endforeach;
            wp_reset_postdata();
        endif;
    ?>
        <!-- ???</div> tab-->
    <?php
        $resultcnt++;
    endforeach;
    ?>

    トピック投稿者 ensonoda

    (@ensonoda)

    pluto1234様

    ご回答、ありがとうございます。
    おかしなところもご指摘下さり、ありがとうございます。
    頂いた内容で行ったところ、望み通りの動作が実現出来ました。
    ありがとうございました!

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「複数回filter_whereを使いたい」には新たに返信することはできません。