版权所有:获取帖子类型的第一个和最后一个日期

时间:2013-07-07 作者:kaiser

我正在寻找最简单/最快的方法来获取页脚中版权声明的准确日期范围。版权声明不应仅包含年份,还应考虑月份和日期,并考虑帖子类型。因此,“事件”的自定义帖子类型的版权日期范围可能与博客“帖子”帖子类型的版权日期范围不同。

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

kaiser最初发布的代码存在一个问题,因为它查询年、月和日,明显导致值表示“任何日期的最大月”或“任何日期的最小日”,而不是表示MAXMIN 全球日期。

我修改了原始代码来查询全局MAXMIN 日期和凯撒的祝福我张贴在这里。下面返回了在我的服务器上测试时的正确日期,但测试并不是详尽无遗的。

function get_copyright_daterange_v2()
{
    global $wpdb;
    static $range = array();

    if ( ! empty( $range ) )
        return $range;

    return $range = array_shift( $wpdb->get_results( $wpdb->prepare( "
        SELECT
            MIN( post_date ) AS first,
            MAX( post_date ) AS last
        FROM
            {$wpdb->posts}
        WHERE
            post_type = %s
            AND NOT post_status = \'auto-draft\'
            AND NOT post_status = \'inherit\'
            AND NOT post_status = \'trash\'
        ",
        is_admin() ? get_current_screen()->post_type : get_queried_object()->post_type
    ) ) );
}

$date_range = get_copyright_daterange_v2();
printf(
    \'© %s — %s\',
    date_i18n( 
        get_option( \'date_format\' ),
        strtotime( $date_range->first ),
        true // GMT
    ),
    date_i18n( 
        get_option( \'date_format\' ),
        strtotime( $date_range->last ),
        true // GMT
    )
);

SO网友:kaiser

以下函数查询当前显示的帖子类型(单篇或归档)的最长和最短日期。它可以在管理UI以及前端/主题中工作。它只需要一组有限的post status 如果要排除以下状态,则需要更改/扩展pending, future, 等等。

function get_copyright_daterange()
{
    global $wpdb;
    static $range = array();

    if ( ! empty( $range ) )
        return $range;

    return $range = array_shift( $wpdb->get_results( $wpdb->prepare( "
        SELECT
            MIN( YEAR( post_date ) )  AS first_year,
            MIN( MONTH( post_date ) ) AS first_month,
            MIN( DAY( post_date ) )   AS first_day,
            MAX( DAY( post_date ) )   AS last_day,
            MAX( MONTH( post_date ) ) AS last_month,
            MAX( YEAR( post_date ) )  AS last_year
        FROM
            {$wpdb->posts}
        WHERE
            post_type = %s
            AND NOT post_status = \'auto-draft\'
            AND NOT post_status = \'inherit\'
            AND NOT post_status = \'trash\'
        ",
        is_admin() ? get_current_screen()->post_type : get_queried_object()->post_type
    ) ) );
}
您可以这样简单地称之为:

$date_range = get_copyright_daterange();
printf(
    \'© %s — %s\',
    date_i18n( 
        get_option( \'date_format\' ),
        strtotime( "{$date_range->first_year}-01-01" ),
        true // GMT
    ),
    date_i18n( 
        get_option( \'date_format\' ),
        strtotime( "{$date_range->last_year}-01-01" ),
        true // GMT
    )
);
执行查询的函数将其保存到静态变量中,因此您可以在单个页面上多次调用它,而无需执行多个DB查询。

如你所见,我为date_i18n(), 这是GMT偏移,到true. 如果您不想这样,但仍然有GMT偏移量,您也可以使用post_date_gmt 在查询内部。

正如@s\\u ha\\u dum所指出的,上面的查询将导致一种“奇怪”的行为:它会清楚地查询年、月和日。因此,当您试图从中构建实际的第一个/最后一个日期时,查询将不起作用。But 如果你只是在搜索其中的一个,它就会起作用。最初,我确实将其用于基于日期的导航/分页。

结束

相关推荐

并发/并发MySQL连接

我一直在寻找最好的WordPress主机,我想知道WordPress一次需要多少MySQL连接?我知道这是一个普遍的问题,但你觉得怎么样?我将主持大约3-5次WordPress安装,每个安装每月将有大约80000次页面浏览量(每月约20000个独立用户)。我想知道30个并发连接是否足够?因为大多数托管公司(我还负担不起VPS)将这些连接限制在25或30个。您能否共享您的WP唯一用户/页面视图以及它们生成的并发连接数?30听起来很低,但有人告诉我,要超过它根本不那么容易。我知道这取决于主题等,但假设我将使用