web-dev-qa-db-ja.com

UNIX時間でのカスタム日付による照会

私のデータベースでは、UNIXのTimeにカスタム日付を実際に登録しています。

meta_key:custom_date meta_value:1322697600

そしてメタキーの型はlongtextです

このcustom_dateの年に応じて特定の投稿を取得したい

私はこのようなものが欲しいのですが:

$args = array(
    'paged' => $paged,
    'posts_per_page' => 10,
    'post_type' => 'custom',
    'post_status' => 'publish',
    'meta_query' => array(
    array(
                'key'=>'custom_date',
                'value'=> '2010'
            )
);

誰もがクエリ内の日付のカスタム日付を変換し、この日付の年だけを取得する方法を知っていますか?

2
kschaeffler

PHPはDateオブジェクトをフォーマットするdate()関数を内蔵しています。あなたのケースでは、あなたは次のようにそれを使用するでしょう:

echo date('Y', 1322697600);

これらのクエリ引数を使用して投稿の配列を作成していて、それに特に絞り込む必要があるので、希望する年フィルタに基づいてループをトリガーする関数を作成することをお勧めします。

私は以前に以下のような同様の機能を使用しました。

function check_post_date($filter_year) {

    // Load the custom_date meta field
    $custom_date = get_post_meta( get_the_ID(), 'custom_date', true );

    // Turn it into a string that only displays the year
    $custom_date_year = date('Y', $custom_date);

    // If the years equal, return true.
    if( $custom_date_year == $filter_year ) {
         return true;           
    } else {
        return false;
    }
}

これにより、この投稿に対してループが実行されるかどうかを操作できます。

たとえば、2010年にフィルタをかけたい場合は、次のようにループを書くことができます。

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

    <?php if check_post_date('2010') : ?>

       <!-- Your single post code goes here! -->

    <?php endif; ?>

<?php endwhile; endif; ?>
1
xyz