デフォルトのquery_postsを使えば普通に出来ますよ
ページ送りは自分で計算して日付範囲を代入してください
以下、公式codexより転載
最近30日間の投稿を表示
<pre>
// Create a new filtering function that will add our where clause to the query
function filter_where( $where = '' ) {
// posts in the last 30 days
$where .= " AND post_date > '" . date('Y-m-d', strtotime('-30 days')) . "'";
return $where;
}
add_filter( 'posts_where', 'filter_where' );
query_posts( $query_string );
回答ありがとうございます
ページ送りがまだ実装できていませんが、なんとかやってみたいと思います。
度々すみません。ページ送りができずに詰まっています。
$paged を使って現在のページ番号を取得してページ送りを実装しようと思ったのですが、うまく行きません。
手元の表示サンプルが少ないのでとりあえず1ページ1日分表示を目標にしています。1ページ目は期待した通りの結果が出てきますが、2ページ以降は記事を読み込んでくれません。
next_posts_link も出力されません。
function filter_where( $where = '' ) {
if(!$paged) {$paged = 1;}
$from = $paged - 1;
$where .= " AND post_date >= '" . date('Y-m-d', strtotime('-'.$paged.' days')) . "'" . " AND post_date <= '" . date('Y-m-d', strtotime('-'.$from.' days')) . "'";
return $where;
}
add_filter( 'posts_where', 'filter_where' );
query_posts( $query_string );
回答よろしくお願いします
こちらの環境で確認した限りはこれで動きます
global $paged;
$paged = $_GET['paged'];
if(!$paged)$paged=1;
function filter_where( $where = '') {
global $paged;
if(!$paged) {$paged = 1;}
$from = $paged - 1;
$where .= " AND post_date >= '" . date('Y-m-d', strtotime('-'.($paged).' days')) . "'" . " AND post_date <= '" . date('Y-m-d', strtotime('-'.$from.' days')) . "'";
return $where;
}
add_filter( 'posts_where', 'filter_where' );
$query_array = array(
'orderby' => 'date',
'order' => DESC,
'post_status' => 'publish'
);
if ( have_posts() ) : query_posts($query_array); ?>
<?php
for($i=$paged;$i<=$paged+10;$i++){
echo "<a href=\"".get_permalink()."&paged={$i}\">$i</a>";
}
?>
ページネーションはposts_per_pageが使えないので、
このサンプルでは手作業でforしてますので、
ご希望の形に合うように自力で実装してください。
素早い回答ありがとうございます。
早速、コードを拝見し試してみました。var_dump の結果をみるとページ送りすれば where の値は期待する結果がかえってきています。
しかし実際に出力される投稿の数は WordPress 管理画面の表示設定に影響を受けているようです。
管理画面の表示設定を1件と設定すると where の範囲の中から1件しか出力されません、2ページ目以降も同じです。
逆に 999 件のように大きな値を設定すると where の範囲はすべて出力するのですが、2ページ目以降は一切記事が出力されなくなります。おそらく内部では1ページ目で999件分の投稿を出力した事になっているのでしょう。
日数指定は表示件数が可変になるのでループをどうにか制御できないでしょうか?
こちらの環境では再現できないので何とも言えませんが、
何らかのグローバル変数に表示件数が入っているか、
have_postsのループ内でbreakしてないですか?
返信送れてすみません。
posts_per_page=-1 を指定する事でできました。
丁寧な回答をしていただきありがとうございます。助かりました。