5

「イベント」というカスタム投稿タイプを作成し、高度なカスタム フィールド (Wordpress プラグイン) を使用してカスタム フィールドを投稿に追加しています。1 つのカスタム フィールドはイベントの日付です。私の目標は、この日付 (データベースに "yymmdd" として保存されている) に基づいて投稿をクエリし、将来のイベントのみを表示することです。私は近づいてきましたが、フィルターを私が既に書いたコードと統合する方法を理解できないようです.

Wordpress Codex にこれに関する情報があることは知っていますが ( http://codex.wordpress.org/Class_Reference/WP_Query )、PHP の初心者であるため、カスタム フィールドで機能させる方法について途方に暮れています。データ。ワードプレスのコードは次のとおりです。

// Create a new filtering function that will add our where clause to the query
function filter_where( $where = '' ) {
    // posts for March 1 to March 15, 2010
    $where .= " AND post_date >= '2010-03-01' AND post_date < '2010-03-16'";
    return $where;
}

add_filter( 'posts_where', 'filter_where' );
$query = new WP_Query( $query_string );
remove_filter( 'posts_where', 'filter_where' );

しかし、これを現在のクエリに統合する方法や、日付フィールドを投稿日ではなくクエリ値として使用する方法がわかりません。以下、今まで書いてきたものです。

<?php
$args = array(
            'post_type'         => 'events',
            'posts_per_page'    => 4,
            'meta_key'          => 'event_date', 
            'orderby'           => 'meta_value_num',
            'order'             => 'ASC'
        );
$loop = new WP_Query( $args );
if ( $loop->have_posts() ) : while ( $loop->have_posts() ) : $loop->the_post();
?>

    <h1><?php the_title()</h1>
    <?php $eventdate = date_create(get_field('event_date')); ?>
    <small><?php echo date_format($eventdate,'M d'); ?></small>

<?php endwhile; endif; ?>

フィルターをクエリに追加する方法と、投稿日ではなくイベントの日付にカスタム フィールド メタを使用する方法を誰かが教えてくれたら本当にありがたいです。必要な情報はすべて提供したと思いますが、何か見落としがあればお知らせください。ありがとう!

4

3 に答える 3

8

meta_query の順序について調査しながら、ニーズに本当に合ったものを見つけます

<?php
$today = date("Y-m-d");
query_posts(array(
'post_type' => 'events',
'posts_per_page' => 4,
'meta_key' => 'event_date',
'orderby' => 'meta_value',
'order' => 'ASC',
    'meta_query' => array(
        array(
           'key' => 'event_date',
           'meta-value' => $value,
           'value' => $today,
           'compare' => '>=',
           'type' => 'CHAR'// you can change it to datetime also
       )
)
));
if (have_posts()) :
while (have_posts()) : the_post();
?>
    <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a>

<?php endwhile; ?>
<?php else : ?>
<?php endif; ?> 
于 2013-07-03T18:58:49.043 に答える
2

フィルターを使用せず、改造した WP_Query だけを使用してみます

<?php
    $today = date('Ymd');
    $args = array(
            'post_type'         => 'events',
            'posts_per_page'    => 4,
            'meta_key'          => 'event_date', 
            'orderby'           => 'meta_value_num',
            'order'             => 'ASC',
            'meta_value_num'    => $today,
            'meta_compare'      => '>'
        );
    $loop = new WP_Query( $args );
    if ( $loop->have_posts() ) : while ( $loop->have_posts() ) : $loop->the_post();
?>

    <h1><?php the_title()</h1>
    <?php $eventdate = date_create(get_field('event_date')); ?>
    <small><?php echo date_format($eventdate,'M d'); ?></small>

<?php endwhile; endif; ?>

で注文できると思いますmeta_value_numので、 もmeta_value_numうまくいくはずです。

于 2013-07-03T18:53:19.853 に答える