web-dev-qa-db-ja.com

アーカイブページに日付範囲の投稿を表示させる方法

特定の日付範囲の投稿(実際にはカスタム投稿タイプ)を表示するアーカイブとして機能する、さまざまなページ用のページテンプレートをいくつか作成しようとしています。

それが関係するウェブサイトは http://memstories.com そしてCPTは "Events"です。私はWP Support( https://wordpress.org/support/topic/show-the-posts-published-before-a-specific-date?replies=)に関するスレッドについての言及をすでに見つけました。 2#post-1066144 )、しかしうまく動かせません:

<?php
function filter_where($where = '') {
$where .= " AND post_date >= '1900-01-01' AND post_date <= '1949-12-31'";
return $where;
}
add_filter('posts_where', 'filter_where');
query_posts($query_string);
?>

このWebサイトのイベント投稿はすべて歴史的なイベントであるため、歴史的なイベントが発生した実際の日付として公開日を使用し、1900年までさかのぼります。 20世紀前半(1900年 - 1949年)の日付範囲内に収まる投稿のリストですが、私が試してみると失敗します。

私がより多くの情報を見つけることができる場所は他にはありません。実際、stackexchangeに関する同様の質問はすべて、Wordpress Supportのまったく同じスレッド(5歳)へのリンクで回答されています。

どのようにこれを解決するかについて誰かが考えを持っていますか?

2
dbj

Post metaに日付を保存することはもう少し安全なアプローチです。post_date列はあなたのユースケースを考慮して設計されていません。あなたは、UNIXエポック(1970年1月1日)より前の日付で奇妙な結果を得るかもしれません。それから、日付の間に投稿をロードするのは単純なmeta_queryです。フィルタは必要ありません。

$start = '1900-01-01';
$end = '1949-12-31';
$args = array(
    'post_type' => 'events',
    'posts_per_page' => -1,
    'orderby' => 'meta_value',
    'order' => 'ASC',
    'meta_key' => '_event_date',
    'meta_query' => array(
        array(
            'key' => '_event_date',
            'value' => array( $start, $end ),
            'compare' => 'BETWEEN',
            'type' => 'DATE'
        )
    )
);
$events_query = new WP_query( $args );
3
Milo

さて、WPはあなたのフィルタを抑制しているかもしれません。

Posts_where @のWP Codexあたり: http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_where

投稿を取得する特定の関数はフィルタを実行しないため、添付したposts_whereフィルタ関数はクエリを変更しません。これを克服するには、関数に渡される引数配列でsuppress_filtersをfalseに設定します。

これは彼らが参照するコードです:

//get posts AND make sure filters are NOT suppressed
$posts = get_posts( array( 'suppress_filters' => FALSE ) );

Get_posts()呼び出しでこれを使用していますか?

1
Sean Grant