仅在 Wordpress Widget 中显示即将发生的事件

Only display upcoming events in Wordpress Widget

通过简码,我放置了以下代码,旨在在边栏中显示随机即将发生的事件。目前它显示随机的所有事件。我如何更改代码以仅显示早于当前日期的事件?

        <?php 
// Build a custom query to get posts from future dates.
$querystr = `
    SELECT wposts.* 
    FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta
    WHERE wposts.ID = wpostmeta.post_id
    
    AND wpostmeta.meta_key = 'f21_event_startdate'
AND STR_TO_DATE(wpostmeta.meta_value,'j. M Y') >= CURDATE()
 
AND wposts.post_status = 'publish'
AND wposts.post_type = 'events'

ORDER BY STR_TO_DATE(wpostmeta.meta_value,'j. M Y') RAND
LIMIT 1
`;

$events = $wpdb->get_results($querystr, OBJECT);

 if ($events):
    global $post;
    foreach ($events as $post):
        setup_postdata($post); ?>   
            
            <?php the_field('f21_event_startdate'); ?>
    <h2><a style="color:#1e73be;" href="<?php the_permalink() ?>"><?php the_title(); ?></h2>
    <div style="margin-top:10px; margin-bottom: 10px;"><?php the_post_thumbnail('full'); ?></div></a>
    <b><?php the_field('f21_event_sub_header'); ?></b>
    <?php endforeach;
else : ?>
    <li>Sorry, no events coming up.</li>
<?php endif; ?>

你可以 WP_Query()。检查下面的代码。

$args = array(
    'post_type'      => 'events',
    'posts_per_page' => -1,
    'meta_key'       => 'f21_event_startdate',
    'meta_value'     => date('Ymd'),
    'meta_compare'   => '>=',
    'orderby'        => 'rand',
    'order'          => 'ASC'
);

$upcoming_events = new WP_Query( $args );

避免在 WordPress 中使用 SQL 查询来获取 post 类型的数据。 我们有一个功能,请使用

 $args = array(
                            'post_type' => 'tribe_events',
                            'post_status' => 'publish',
                            'posts_per_page' => 10,
                            'order' => 'ASC',
                            'orderby' => 'meta_value',
                            'meta_key' => '_EventStartDate',
                            'meta_type' => 'DATETIME',
                            'paged'=>$page,
                            'meta_query'=>array(
                                          array(
                                            'key' => '_EventStartDate',
                                            'value' => date( 'Y-m-d H:i:s', current_time( 'timestamp' ) ),
                                            'compare' => '>'
                                        ),),
                            'tax_query'=>array(array(
                                            'taxonomy' => 'tribe_events_cat',
                                            'field'    => 'id',
                                           'terms'    =>$tribe_events_cat,
                                        ))
                              );
    
    
     $events = new WP_Query($args);

总结: 如果您在 WordPress 中使用自定义字段,请确保您的自定义字段存储为 post 元数据,然后您可以轻松过滤它, 在上面的代码中,我们有一个元查询,我们可以在其中使用键、值和比较。谢谢。