X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/449d082fcc4873c1f7d363a0d9f7409be7f6e77d..refs/tags/wordpress-2.9.2-scripts:/wp-includes/general-template.php diff --git a/wp-includes/general-template.php b/wp-includes/general-template.php index f2e08714..e6166874 100644 --- a/wp-includes/general-template.php +++ b/wp-includes/general-template.php @@ -23,7 +23,7 @@ * @param string $name The name of the specialised header. */ function get_header( $name = null ) { - do_action( 'get_header' ); + do_action( 'get_header', $name ); $templates = array(); if ( isset($name) ) @@ -52,7 +52,7 @@ function get_header( $name = null ) { * @param string $name The name of the specialised footer. */ function get_footer( $name = null ) { - do_action( 'get_footer' ); + do_action( 'get_footer', $name ); $templates = array(); if ( isset($name) ) @@ -81,7 +81,7 @@ function get_footer( $name = null ) { * @param string $name The name of the specialised sidebar. */ function get_sidebar( $name = null ) { - do_action( 'get_sidebar' ); + do_action( 'get_sidebar', $name ); $templates = array(); if ( isset($name) ) @@ -98,20 +98,33 @@ function get_sidebar( $name = null ) { * * Will first attempt to locate the searchform.php file in either the child or * the parent, then load it. If it doesn't exist, then the default search form - * will be displayed. + * will be displayed. The default search form is HTML, which will be displayed. + * There is a filter applied to the search form HTML in order to edit or replace + * it. The filter is 'get_search_form'. + * + * This function is primarily used by themes which want to hardcode the search + * form into the sidebar and also by the search widget in WordPress. + * + * There is also an action that is called whenever the function is run called, + * 'get_search_form'. This can be useful for outputting JavaScript that the + * search relies on or various formatting that applies to the beginning of the + * search. To give a few examples of what it can be used for. * * @since 2.7.0 */ function get_search_form() { do_action( 'get_search_form' ); - if ( '' != locate_template(array('searchform.php'), true) ) + $search_form_template = locate_template(array('searchform.php')); + if ( '' != $search_form_template ) { + require($search_form_template); return; + } - $form = '
- -
- + $form = ' +
+ +
'; @@ -126,12 +139,14 @@ function get_search_form() { * * @since 1.5.0 * @uses apply_filters() Calls 'loginout' hook on HTML link content. + * + * @param string $redirect Optional path to redirect to on login/logout. */ -function wp_loginout() { +function wp_loginout($redirect = '') { if ( ! is_user_logged_in() ) - $link = '' . __('Log in') . ''; + $link = '' . __('Log in') . ''; else - $link = '' . __('Log out') . ''; + $link = '' . __('Log out') . ''; echo apply_filters('loginout', $link); } @@ -144,14 +159,20 @@ function wp_loginout() { * @since 2.7 * @uses wp_nonce_url() To protect against CSRF * @uses site_url() To generate the log in URL + * @uses apply_filters() calls 'logout_url' hook on final logout url * * @param string $redirect Path to redirect to on logout. */ function wp_logout_url($redirect = '') { - if ( strlen($redirect) ) - $redirect = "&redirect_to=$redirect"; + $args = array( 'action' => 'logout' ); + if ( !empty($redirect) ) { + $args['redirect_to'] = urlencode( $redirect ); + } - return wp_nonce_url( site_url("wp-login.php?action=logout$redirect", 'login'), 'log-out' ); + $logout_url = add_query_arg($args, site_url('wp-login.php', 'login')); + $logout_url = wp_nonce_url( $logout_url, 'log-out' ); + + return apply_filters('logout_url', $logout_url, $redirect); } /** @@ -161,14 +182,39 @@ function wp_logout_url($redirect = '') { * * @since 2.7 * @uses site_url() To generate the log in URL + * @uses apply_filters() calls 'login_url' hook on final login url * * @param string $redirect Path to redirect to on login. */ function wp_login_url($redirect = '') { - if ( strlen($redirect) ) - $redirect = "?redirect_to=$redirect"; + $login_url = site_url('wp-login.php', 'login'); + + if ( !empty($redirect) ) { + $login_url = add_query_arg('redirect_to', urlencode($redirect), $login_url); + } + + return apply_filters('login_url', $login_url, $redirect); +} - return site_url("wp-login.php$redirect", 'login'); +/** + * Returns the Lost Password URL. + * + * Returns the URL that allows the user to retrieve the lost password + * + * @since 2.8.0 + * @uses site_url() To generate the lost password URL + * @uses apply_filters() calls 'lostpassword_url' hook on the lostpassword url + * + * @param string $redirect Path to redirect to on login. + */ +function wp_lostpassword_url($redirect = '') { + $args = array( 'action' => 'lostpassword' ); + if ( !empty($redirect) ) { + $args['redirect_to'] = $redirect; + } + + $lostpassword_url = add_query_arg($args, site_url('wp-login.php', 'login')); + return apply_filters('lostpassword_url', $lostpassword_url, $redirect); } /** @@ -375,6 +421,7 @@ function wp_title($sep = '»', $display = true, $seplocation = '') { $year = get_query_var('year'); $monthnum = get_query_var('monthnum'); $day = get_query_var('day'); + $search = get_query_var('s'); $title = ''; $t_sep = '%WP_TITILE_SEP%'; // Temporary separator, for accurate flipping, if necessary @@ -432,7 +479,7 @@ function wp_title($sep = '»', $display = true, $seplocation = '') { } // If there is a post - if ( is_single() || ( is_page() && !is_front_page() ) ) { + if ( is_single() || ( is_home() && !is_front_page() ) || ( is_page() && !is_front_page() ) ) { $post = $wp_query->get_queried_object(); $title = strip_tags( apply_filters( 'single_post_title', $post->post_title ) ); } @@ -447,6 +494,12 @@ function wp_title($sep = '»', $display = true, $seplocation = '') { $title = "$tax$t_sep$term"; } + //If it's a search + if ( is_search() ) { + /* translators: 1: separator, 2: search phrase */ + $title = sprintf(__('Search Results %1$s %2$s'), $t_sep, strip_tags($search)); + } + if ( is_404() ) { $title = __('Page not found'); } @@ -660,8 +713,8 @@ function single_month_title($prefix = '', $display = true ) { */ function get_archives_link($url, $text, $format = 'html', $before = '', $after = '') { $text = wptexturize($text); - $title_text = attribute_escape($text); - $url = clean_url($url); + $title_text = esc_attr($text); + $url = esc_url($url); if ('link' == $format) $link_html = "\t\n"; @@ -750,7 +803,7 @@ function wp_get_archives($args = '') { $output = ''; if ( 'monthly' == $type ) { - $query = "SELECT DISTINCT YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date DESC $limit"; + $query = "SELECT YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date DESC $limit"; $key = md5($query); $cache = wp_cache_get( 'wp_get_archives' , 'general'); if ( !isset( $cache[ $key ] ) ) { @@ -764,6 +817,7 @@ function wp_get_archives($args = '') { $afterafter = $after; foreach ( (array) $arcresults as $arcresult ) { $url = get_month_link( $arcresult->year, $arcresult->month ); + /* translators: 1: month name, 2: 4-digit year */ $text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($arcresult->month), $arcresult->year); if ( $show_post_count ) $after = ' ('.$arcresult->posts.')' . $afterafter; @@ -771,7 +825,7 @@ function wp_get_archives($args = '') { } } } elseif ('yearly' == $type) { - $query = "SELECT DISTINCT YEAR(post_date) AS `year`, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date) ORDER BY post_date DESC $limit"; + $query = "SELECT YEAR(post_date) AS `year`, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date) ORDER BY post_date DESC $limit"; $key = md5($query); $cache = wp_cache_get( 'wp_get_archives' , 'general'); if ( !isset( $cache[ $key ] ) ) { @@ -792,7 +846,7 @@ function wp_get_archives($args = '') { } } } elseif ( 'daily' == $type ) { - $query = "SELECT DISTINCT YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, DAYOFMONTH(post_date) AS `dayofmonth`, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date), MONTH(post_date), DAYOFMONTH(post_date) ORDER BY post_date DESC $limit"; + $query = "SELECT YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, DAYOFMONTH(post_date) AS `dayofmonth`, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date), MONTH(post_date), DAYOFMONTH(post_date) ORDER BY post_date DESC $limit"; $key = md5($query); $cache = wp_cache_get( 'wp_get_archives' , 'general'); if ( !isset( $cache[ $key ] ) ) { @@ -902,22 +956,29 @@ function calendar_week_mod($num) { function get_calendar($initial = true) { global $wpdb, $m, $monthnum, $year, $wp_locale, $posts; + $cache = array(); $key = md5( $m . $monthnum . $year ); if ( $cache = wp_cache_get( 'get_calendar', 'calendar' ) ) { - if ( isset( $cache[ $key ] ) ) { + if ( is_array($cache) && isset( $cache[ $key ] ) ) { echo $cache[ $key ]; return; } } - ob_start(); + if ( !is_array($cache) ) + $cache = array(); + // Quick check. If we have no posts at all, abort! if ( !$posts ) { - $gotsome = $wpdb->get_var("SELECT ID from $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' ORDER BY post_date DESC LIMIT 1"); - if ( !$gotsome ) + $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; + } } + ob_start(); if ( isset($_GET['w']) ) $w = ''.intval($_GET['w']); @@ -961,8 +1022,10 @@ function get_calendar($initial = true) { ORDER BY post_date ASC LIMIT 1"); - echo ' - + /* translators: Calendar caption: 1: month name, 2: 4-digit year */ + $calendar_caption = _x('%1$s %2$s', 'calendar caption'); + echo '
' . sprintf(_c('%1$s %2$s|Used as a calendar caption'), $wp_locale->get_month($thismonth), date('Y', $unixmonth)) . '
+ '; @@ -974,6 +1037,7 @@ function get_calendar($initial = true) { foreach ( $myweek as $wd ) { $day_name = (true == $initial) ? $wp_locale->get_weekday_initial($wd) : $wp_locale->get_weekday_abbrev($wd); + $wd = esc_attr($wd); echo "\n\t\t"; } @@ -996,8 +1060,8 @@ function get_calendar($initial = true) { if ( $next ) { echo "\n\t\t".''; + get_month_link($next->year, $next->month) . '" title="' . esc_attr( sprintf(__('View posts for %1$s %2$s'), $wp_locale->get_month($next->month) , + date('Y', mktime(0, 0 , 0, $next->month, 1, $next->year))) ) . '">' . $wp_locale->get_month_abbrev($wp_locale->get_month($next->month)) . ' »'; } else { echo "\n\t\t".''; } @@ -1039,8 +1103,7 @@ function get_calendar($initial = true) { if ( $ak_post_titles ) { foreach ( (array) $ak_post_titles as $ak_post_title ) { - $post_title = apply_filters( "the_title", $ak_post_title->post_title ); - $post_title = str_replace('"', '"', wptexturize( $post_title )); + $post_title = esc_attr( apply_filters( 'the_title', $ak_post_title->post_title ) ); if ( empty($ak_titles_for_day['day_'.$ak_post_title->dom]) ) $ak_titles_for_day['day_'.$ak_post_title->dom] = ''; @@ -1055,7 +1118,7 @@ function get_calendar($initial = true) { // See how much we should pad in the beginning $pad = calendar_week_mod(date('w', $unixmonth)-$week_begins); if ( 0 != $pad ) - echo "\n\t\t".''; + echo "\n\t\t".''; $daysinmonth = intval(date('t', $unixmonth)); for ( $day = 1; $day <= $daysinmonth; ++$day ) { @@ -1069,7 +1132,7 @@ function get_calendar($initial = true) { echo ''; @@ -1080,7 +1143,7 @@ function get_calendar($initial = true) { $pad = 7 - calendar_week_mod(date('w', mktime(0, 0 , 0, $thismonth, $day, $thisyear))-$week_begins); if ( $pad != 0 && $pad != 7 ) - echo "\n\t\t".''; + echo "\n\t\t".''; echo "\n\t\n\t\n\t
' . sprintf($calendar_caption, $wp_locale->get_month($thismonth), date('Y', $unixmonth)) . '
$day_name' . $wp_locale->get_month_abbrev($wp_locale->get_month($next->month)) . ' »   '; if ( in_array($day, $daywithpost) ) // any posts today? - echo '$day"; + echo '$day"; else echo $day; echo '  
"; @@ -1104,7 +1167,6 @@ add_action( 'save_post', 'delete_get_calendar_cache' ); add_action( 'delete_post', 'delete_get_calendar_cache' ); add_action( 'update_option_start_of_week', 'delete_get_calendar_cache' ); add_action( 'update_option_gmt_offset', 'delete_get_calendar_cache' ); -add_action( 'update_option_start_of_week', 'delete_get_calendar_cache' ); /** * Display all of the allowed tags in HTML format with attributes. @@ -1141,7 +1203,7 @@ function allowed_tags() { */ function the_date_xml() { global $post; - echo mysql2date('Y-m-d', $post->post_date); + echo mysql2date('Y-m-d', $post->post_date, false); } /** @@ -1169,12 +1231,13 @@ function the_date($d='', $before='', $after='', $echo = true) { $the_date .= mysql2date($d, $post->post_date); $the_date .= $after; $previousday = $day; - } + $the_date = apply_filters('the_date', $the_date, $d, $before, $after); if ( $echo ) echo $the_date; else return $the_date; + } } /** @@ -1199,9 +1262,9 @@ function the_modified_date($d = '') { */ function get_the_modified_date($d = '') { if ( '' == $d ) - $the_time = get_post_modified_time(get_option('date_format')); + $the_time = get_post_modified_time(get_option('date_format'), null, null, true); else - $the_time = get_post_modified_time($d); + $the_time = get_post_modified_time($d, null, null, true); return apply_filters('get_the_modified_date', $the_time, $d); } @@ -1229,9 +1292,9 @@ function get_the_time( $d = '', $post = null ) { $post = get_post($post); if ( '' == $d ) - $the_time = get_post_time(get_option('time_format'), false, $post); + $the_time = get_post_time(get_option('time_format'), false, $post, true); else - $the_time = get_post_time($d, false, $post); + $the_time = get_post_time($d, false, $post, true); return apply_filters('get_the_time', $the_time, $d, $post); } @@ -1243,9 +1306,10 @@ function get_the_time( $d = '', $post = null ) { * @param string $d Either 'G', 'U', or php date format. * @param bool $gmt Whether of not to return the gmt time. * @param int|object $post Optional post ID or object. Default is global $post object. + * @param bool $translate Whether to translate the time string or not * @return string */ -function get_post_time( $d = 'U', $gmt = false, $post = null ) { // returns timestamp +function get_post_time( $d = 'U', $gmt = false, $post = null, $translate = false ) { // returns timestamp $post = get_post($post); if ( $gmt ) @@ -1253,7 +1317,7 @@ function get_post_time( $d = 'U', $gmt = false, $post = null ) { // returns time else $time = $post->post_date; - $time = mysql2date($d, $time); + $time = mysql2date($d, $time, $translate); return apply_filters('get_post_time', $time, $d, $gmt); } @@ -1278,9 +1342,9 @@ function the_modified_time($d = '') { */ function get_the_modified_time($d = '') { if ( '' == $d ) - $the_time = get_post_modified_time(get_option('time_format')); + $the_time = get_post_modified_time(get_option('time_format'), null, null, true); else - $the_time = get_post_modified_time($d); + $the_time = get_post_modified_time($d, null, null, true); return apply_filters('get_the_modified_time', $the_time, $d); } @@ -1291,18 +1355,20 @@ function get_the_modified_time($d = '') { * * @param string $d Either 'G', 'U', or php date format. * @param bool $gmt Whether of not to return the gmt time. + * @param int|object $post A post_id or post object + * @param bool translate Whether to translate the result or not * @return string Returns timestamp */ -function get_post_modified_time( $d = 'U', $gmt = false ) { - global $post; +function get_post_modified_time( $d = 'U', $gmt = false, $post = null, $translate = false ) { + $post = get_post($post); if ( $gmt ) $time = $post->post_modified_gmt; else $time = $post->post_modified; - $time = mysql2date($d, $time); + $time = mysql2date($d, $time, $translate); - return apply_filters('get_the_modified_time', $time, $d, $gmt); + return apply_filters('get_post_modified_time', $time, $d, $gmt); } /** @@ -1314,7 +1380,7 @@ function get_post_modified_time( $d = 'U', $gmt = false ) { */ function the_weekday() { global $wp_locale, $post; - $the_weekday = $wp_locale->get_weekday(mysql2date('w', $post->post_date)); + $the_weekday = $wp_locale->get_weekday(mysql2date('w', $post->post_date, false)); $the_weekday = apply_filters('the_weekday', $the_weekday); echo $the_weekday; } @@ -1335,7 +1401,7 @@ function the_weekday_date($before='',$after='') { $the_weekday_date = ''; if ( $day != $previousweekday ) { $the_weekday_date .= $before; - $the_weekday_date .= $wp_locale->get_weekday(mysql2date('w', $post->post_date)); + $the_weekday_date .= $wp_locale->get_weekday(mysql2date('w', $post->post_date, false)); $the_weekday_date .= $after; $previousweekday = $day; } @@ -1363,6 +1429,102 @@ function wp_footer() { do_action('wp_footer'); } +/** + * Enable/disable automatic general feed link outputting. + * + * @since 2.8.0 + * + * @param boolean $add Add or remove links. Defaults to true. + */ +function automatic_feed_links( $add = true ) { + if ( $add ) + add_action( 'wp_head', 'feed_links', 2 ); + else { + remove_action( 'wp_head', 'feed_links', 2 ); + remove_action( 'wp_head', 'feed_links_extra', 3 ); + } +} + +/** + * Display the links to the general feeds. + * + * @since 2.8.0 + * + * @param array $args Optional arguments. + */ +function feed_links( $args ) { + $defaults = array( + /* translators: Separator between blog name and feed type in feed links */ + 'separator' => _x('»', 'feed link'), + /* translators: 1: blog title, 2: separator (raquo) */ + 'feedtitle' => __('%1$s %2$s Feed'), + /* translators: %s: blog title, 2: separator (raquo) */ + 'comstitle' => __('%1$s %2$s Comments Feed'), + ); + + $args = wp_parse_args( $args, $defaults ); + + echo '\n"; + echo '\n"; +} + +/** + * Display the links to the extra feeds such as category feeds. + * + * @since 2.8.0 + * + * @param array $args Optional arguments. + */ +function feed_links_extra( $args ) { + $defaults = array( + /* translators: Separator between blog name and feed type in feed links */ + 'separator' => _x('»', 'feed link'), + /* translators: 1: blog name, 2: separator(raquo), 3: post title */ + 'singletitle' => __('%1$s %2$s %3$s Comments Feed'), + /* translators: 1: blog name, 2: separator(raquo), 3: category name */ + 'cattitle' => __('%1$s %2$s %3$s Category Feed'), + /* translators: 1: blog name, 2: separator(raquo), 3: tag name */ + 'tagtitle' => __('%1$s %2$s %3$s Tag Feed'), + /* translators: 1: blog name, 2: separator(raquo), 3: author name */ + 'authortitle' => __('%1$s %2$s Posts by %3$s Feed'), + /* translators: 1: blog name, 2: separator(raquo), 3: search phrase */ + 'searchtitle' => __('%1$s %2$s Search Results for “%3$s” Feed'), + ); + + $args = wp_parse_args( $args, $defaults ); + + if ( is_single() || is_page() ) { + $post = &get_post( $id = 0 ); + + if ( comments_open() || pings_open() || $post->comment_count > 0 ) { + $title = esc_attr(sprintf( $args['singletitle'], get_bloginfo('name'), $args['separator'], esc_html( get_the_title() ) )); + $href = get_post_comments_feed_link( $post->ID ); + } + } elseif ( is_category() ) { + $cat_id = intval( get_query_var('cat') ); + + $title = esc_attr(sprintf( $args['cattitle'], get_bloginfo('name'), $args['separator'], get_cat_name( $cat_id ) )); + $href = get_category_feed_link( $cat_id ); + } elseif ( is_tag() ) { + $tag_id = intval( get_query_var('tag_id') ); + $tag = get_tag( $tag_id ); + + $title = esc_attr(sprintf( $args['tagtitle'], get_bloginfo('name'), $args['separator'], $tag->name )); + $href = get_tag_feed_link( $tag_id ); + } elseif ( is_author() ) { + $author_id = intval( get_query_var('author') ); + + $title = esc_attr(sprintf( $args['authortitle'], get_bloginfo('name'), $args['separator'], get_the_author_meta( 'display_name', $author_id ) )); + $href = get_author_feed_link( $author_id ); + } elseif ( is_search() ) { + $title = esc_attr(sprintf( $args['searchtitle'], get_bloginfo('name'), $args['separator'], get_search_query() )); + $href = get_search_feed_link(); + } + + if ( isset($title) && isset($href) ) + echo '' . "\n"; +} + /** * Display the link to the Really Simple Discovery service endpoint. * @@ -1487,67 +1649,52 @@ function the_editor($content, $id = 'content', $prev_id = 'title', $media_button $media_buttons = false; $richedit = user_can_richedit(); - $rows = "rows='$rows'"; + $class = ''; if ( $richedit || $media_buttons ) { ?>
-
- - - - ', 'html');"> + + - - - ', 'html');"> + + -
- -
- + if ( $media_buttons ) { ?> +
+ +
+
- - -
- + +
-
\n"); +
\n"); $the_editor_content = apply_filters('the_editor_content', $content); printf($the_editor, $the_editor_content); - ?> +?> - $prev_text"; + $page_links[] = ""; endif; for ( $n = 1; $n <= $total; $n++ ) : $n_display = number_format_i18n($n); @@ -1702,7 +1849,7 @@ function paginate_links( $args = '' ) { if ( $add_args ) $link = add_query_arg( $add_args, $link ); $link .= $add_fragment; - $page_links[] = "$n_display"; + $page_links[] = "$n_display"; $dots = true; elseif ( $dots && !$show_all ) : $page_links[] = "..."; @@ -1716,7 +1863,7 @@ function paginate_links( $args = '' ) { if ( $add_args ) $link = add_query_arg( $add_args, $link ); $link .= $add_fragment; - $page_links[] = ""; + $page_links[] = ""; endif; switch ( $type ) : case 'array' : @@ -1816,9 +1963,9 @@ function wp_admin_css( $file = 'wp-admin', $force_echo = false ) { return; } - echo apply_filters( 'wp_admin_css', "\n", $file ); + echo apply_filters( 'wp_admin_css', "\n", $file ); if ( 'rtl' == get_bloginfo( 'text_direction' ) ) - echo apply_filters( 'wp_admin_css', "\n", "$file-rtl" ); + echo apply_filters( 'wp_admin_css', "\n", "$file-rtl" ); } /** @@ -1875,10 +2022,10 @@ function the_generator( $type ) { function get_the_generator( $type ) { switch ($type) { case 'html': - $gen = '' . "\n"; + $gen = ''; break; case 'xhtml': - $gen = '' . "\n"; + $gen = ''; break; case 'atom': $gen = 'WordPress'; @@ -1899,4 +2046,4 @@ function get_the_generator( $type ) { return apply_filters( "get_the_generator_{$type}", $gen, $type ); } -?> +?> \ No newline at end of file