サポート » 使い方全般 » 日時引数を使ったループのあとのループで日時引数を解除したい

  • 解決済 yossy8

    (@yossy8)


    http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/query_posts#.E6.97.A5.E6.99.82.E5.BC.95.E6.95.B0
    を参考に、未来の日付に絞った条件のループを作成しました。(その他条件もあり)
    同じページで、この条件のあと(うしろ)に、別のループもあるのですが、
    最初に設定した日時引数が解除されず、困っています。

    構成を説明しますと、

    表示したいページは、home.phpで生成されたトップページです。
    1つ目のループは、

    <?php
      function filter_where($where = '') {
        $where .= " AND post_date > '" . date('Y-m-d', strtotime('1 days')) . "'";
        return $where;
      }
    add_filter('posts_where', 'filter_where');
    global $query_string;
    query_posts($query_string . "&order=ASC&post_type=taikai-i");
    ?>
    				<?php if (have_posts()) : ?>
    					<?php while (have_posts()) : the_post(); ?>
    					<?php endwhile; ?>
    					<?php else : ?>
    				<?php endif; wp_reset_query(); ?>

    と記述しており、
    2つ目のループは、

    <?php query_posts('cat=27'); ?>
    <?php if(have_posts()):
    while(have_posts()): the_post(); ?>
    <?php the_content(); ?>
    <?php endwhile; endif; ?>

    です。

    これだと、2つ目の表示が、まったくされません。
    というのは、1つ目の条件の「未来の投稿」という条件がいきているようで、
    2つ目で表示したいカテゴリーID27番の記事の公開日を、未来の日付にすると表示されました。
    1つ目の条件で、wp_reset_query()を使っているのですが、使い方が悪いのでしょうか。
    アドバイスいただけると嬉しいです。
    よろしくお願い致します。

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

    (@yossy8)

    日時引数を解除できないので、
    応急処置として、
    公開日をずっと未来の日にしてみました。
    2100年とかにできたら安心でしたが、
    2040年くらいから先で更新できなかったので、(1970年になってしまう)
    2035年にしておきました。
    25年後に記事が表示されなくなる、ということになりますが・・・
    25年間このままではないはずなので・・・

    関数の最初に
    function filter_where($where = ”) {
    if ( !is_home() ) return;
    を加えて、2つ目のループは get_posts() で取得するとどうなりますか?

    トピック投稿者 yossy8

    (@yossy8)

    アドバイスありがとうございます。
    function filter_where($where = ”) {
    if ( !is_home() ) return;
    としてみましたが、なんだかすごい表示になってしまいだめでした。
    (すべての記事が何度も繰り返し表示されて、トップページが縦にとても長くなってしまいました)

    2つ目以降のループの条件が少し変わりました。
    2つ目、3つ目とループがあり、それぞれ、
    2つ目

    <?php query_posts($query_string . "&showposts=2&post_type=xxxxxxx"); ?>
    ループの記述

    3つ目

    <?php query_posts('pagename=xxxxxxx'); ?>
    ループの記述

    という感じです。

    この2つ目と3つ目のquery_postsを、get_postsで取得するには、
    query_postsをget_postsに差し替えるだけでよいのでしょうか?(知識が乏しくてすみません)

    ふと思ったのですが、
    1つ目の条件で「未来の投稿」としてるので、
    2つ目の条件で「過去の投稿」という日時引数を再度設定したら・・・
    その記述方法がまたわからないですが・・・

    なんだかすごい表示になってしまいだめでした。

    function filter_where($where = '') {
        if ( !is_home() ) return;
        $where .= " AND post_date > '" . date('Y-m-d', strtotime('1 days')) . "'";
        return $where;
    }

    関数の部分なので、上記のようにされたでしょうか?

    query_postsをget_postsに差し替えるだけでよいのでしょうか?

    え~、リンク先をご覧になって理解できなかったということでしょうか?

    1つ目の条件で「未来の投稿」としてるので

    query_posts には、post_status=future という引数もありますが(filter_whereを使わないですむ)、これでは具合が悪かったのですか?

    トピック投稿者 yossy8

    (@yossy8)

    すみません、post_status=futureで出来ました!

    実は、予約済み投稿を表示させることを最初にどうするか考えたときに、
    post_status=future は一度使ってみたのですが、
    そのときはうまくいかず、(ただ記述が間違っていたんですねたぶん)

    wordpress/wp-includes/post.php をテキストエディタで開き
    $post_status = 'future'; を $post_status = 'publish'; に、書き換えれば公開日が未来でも表示されます。

    というものを見つけ、この方法を利用し、
    その条件下でいろいろやっていました。

    今回指摘いただき、再度試したら、いまく行きました。
    自分でむだに難しくしていたようです。

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

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「日時引数を使ったループのあとのループで日時引数を解除したい」には新たに返信することはできません。