高级自定义域和日期选择器,仅当日期是今天而不是一年时才显示帖子

时间:2013-02-14 作者:user27309

我创建了一个网站,上面有关于体育界名人的自定义字段。

在帖子页面中,我使用数据选择器创建了出生日期和死亡日期字段。

我试图实现的是显示过去在今天去世的人的帖子,如果有人在1982年2月14日去世,我想在今年和明年2月14日的每个页面/小部件中显示。

我还想从出生日期和死亡日期中仅检索年份。

让我们带上杰西·欧文斯。他生于1913年9月12日,于1980年3月31日去世。

我想有一个这样的职位:杰西·欧文斯(1913-1980)

这篇文章的标题是杰西·欧文斯,但如何显示1913年和1980年?谢谢

1 个回复
最合适的回答,由SO网友:Milo 整理而成

这有点复杂,但我们可以通过使用posts_where.

我们将从查询元值为今天日期的帖子开始,假设日期格式为yyyy-mm-dd:

$date_today = date(\'Y-m-d\');
$args = array(
    \'posts_per_page\' => -1,
    \'meta_query\' => array(
        array(
            \'key\' => \'died_date\',
            \'value\' => $date_today,
            \'compare\' => \'=\',
            \'type\' => \'DATE\'
        )
    )
);

$results = new WP_Query( $args );
如果我们看看WHERE 子句,我们将看到相关位:

AND ( (wp_postmeta.meta_key = \'died_date\'
AND CAST(wp_postmeta.meta_value AS DATE) = \'2013-02-14\') )
为了实现这一点,我们想修改最后一行以使用MySQL的DAYOFYEAR 在比较中。

这是我们的过滤器:

function wpa86916_filter_where( $where ){
    global $wpdb;
    $date_today = date(\'Y-m-d\');
    $parts = explode( \'AND CAST\', $where );
    $new_where = " AND DAYOFYEAR( CAST( $wpdb->postmeta.meta_value AS DATE ) ) = DAYOFYEAR( \'$date_today\' ) ) )";
    $where = $parts[0] . $new_where;
    remove_filter( \'posts_where\', __FUNCTION__ );
    return $where;
}
如果我们返回到原始查询,现在可以在查询之前添加此筛选器,并且我们应该获得所有具有匹配日期的帖子,无论年份:

add_filter( \'posts_where\', \'wpa86916_filter_where\' );
$results = new WP_Query( $args );
至于您关于从日期提取年份的问题,我们可以使用PHP的datestrtotime 要进行任何日期提取和转换:

$date = \'2013-02-14\';
echo date( \'Y\', strtotime( $date ) );
// prints \'2013\'

结束

相关推荐

Update feed more frequently

当我发布新帖子时,我注意到新帖子不会出现在提要中http://mysite.com/feed 在瞬间,总有一个或几个小时的滞后时间。当我在wp-includes/feed-rss2.php 文件(仅echo \'test\'), 还需要一到两个小时才能看到test word输入http://mysite.com/feed, 这意味着wordpress只能定期使用该文件。有人知道如何解决这个问题吗?我想无论什么时候http://mysite.com/feed 页面已在浏览器中打开,必须使用wp-includ

高级自定义域和日期选择器,仅当日期是今天而不是一年时才显示帖子 - 小码农CODE - 行之有效找到问题解决它

高级自定义域和日期选择器,仅当日期是今天而不是一年时才显示帖子

时间:2013-02-14 作者:user27309

我创建了一个网站,上面有关于体育界名人的自定义字段。

在帖子页面中,我使用数据选择器创建了出生日期和死亡日期字段。

我试图实现的是显示过去在今天去世的人的帖子,如果有人在1982年2月14日去世,我想在今年和明年2月14日的每个页面/小部件中显示。

我还想从出生日期和死亡日期中仅检索年份。

让我们带上杰西·欧文斯。他生于1913年9月12日,于1980年3月31日去世。

我想有一个这样的职位:杰西·欧文斯(1913-1980)

这篇文章的标题是杰西·欧文斯,但如何显示1913年和1980年?谢谢

1 个回复
最合适的回答,由SO网友:Milo 整理而成

这有点复杂,但我们可以通过使用posts_where.

我们将从查询元值为今天日期的帖子开始,假设日期格式为yyyy-mm-dd:

$date_today = date(\'Y-m-d\');
$args = array(
    \'posts_per_page\' => -1,
    \'meta_query\' => array(
        array(
            \'key\' => \'died_date\',
            \'value\' => $date_today,
            \'compare\' => \'=\',
            \'type\' => \'DATE\'
        )
    )
);

$results = new WP_Query( $args );
如果我们看看WHERE 子句,我们将看到相关位:

AND ( (wp_postmeta.meta_key = \'died_date\'
AND CAST(wp_postmeta.meta_value AS DATE) = \'2013-02-14\') )
为了实现这一点,我们想修改最后一行以使用MySQL的DAYOFYEAR 在比较中。

这是我们的过滤器:

function wpa86916_filter_where( $where ){
    global $wpdb;
    $date_today = date(\'Y-m-d\');
    $parts = explode( \'AND CAST\', $where );
    $new_where = " AND DAYOFYEAR( CAST( $wpdb->postmeta.meta_value AS DATE ) ) = DAYOFYEAR( \'$date_today\' ) ) )";
    $where = $parts[0] . $new_where;
    remove_filter( \'posts_where\', __FUNCTION__ );
    return $where;
}
如果我们返回到原始查询,现在可以在查询之前添加此筛选器,并且我们应该获得所有具有匹配日期的帖子,无论年份:

add_filter( \'posts_where\', \'wpa86916_filter_where\' );
$results = new WP_Query( $args );
至于您关于从日期提取年份的问题,我们可以使用PHP的datestrtotime 要进行任何日期提取和转换:

$date = \'2013-02-14\';
echo date( \'Y\', strtotime( $date ) );
// prints \'2013\'

相关推荐

如何通过jQuery Datepicker搜索帖子?

我正在WordPress网站上工作,我有自己的搜索筛选页面,在那里我添加了jquery日期选择器,现在我想按日期选择器搜索帖子?Html Codescript> $(function() { jQuery( \"#datepicker-13\" ).datepicker({ dateFormat : \"yy-mm-dd\" }); $(\"#datepicker-13\").datepicker().datepick