web-dev-qa-db-ja.com

投稿日に20年を追加してからクエリ

一連の投稿のタイムスタンプにタイムフレーム(たとえば20年)を追加し、新しい日付を使用するループでクエリを実行する方法を誰かが知っているかどうかを知りたいですか?

基本的に私がやりたいことは一連の通常のニュース記事を持っていることです。それに加えて、私は '20年前の今日'のカスタム投稿タイプを持っています、その日の投稿は90年代初頭に適切に刻印されています。それらの投稿がニュースの投稿と同じループに表示されるようにしたい(別々のループではなく)。

だからそれは行くかもしれません:

  • ニュース記事(2012年3月21日)
  • ニュース記事(2012年3月19日)
  • 20年前(1992年3月17日)
  • ニュース記事(2012年3月12日)
  • 20年前(1992年3月6日)

等々。そして、20年未満前に起こったこと(1993年など)は、保留中の投稿のように動作し、表示されません。

任意の提案は大歓迎です

3
Nathan

posts_whereフィルタを使う例です。 posts_clausesフィルタを使用してクエリを拡張する必要がある場合は、$where$piecesに交換し、$pieces['where'] .=の代わりに$where .=を設定してください。投稿を検索する前に、それをfunctions.phpファイルにドロップして、コンディショナルタグを追加するだけです。

function filter_where( $where ) 
{
    // Add some conditionals and abort if they're not met:
    // @example Abort on pages
    if ( ! is_page() )
        return;

    // posts in the last 30 days
    // $where .= " AND post_date > '".date( 'Y-m-d', strtotime( '-30 days' ) )."'";

    // posts  30 to 60 days old
    // $where .= " AND post_date >= '".date( 'Y-m-d', strtotime( '-60 days' ) )."'"." AND post_date <= '".date( 'Y-m-d', strtotime( '-30 days' ) )."'";

    // posts between 01.03.2012 and 21.03.2012
    $where .= " AND post_date >= '2012-03-01' AND post_date <= '2012-03-21'";

    return $where;
}
add_filter( 'posts_where', 'filter_where' );

編集:それで、これがOPからの元のループです:

<section id="content">
<?php 
query_posts( array( 'post_type' => array( 'post', 'twentyyearsago' ) ) ); 
if ( have_posts() )
{
while ( have_posts() )
{
    the_post();

    if ( 'twentyyearsago' === get_post_type() ) // FIX THIS: strict type checking with "==="
    {
    ?>
        <article class="twentyyears">
            <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="This day 20 years ago">This day 20 years ago</a></h2>
            <?php the_content(); ?>
            <footer><?php the_time( 'F j, Y' );?></footer> // FIX THIS: One leading "<" in front of "<?php" too much
        </article>
    <?php } else { ?>
        <article class="post">
            <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
            <?php the_content(); ?>
            <footer><?php the_time( 'F j, Y' ); ?></footer>
        </article>

    <?php 
    } // FIX THIS: one trailing ";" too much
} // endwhile;
else
{
    // do stuff
    echo "No Posts.";
} // endif; 
wp_reset_query(); 
?>
</section>
2
kaiser