为什么WP_QUERY不显示预期数据?

时间:2018-05-24 作者:Ragnaboy

我有一个帖子过期的网站。目前我手动执行此操作,但我更喜欢自动执行此操作。几个月来,我一直在努力解决这个问题,我想我终于用wp\\u query()找到了解决方案,但它并没有显示预期的结果,而是显示了最近发布的10篇文章。

这是当前代码:

function expire_posts() {
    $post_id = get_the_ID();
    $getdate = get_post_meta($post_id, \'Expiry Date\', true);
    $expirydate = date (\'d F Y\', strtotime ($getdate));
    $today = date( \'d F Y\');
    $args = array (strtotime($expirydate) < strtotime($today));
    $query = new WP_Query($args);
?><ol><?php
    if( $query->have_posts() ) : while ( $query->have_posts() ) : $query- 
>the_post(); 
?>
        <li><?php the_title(); ?></li><?php
    endwhile; 
?></ol><?php
        wp_reset_postdata();
    endif;
}
我还使用了以下代码,它返回了相同的结果:

function expire_posts() {
    $args = array(
    \'meta_key\'     => \'Expiry Date\',
\'meta_value\'   => date( "d F Y" ), // change to how "event date" is stored
\'meta_compare\' => \'<\',
);
$query = new WP_Query( $args );
?><ol><?php
    if( $query->have_posts() ) : while ( $query->have_posts() ) : $query- 
>the_post(); 
?>
        <li><?php the_title(); ?></li><?php
    endwhile; 
?></ol><?php
        wp_reset_postdata();
    endif;
}
如果过期,它应该返回两个特定的已发布帖子。

1 个回复
SO网友:Clemens Tolboom

您必须将日期更改为@Krzysiek Dródżsaid或usemeta_type 选项。我已经用字符串版本进行了测试。

meta\\u类型示例$args 如下所列。另请参见MySQL time variants

/*
Plugin Name: Meta Filter
Plugin URI: https://wordpress.stackexchange.com/questions/304333
*/

// ?XDEBUG_SESSION_START=304333

function wpse_304333() {
    echo \'<p>wpse_304333</p>\';

    $args = array(
        \'post_type\'  => \'my-post-type\',
        \'meta_key\'   => \'my-date-as-string-yyyy-mm-dd\',
        \'meta_value\' => \'2018-03-00\', // before march 2018
        \'meta_compare\' => \'>\',
    );

    $query = new WP_Query( $args );

    $titles = \'\';
    while ( $query->have_posts() ) : $query->the_post();
        $titles .= \'<br/>\' . get_the_title();
    endwhile;
    echo $titles;
    wp_reset_postdata();
}

add_action( \'admin_notices\', \'wpse_304333\' );
使用包含以下内容的SQL

AND ( 
  ( wp_postmeta.meta_key = \'my-date-as-string-yyyy-mm-dd\'
    AND wp_postmeta.meta_value < \'2018-03-00\' )
)
或使用meta\\u类型,如

$args = array(
    \'post_type\'  => \'my-post-type\',
    \'meta_key\'   => \'my-date-key\',
    \'meta_value\' => $date_value
    \'meta_compare\' => \'>\',
    \'meta_type\' => \'DATETIME\'
);
它是使用CAST转换的SQL。您可以运行下面的SQL来检查哪些值是正确“强制转换”的。

SELECT meta_value, CAST(meta_value AS DATETIME)
  FROM wp_postmeta
 WHERE CAST(meta_value AS DATETIME) IS NOT NULL

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post