WordPress函数:使用 wp_date 替代 date

追格官方小助手/ 2022年06月19日/ WordPress/ 浏览 2038

wp_date 是 WordPress 提供的一个增强函数。


在我们开发WordPress主题或WordPress插件的时候,可以使用wp_date替换php函数。


wp_date 函数源码:


function wp_date( $format, $timestamp = null, $timezone = null ) {
    global $wp_locale;
 
    if ( null === $timestamp ) {
        $timestamp = time();
    } elseif ( ! is_numeric( $timestamp ) ) {
        return false;
    }
 
    if ( ! $timezone ) {
        $timezone = wp_timezone();
    }
 
    $datetime = date_create( '@' . $timestamp );
    $datetime->setTimezone( $timezone );
 
    if ( empty( $wp_locale->month ) || empty( $wp_locale->weekday ) ) {
        $date = $datetime->format( $format );
    } else {
        // We need to unpack shorthand `r` format because it has parts that might be localized.
        $format = preg_replace( '/(?<!\\\\)r/', DATE_RFC2822, $format );
 
        $new_format    = '';
        $format_length = strlen( $format );
        $month         = $wp_locale->get_month( $datetime->format( 'm' ) );
        $weekday       = $wp_locale->get_weekday( $datetime->format( 'w' ) );
 
        for ( $i = 0; $i < $format_length; $i ++ ) {
            switch ( $format[ $i ] ) {
                case 'D':
                    $new_format .= addcslashes( $wp_locale->get_weekday_abbrev( $weekday ), '\\A..Za..z' );
                    break;
                case 'F':
                    $new_format .= addcslashes( $month, '\\A..Za..z' );
                    break;
                case 'l':
                    $new_format .= addcslashes( $weekday, '\\A..Za..z' );
                    break;
                case 'M':
                    $new_format .= addcslashes( $wp_locale->get_month_abbrev( $month ), '\\A..Za..z' );
                    break;
                case 'a':
                    $new_format .= addcslashes( $wp_locale->get_meridiem( $datetime->format( 'a' ) ), '\\A..Za..z' );
                    break;
                case 'A':
                    $new_format .= addcslashes( $wp_locale->get_meridiem( $datetime->format( 'A' ) ), '\\A..Za..z' );
                    break;
                case '\\':
                    $new_format .= $format[ $i ];
 
                    // If character follows a slash, we add it without translating.
                    if ( $i < $format_length ) {
                        $new_format .= $format[ ++$i ];
                    }
                    break;
                default:
                    $new_format .= $format[ $i ];
                    break;
            }
        }
 
        $date = $datetime->format( $new_format );
        $date = wp_maybe_decline_date( $date, $format );
    }
 
    /**
     * Filters the date formatted based on the locale.
     *
     * @since 5.3.0
     *
     * @param string       $date      Formatted date string.
     * @param string       $format    Format to display the date.
     * @param int          $timestamp Unix timestamp.
     * @param DateTimeZone $timezone  Timezone.
     */
    $date = apply_filters( 'wp_date', $date, $format, $timestamp, $timezone );
 
    return $date;
}


可以看出,wp_date 做了很多工作。而且,还有同名钩子 wp_date。通过钩子 wp_date,可以做进一步处理。


发表评论

暂无评论,抢个沙发...

客服 工单