PHP Calendar 函数,wordpress函数get_calendar()用法示例
get_calendar( bool $initial = true, bool $echo = true )
Display calendar with days that have posts as links.
描述
The calendar is cached, which will be retrieved, if it exists. If there are no posts for the month, then it will not be displayed.
參數
$initial
(bool)
(Optional)
Use initial calendar names.
Default value: true
$echo
(bool)
(Optional)
Set to false for return.
Default value: true
返回值
(string|void) String when retrieving.
源代碼
File: wp-includes/general-template.php
function get_calendar( $initial = true, $echo = true ) {
global $wpdb, $m, $monthnum, $year, $wp_locale, $posts;
$key = md5( $m . $monthnum . $year );
$cache = wp_cache_get( 'get_calendar', 'calendar' );
if ( $cache && is_array( $cache ) && isset( $cache[ $key ] ) ) {
/** This filter is documented in wp-includes/general-template.php */
$output = apply_filters( 'get_calendar', $cache[ $key ] );
if ( $echo ) {
echo $output;
return;
}
return $output;
}
if ( ! is_array( $cache ) ) {
$cache = array();
}
// Quick check. If we have no posts at all, abort!
if ( ! $posts ) {
$gotsome = $wpdb->get_var("SELECT 1 as test FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' LIMIT 1");
if ( ! $gotsome ) {
$cache[ $key ] = '';
wp_cache_set( 'get_calendar', $cache, 'calendar' );
return;
}
}
if ( isset( $_GET['w'] ) ) {
$w = (int) $_GET['w'];
}
// week_begins = 0 stands for Sunday
$week_begins = (int) get_option( 'start_of_week' );
$ts = current_time( 'timestamp' );
// Let's figure out when we are
if ( ! empty( $monthnum ) && ! empty( $year ) ) {
$thismonth = zeroise( intval( $monthnum ), 2 );
$thisyear = (int) $year;
} elseif ( ! empty( $w ) ) {
// We need to get the month from MySQL
$thisyear = (int) substr( $m, 0, 4 );
//it seems MySQL's weeks disagree with PHP's
$d = ( ( $w - 1 ) * 7 ) + 6;
$thismonth = $wpdb->get_var("SELECT DATE_FORMAT((DATE_ADD('{$thisyear}0101', INTERVAL $d DAY) ), '%m')");
} elseif ( ! empty( $m ) ) {
$thisyear = (int) substr( $m, 0, 4 );
if ( strlen( $m ) < 6 ) {
$thismonth = '01';
} else {
$thismonth = zeroise( (int) substr( $m, 4, 2 ), 2 );
}
} else {
$thisyear = gmdate( 'Y', $ts );
$thismonth = gmdate( 'm', $ts );
}
$unixmonth = mktime( 0, 0 , 0, $thismonth, 1, $thisyear );
$last_day = date( 't', $unixmonth );
// Get the next and previous month and year with at least one post
$previous = $wpdb->get_row("SELECT MONTH(post_date) AS month, YEAR(post_date) AS year
FROM $wpdb->posts
WHERE post_date < '$thisyear-$thismonth-01'
AND post_type = 'post' AND post_status = 'publish'
ORDER BY post_date DESC
LIMIT 1");
$next = $wpdb->get_row("SELECT MONTH(post_date) AS month, YEAR(post_date) AS year
FROM $wpdb->posts
WHERE post_date > '$thisyear-$thismonth-{$last_day} 23:59:59'
AND post_type = 'post' AND post_status = 'publish'
ORDER BY post_date ASC
LIMIT 1");
/* translators: Calendar caption: 1: month name, 2: 4-digit year */
$calendar_caption = _x('%1$s %2$s', 'calendar caption');
$calendar_output = '
$calendar_caption,
$wp_locale->get_month( $thismonth ),
date( 'Y', $unixmonth )
) . '
';
$myweek = array();
for ( $wdcount = 0; $wdcount <= 6; $wdcount++ ) {
$myweek[] = $wp_locale->get_weekday( ( $wdcount + $week_begins ) % 7 );
}
foreach ( $myweek as $wd ) {
$day_name = $initial ? $wp_locale->get_weekday_initial( $wd ) : $wp_locale->get_weekday_abbrev( $wd );
$wd = esc_attr( $wd );
$calendar_output .= "\n\t\t
$day_name";}
$calendar_output .= '
';if ( $previous ) {
$calendar_output .= "\n\t\t".'
? ' .$wp_locale->get_month_abbrev( $wp_locale->get_month( $previous->month ) ) .
'
';} else {
$calendar_output .= "\n\t\t".'
?';}
$calendar_output .= "\n\t\t".'
?';if ( $next ) {
$calendar_output .= "\n\t\t".'
' .$wp_locale->get_month_abbrev( $wp_locale->get_month( $next->month ) ) .
' ?
';} else {
$calendar_output .= "\n\t\t".'
?';}
$calendar_output .= '
';$daywithpost = array();
// Get days with posts
$dayswithposts = $wpdb->get_results("SELECT DISTINCT DAYOFMONTH(post_date)
FROM $wpdb->posts WHERE post_date >= '{$thisyear}-{$thismonth}-01 00:00:00'
AND post_type = 'post' AND post_status = 'publish'
AND post_date <= '{$thisyear}-{$thismonth}-{$last_day} 23:59:59'", ARRAY_N);
if ( $dayswithposts ) {
foreach ( (array) $dayswithposts as $daywith ) {
$daywithpost[] = $daywith[0];
}
}
// See how much we should pad in the beginning
$pad = calendar_week_mod( date( 'w', $unixmonth ) - $week_begins );
if ( 0 != $pad ) {
$calendar_output .= "\n\t\t".'
?';}
$newrow = false;
$daysinmonth = (int) date( 't', $unixmonth );
for ( $day = 1; $day <= $daysinmonth; ++$day ) {
if ( isset($newrow) && $newrow ) {
$calendar_output .= "\n\t
\n\t\n\t\t";}
$newrow = false;
if ( $day == gmdate( 'j', $ts ) &&
$thismonth == gmdate( 'm', $ts ) &&
$thisyear == gmdate( 'Y', $ts ) ) {
$calendar_output .= '
';} else {
$calendar_output .= '
';}
if ( in_array( $day, $daywithpost ) ) {
// any posts today?
$date_format = date( _x( 'F j, Y', 'daily archives date format' ), strtotime( "{$thisyear}-{$thismonth}-{$day}" ) );
/* translators: Post calendar label. 1: Date */
$label = sprintf( __( 'Posts published on %s' ), $date_format );
$calendar_output .= sprintf(
'%s',
get_day_link( $thisyear, $thismonth, $day ),
esc_attr( $label ),
$day
);
} else {
$calendar_output .= $day;
}
$calendar_output .= '
';if ( 6 == calendar_week_mod( date( 'w', mktime(0, 0 , 0, $thismonth, $day, $thisyear ) ) - $week_begins ) ) {
$newrow = true;
}
}
$pad = 7 - calendar_week_mod( date( 'w', mktime( 0, 0 , 0, $thismonth, $day, $thisyear ) ) - $week_begins );
if ( $pad != 0 && $pad != 7 ) {
$calendar_output .= "\n\t\t".'
?';}
$calendar_output .= "\n\t
\n\t\n\t";$cache[ $key ] = $calendar_output;
wp_cache_set( 'get_calendar', $cache, 'calendar' );
if ( $echo ) {
/**
* Filters the HTML calendar output.
*
* @since 3.0.0
*
* @param string $calendar_output HTML output of the calendar.
*/
echo apply_filters( 'get_calendar', $calendar_output );
return;
}
/** This filter is documented in wp-includes/general-template.php */
return apply_filters( 'get_calendar', $calendar_output );
}
更新日志
Version
描述
1.0.0
Introduced.
相關函數
Uses
wp-includes/cache.php:
wp_cache_get()
wp-includes/cache.php:
wp_cache_set()
wp-includes/l10n.php:
_x()
wp-includes/l10n.php:
__()
wp-includes/formatting.php:
esc_attr()
wp-includes/formatting.php:
zeroise()
wp-includes/general-template.php:
calendar_week_mod()
wp-includes/general-template.php:
get_calendar
wp-includes/functions.php:
current_time()
wp-includes/class-wp-locale.php:
WP_Locale::get_month()
wp-includes/class-wp-locale.php:
WP_Locale::get_month_abbrev()
wp-includes/class-wp-locale.php:
WP_Locale::get_weekday()
wp-includes/class-wp-locale.php:
WP_Locale::get_weekday_initial()
wp-includes/class-wp-locale.php:
WP_Locale::get_weekday_abbrev()
wp-includes/link-template.php:
get_month_link()
wp-includes/link-template.php:
get_day_link()
wp-includes/plugin.php:
apply_filters()
wp-includes/option.php:
get_option()
wp-includes/wp-db.php:
wpdb::get_var()
wp-includes/wp-db.php:
wpdb::get_row()
wp-includes/wp-db.php:
wpdb::get_results()
Show 16 more uses
Used By
wp-includes/widgets/class-wp-widget-calendar.php:
WP_Widget_Calendar::widget()
總結
以上是生活随笔為你收集整理的PHP Calendar 函数,wordpress函数get_calendar()用法示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新手入门教程-------Spring
- 下一篇: matlab如何导入多文本数据,将文本文