0

この質問は、ジェネシス フレームワークにのみ適用されます。

「ニュース」というカテゴリがあります。「ニュース」カテゴリ ページで、過去 30 日間に作成された投稿のみを表示したいと考えています。

これが私が始めたコードです:

<?php

remove_action('genesis_loop', 'genesis_do_loop');
add_action('genesis_loop', 'pm_recent_news_loop');

function pm_last_name_loop() {
global $query_args;
$args = (array(
   //????
));

genesis_custom_loop( wp_parse_args($query_args, $args) );

}
genesis();

一般的な WordPress API ドキュメントでは、基本的に $query_args に引数を渡すことによって日付範囲によるフィルタリングを達成できないと述べています (これは genesis_custom_loop がそれを達成する方法です。代わりに、これを行う正しい方法はadd_filter ('posts_where', 'my_where_filter') を作成し、post_date で where 句を定義します。参照: http://codex.wordpress.org/Class_Reference/WP_Query#Parameters .

しかし、私はこれを機能させることができません。コーデックスで説明されているものと同様のコードを実装しようとすると、投稿がまったく取得されないか、すべての投稿が取得されます。これは、ジェネシスが何らかの方法で posts_where フィルターを回避するか、呼び出されないようにラップするためだと思います。

4

1 に答える 1

1

代わりに、いくつかの SQL を使用してフィルターを追加してみてください

filter_daterange($where='') {
$where .= " AND post_date >= '".date('Y-m-d H:i:s', strtotime('-30 days'))."' AND post_date <= '".date('Y-m-d H:i:s')."'";
return $where;
}

ループの前にフィルターを追加し、後で削除します

add_filter( 'posts_where', 'filter_daterange' );
genesis_custom_loop( wp_parse_args($query_args, $args) );
remove_filter( 'posts_where', 'filter_daterange' );
于 2013-07-08T14:26:14.560 に答える