1

wordpress に問題があり、WP_Query を使用して、過去 5 日間に作成された最後の 3 つの投稿をページに取り込みます。

これが私のフィルターで、wp_query の新しいインスタンスをセットアップした場所です。

<?php 

get_header(); 

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

$args = array(
            'post_type' => 'post',
            'post_status' => 'publish',
            'posts_per_page' => '3'
            );

add_filter( 'posts_where', 'filter_where' );

$query = new WP_Query( $args ); 
?>

次に、ループを取得しました。

<?php while($query->have_posts()): $query->the_post();?>

<br/>
    <i><?php echo get_the_date(); ?></i>
    <br/>
    <b><?php the_title(); ?></b>
    <br/>
    <?php the_excerpt(); ?>
    <br/>
<?php endwhile; ?>

これはすべてうまく機能します — 3 つの投稿が取り込まれますが、クエリの範囲外の追加の投稿も取り込まれます。

オーバーライドしていないページで別の機能が実行されていますか? このコードはすべてページ テンプレート ファイルに存在します。私が見つけられないように見えるページで実行される魔法のコードがあると思われます。

また、「posts_per_page」またはその他の属性で表示される投稿の数を変更できるため、これらを正しく取得していることはわかっていますが、すり抜けた以前の投稿には影響しません。

ご協力ありがとうございます。必要に応じてさらにコードを提供できます。

4

2 に答える 2

2

https://wordpress.stackexchange.com/questions/85657/wp-query-pulling-an-extra-post-per-page

私はまったく同じ問題を抱えていて、上記のリンクで答えを見つけました。問題は、投稿をスティッキーにしたことでした。つまり、検索結果に常に返されていました。

以下をクエリに追加すると、この動作が停止しました。

'ignore_sticky_posts' => true
$post_query =  new WP_Query();
$query_args =  array( 'ignore_sticky_posts' => true, 'post__in' => array(123,124), 'posts_per_page'=> '-1', 'order'=> 'ASC' , 'orderby' => 'title');
$myposts    =  $post_query->query($query_args);
于 2013-11-04T11:03:05.053 に答える
1

次のコードをfunctions.php

function filter_where( $where = '' ) {
    $where .= " AND post_date > '" . date('Y-m-d', strtotime('-5 days')) . "'";
    return $where;
}
add_filter( 'posts_where', 'filter_where' );

ページテンプレートファイルの次のコード

$args = array(
    'post_type' => 'post',
    'post_status' => 'publish',
    'posts_per_page' => '3'
);
$query = new WP_Query( $args );
while($query->have_posts()): $query->the_post();
    // ...
endwhile;

また、特定のページでこれを機能させるには、filter_where関数に条件を追加する必要があります。

if( is_page('page_slug') ) // or something like this
{
    $where .= " AND post_date > '" . date('Y-m-d', strtotime('-5 days')) . "'";
}
return $where;

is_page についてもっと読む

于 2013-05-23T23:51:44.943 に答える