未来と過去の記事をわけた一覧を表示したい
-
イベントなどの記事のインデックスページで、
「これからのイベント予定」として、未来の記事の一覧、
「過去のイベント」として、過去の記事の一覧というように、一覧をわけて表示したいのですが、
いろいろ調べているのですがわかりません。“今日”の日付の記事は、「未来」でも「過去」でもどちらに入ってもいいです。
あと、同時に設定した条件として、
「未来の記事一覧は、古い順」としたいです。
未来の一覧の一番上にくるのは、今日から見て一番近い日付のものというわけです。アドバイスいただけると大変助かります。
よろしくお願い致します。
-
イベントなどの記事のインデックスページで
というのはなにで実現しているのか説明が無いです。通常の投稿で、未来投稿で実現してるのか、なにかスケジュール管理系のプラグインなど使っているのか。
過去・未来の記事一覧は同一のページに表示するのか、件数は?ページングは?
小出しになってしまうと、答えるほうも大変なので、できるだけ正確に説明したほうが回答も正確なものが得られやすいと思います。
説明不足で大変失礼しました。
まず、
過去・未来の記事一覧は同一のページに表示するのか、件数は?ページングは?
ですが、
過去・未来の記事一覧は同一のページには表示せず、
正しく言うと、未来の一覧のみでいいです。(最初に惑わす表現をしてしまいすみません)
“今日”より古い記事は表示されなくてよいです。
一覧の順番は、今日から近い日が一番上にしたいです。
件数は、投稿されたすべての記事。
ページングというのは何を示しているのかちょっとわかりませんが、(すみません)
表示させるものは、記事の投稿日・時間・タイトルです。通常の投稿で、未来投稿で実現してるのか、なにかスケジュール管理系のプラグインなど使っているのか。
スケジュール管理系のプラグインなどは使っておりません。
カスタム投稿での通常の投稿で、未来の公開日で投稿した記事です。
関係ないかもしれませんが、カスタム投稿・カスタム分類を作成するのに、
「Custom Post Types UI」というプラグインを使用してます。「イベントなどの記事のインデックスページ」
ですが、2種類ありまして、
“ページ”で作成した固定ページ(page-xxx.php)と、
カスタム分類のアーカイブページ(taxonomy-xxx.php)です。
両方とも、リスト部分は、同じカスタムパーツテンプレート(loop-xxx.php)
を読み込む仕様にしています。
固定ページの方は、投稿タイプで絞り込むため、<?php query_posts(‘post_type=xxx’); ?>
<?php get_template_part(‘loop-xxx’); ?>という感じにしています。
参考ページ、ありがとうございます。
なんとか途中まで・・・理想の表示ができました!まず、未来投稿が表示されるように、
wordpress/wp-includes/post.php の、
$post_status = ‘future’; を $post_status = ‘publish’; に、書き換える。
(これをすると予約投稿ができなくなるので、予約投稿が必要な人はだめですが・・・)記事リストのループ記述の前に、以下を記述。
<?php function filter_where($where = '') { $where .= " AND post_date > '" . date('Y-m-d', strtotime('1 days')) . "'"; return $where; } add_filter('posts_where', 'filter_where'); query_posts('$query_string&order=ASC&post_type=taikai-i'); ?>
&post_type=taikai-i
を記述した理由は、これがないと、taikai-iという投稿タイプから作成した記事は無視されて、デフォルトで存在する「投稿」からの記事しか表示されなかったためです。一応、これで固定ページでは”今日”以降の日付の投稿のみを、昇順で表示できました。
ただ、これだと、固定ページでの表示は完璧なのですが、
ループの記述のある同じカスタムパーツテンプレートを読み込んでいる
カスタム分類のカテゴリーのアーカイブページで、
固定ページとまったく同じリストが表示されてしまいました。
私の記述がいけないのですが・・・
アーカイブページなのにアーカイブになっていない。。。おめでとうございます^^
それでよろしいかと思います。あ、よくよく確認したら、
カスタム分類のアーカイブページの方では、うまく表示できておらず・・・
「解決しました!」と書きましたが、
上の返信の内容を、書き換えてしまいました。loop.phpに上記を追記しているなら、別なものを読むようにするとか、loop.phpではなくてそれを読み込む以前に書くとか、思い切ってテンプレート内に移動させるとか、いくらでもやりようはあると思いますが。
はい、アーカイブページは別のものを読むようにしたのですが、
カスタム分類のカテゴリーの記事だけを表示してくれないのです。&post_type=taikai-i
だけ削除したのですが・・・。いろいろ試した補足です。
カスタム分類のアーカイブページの表示について、
アーカイブ専用に新作した、ループの記述の前の条件指定として、
固定ページで記述していた条件指定から、
&post_type=taikai-i
だけを削除した以下<?php function filter_where($where = '') { $where .= " AND post_date > '" . date('Y-m-d', strtotime('1 days')) . "'"; return $where; } add_filter('posts_where', 'filter_where'); query_posts('$query_string&order=ASC'); ?>
を記述すると、
カスタム投稿で投稿された記事はまったく表示されず、
通常の「投稿」から投稿された記事のみで、
“今日”より未来の記事を昇順で表示しました。固定ページの条件とまったく同じで、
&post_type=taikai-i
をつけておくと、固定ページとまったく同じ表示結果です。
属するカテゴリーに絞り込むことをしてくれません・・・。条件指定をすべて削除すると、
あたりまえですが、
属するカテゴリーの記事すべてを降順で表示します。「今日より未来の記事を昇順で」という条件だけのつもりが、
投稿タイプやアーカイブという条件まで影響してしまってる書き方なのでしょうか・・・。すみません。私の理解力が乏しくてわからなくなってしまいました。
ページで表示させたいのは
「今後のスケジュールを昇順で」カテゴリアーカイブで表示させたいのは
「今日以前のスケジュールを降順で」でいいんでしたかね?
ややこしくてすみません。
カテゴリーアーカイブで表示させたいことも、
ページと同じで、
「今後のスケジュールを昇順で」
です。あれ?
となると、ページと同じでいいんじゃないんですか?そこがわからなくて混乱してしまいました。
はい、同じでよいと思ったのですが、それがうまくいかないのです。
アーカイブページであるということをまったく無視して、
固定ページと同じ内容が表示されるのです。
カスタム分類のアーカイブページだからでしょうか・・・ループの前の条件をすべて消すと、
普通に、そのカスタム分類のカテゴリーにしぼってリストを表示するのですが、
例えば、
<?php query_posts(“order=ASC”); ?>
など、何か一つでも条件を加えると、
通常の「投稿」から作成した記事だけで、昇順のリストになります。カスタム分類のアーカイブで表示したい記事は、
カスタム投稿で作成した記事です。カスタム投稿から記事だと、この問題以外にもいくつか思ったようにいかないことがあるので、
サイトの構成を見直して、カスタム投稿を諦めて、通常の投稿で、構成しなおそうかとも検討中です。
初めてのワードプレスなので最初の構成づくりが、無駄に難しかったのかもしれません。
無理にカスタム投稿は使わない方向で、
「未来の記事を昇順」で、固定ページでもアーカイブページでも表示できるように検討してみます。カスタム分類のアーカイブもできました!
個別ページとは、読み込むループを変えて、
<?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"); ?>
としたら、できました。
query_posts() は テンプレート ファイル内で WordPress ループ が始まる前に記述します。wp_query オブジェクトは与えられた引数から新しい SQL クエリを作ります。このとき、WordPress は(ページ番号やカテゴリーのような)URL から得られた引数を無視します。もしその情報が必要なら、query_posts() の引数としてグローバル変数の $query_string を与えます。
例えば、他のクエリ引数に影響を与えずに投稿の表示順序だけを指定したいなら WordPress ループ の前に以下のように記述します:
とあったので、これを参考にしました。
アーカイブだということを無視されていたのはこのことだったのですね。。
global $query_string;
がポイントでしょうか。カスタム投稿からの投稿を諦めかけていたので、ぎりぎりのところで解決してよかったです。
これでやっとサイトも完成に近づきそうです。
何度もアドバイスいただき、本当にありがとうございました。
- トピック「未来と過去の記事をわけた一覧を表示したい」には新たに返信することはできません。