diff --git a/wp-includes/general-template.php b/wp-includes/general-template.php index 279da7033..8f6f70b89 100644 --- a/wp-includes/general-template.php +++ b/wp-includes/general-template.php @@ -608,21 +608,21 @@ function wp_title($sep = '»', $display = true, $seplocation = '') { * @return string|null Title when retrieving, null when displaying or failure. */ function single_post_title($prefix = '', $display = true) { - global $wpdb; - $p = get_query_var('p'); - $name = get_query_var('name'); - - if ( intval($p) || '' != $name ) { - if ( !$p ) - $p = $wpdb->get_var($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_name = %s", $name)); - $post = & get_post($p); - $title = $post->post_title; - $title = apply_filters('single_post_title', $title); - if ( $display ) - echo $prefix.strip_tags($title); - else - return strip_tags($title); + global $wpdb, $post; + if ( ! $post ) { + $p = get_query_var('p'); + $name = get_query_var('name'); + if ( intval($p) || '' != $name ) { + if ( !$p ) + $p = $wpdb->get_var($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_name = %s", $name)); + $post = & get_post($p); + } } + $title = apply_filters('single_post_title', $post->post_title, $post); + if ( $display ) + echo $prefix . strip_tags($title); + else + return strip_tags($title); } /** @@ -643,17 +643,24 @@ function single_post_title($prefix = '', $display = true) { * @return string|null Title when retrieving, null when displaying or failure. */ function single_cat_title($prefix = '', $display = true ) { - $cat = intval( get_query_var('cat') ); - if ( !empty($cat) && !(strtoupper($cat) == 'ALL') ) { - $my_cat_name = apply_filters('single_cat_title', get_the_category_by_ID($cat)); - if ( !empty($my_cat_name) ) { - if ( $display ) - echo $prefix.strip_tags($my_cat_name); - else - return strip_tags($my_cat_name); - } - } else if ( is_tag() ) { + global $wp_query; + $cat = $wp_query->queried_object; + + if ( is_tag() ) { return single_tag_title($prefix, $display); + } elseif ( !empty($cat->name) ) { + $cat = $cat->name; + } else { + $cat = intval( get_query_var('cat') ); + if ( !empty($cat) ) + $cat = get_the_category_by_ID($cat); + } + $my_cat_name = apply_filters('single_cat_title', $cat); + if ( !empty($my_cat_name) ) { + if ( $display ) + echo $prefix . strip_tags($my_cat_name); + else + return strip_tags($my_cat_name); } } @@ -678,20 +685,27 @@ function single_tag_title($prefix = '', $display = true ) { if ( !is_tag() ) return; - $tag_id = intval( get_query_var('tag_id') ); + global $wp_query; + $tag = $wp_query->queried_object; - if ( !empty($tag_id) ) { - $my_tag = &get_term($tag_id, 'post_tag', OBJECT, 'display'); - if ( is_wp_error( $my_tag ) ) - return false; - $my_tag_name = apply_filters('single_tag_title', $my_tag->name); - if ( !empty($my_tag_name) ) { - if ( $display ) - echo $prefix . $my_tag_name; - else - return $my_tag_name; + if ( !empty($tag->name) ) { + $tag = sanitize_term($tag, 'post_tag', 'display'); + } else { + $tag_id = intval( get_query_var('tag_id') ); + if ( !empty($tag_id) ) { + $tag = &get_term($tag_id, 'post_tag', OBJECT, 'display'); + if ( is_wp_error( $tag ) ) + return false; } } + + $my_tag_name = apply_filters('single_tag_title', $tag->name); + if ( !empty($my_tag_name) ) { + if ( $display ) + echo $prefix . $my_tag_name; + else + return $my_tag_name; + } } /**