* an array. See the function for what can be override in the $args parameter.
*
* The title before it is displayed will have the tags stripped and {@link
- * attribute_escape()} before it is passed to the user or displayed. The default
+ * esc_attr()} before it is passed to the user or displayed. The default
* as with {@link the_title()}, is to display the title.
*
* @since 2.3.0
$title = $before . $title . $after;
- $title = attribute_escape(strip_tags($title));
+ $title = esc_attr(strip_tags($title));
if ( $echo )
echo $title;
$title = $post->post_title;
if ( !is_admin() ) {
- if ( !empty($post->post_password) )
- $title = sprintf(__('Protected: %s'), $title);
- else if ( isset($post->post_status) && 'private' == $post->post_status )
- $title = sprintf(__('Private: %s'), $title);
+ if ( !empty($post->post_password) ) {
+ $protected_title_format = apply_filters('protected_title_format', __('Protected: %s'));
+ $title = sprintf($protected_title_format, $title);
+ } else if ( isset($post->post_status) && 'private' == $post->post_status ) {
+ $private_title_format = apply_filters('private_title_format', __('Private: %s'));
+ $title = sprintf($private_title_format, $title);
+ }
}
- return apply_filters( 'the_title', $title );
+ return apply_filters( 'the_title', $title, $post->ID );
}
/**
$more_link_text = __( '(more...)' );
$output = '';
+ $hasTeaser = false;
// If post password required and it doesn't match the cookie.
if ( post_password_required($post) ) {
$content = explode($matches[0], $content, 2);
if ( !empty($matches[1]) && !empty($more_link_text) )
$more_link_text = strip_tags(wp_kses_no_null(trim($matches[1])));
+
+ $hasTeaser = true;
} else {
$content = array($content);
}
if ( (false !== strpos($post->post_content, '<!--noteaser-->') && ((!$multipage) || ($page==1))) )
$stripteaser = 1;
$teaser = $content[0];
- if ( ($more) && ($stripteaser) )
+ if ( ($more) && ($stripteaser) && ($hasTeaser) )
$teaser = '';
$output .= $teaser;
if ( count($content) > 1 ) {
if ( $more ) {
- $output .= '<span id="more-'.$id.'"></span>'.$content[1];
+ $output .= '<span id="more-' . $id . '"></span>' . $content[1];
} else {
- $output = balanceTags($output);
if ( ! empty($more_link_text) )
- $output .= ' <a href="'. get_permalink() . "#more-$id\" class=\"more-link\">$more_link_text</a>";
+ $output .= apply_filters( 'the_content_more_link', ' <a href="' . get_permalink() . "#more-$id\" class=\"more-link\">$more_link_text</a>", $more_link_text );
+ $output = force_balance_tags($output);
}
}
$classes = array();
+ $classes[] = 'post-' . $post->ID;
$classes[] = $post->post_type;
// sticky for Sticky Posts
foreach ( (array) get_the_category($post->ID) as $cat ) {
if ( empty($cat->slug ) )
continue;
- $classes[] = 'category-' . $cat->slug;
+ $classes[] = 'category-' . sanitize_html_class($cat->slug, $cat->cat_ID);
}
// Tags
foreach ( (array) get_the_tags($post->ID) as $tag ) {
if ( empty($tag->slug ) )
continue;
- $classes[] = 'tag-' . $tag->slug;
+ $classes[] = 'tag-' . sanitize_html_class($tag->slug, $tag->term_id);
}
if ( !empty($class) ) {
return apply_filters('post_class', $classes, $class, $post_id);
}
+/**
+ * Display the classes for the body element.
+ *
+ * @since 2.8.0
+ *
+ * @param string|array $class One or more classes to add to the class list.
+ */
+function body_class( $class = '' ) {
+ // Separates classes with a single space, collates classes for body element
+ echo 'class="' . join( ' ', get_body_class( $class ) ) . '"';
+}
+
+/**
+ * Retrieve the classes for the body element as an array.
+ *
+ * @since 2.8.0
+ *
+ * @param string|array $class One or more classes to add to the class list.
+ * @return array Array of classes.
+ */
+function get_body_class( $class = '' ) {
+ global $wp_query, $wpdb, $current_user;
+
+ $classes = array();
+
+ if ( 'rtl' == get_bloginfo('text_direction') )
+ $classes[] = 'rtl';
+
+ if ( is_front_page() )
+ $classes[] = 'home';
+ if ( is_home() )
+ $classes[] = 'blog';
+ if ( is_archive() )
+ $classes[] = 'archive';
+ if ( is_date() )
+ $classes[] = 'date';
+ if ( is_search() )
+ $classes[] = 'search';
+ if ( is_paged() )
+ $classes[] = 'paged';
+ if ( is_attachment() )
+ $classes[] = 'attachment';
+ if ( is_404() )
+ $classes[] = 'error404';
+
+ if ( is_single() ) {
+ $wp_query->post = $wp_query->posts[0];
+ setup_postdata($wp_query->post);
+
+ $postID = $wp_query->post->ID;
+ $classes[] = 'single postid-' . $postID;
+
+ if ( is_attachment() ) {
+ $mime_type = get_post_mime_type();
+ $mime_prefix = array( 'application/', 'image/', 'text/', 'audio/', 'video/', 'music/' );
+ $classes[] = 'attachmentid-' . $postID;
+ $classes[] = 'attachment-' . str_replace($mime_prefix, '', $mime_type);
+ }
+ } elseif ( is_archive() ) {
+ if ( is_author() ) {
+ $author = $wp_query->get_queried_object();
+ $classes[] = 'author';
+ $classes[] = 'author-' . sanitize_html_class($author->user_nicename , $author->user_id);
+ } elseif ( is_category() ) {
+ $cat = $wp_query->get_queried_object();
+ $classes[] = 'category';
+ $classes[] = 'category-' . sanitize_html_class($cat->slug, $cat->cat_ID);
+ } elseif ( is_tag() ) {
+ $tags = $wp_query->get_queried_object();
+ $classes[] = 'tag';
+ $classes[] = 'tag-' . sanitize_html_class($tags->slug, $tags->term_id);
+ }
+ } elseif ( is_page() ) {
+ $classes[] = 'page';
+
+ $wp_query->post = $wp_query->posts[0];
+ setup_postdata($wp_query->post);
+
+ $pageID = $wp_query->post->ID;
+
+ $classes[] = 'page-id-' . $pageID;
+
+ if ( $wpdb->get_var( $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_parent = %d AND post_type = 'page' LIMIT 1", $pageID) ) )
+ $classes[] = 'page-parent';
+
+ if ( $wp_query->post->post_parent )
+ $classes[] = 'page-child';
+ $classes[] = 'parent-pageid-' . $wp_query->post->post_parent;
+
+ if ( is_page_template() )
+ $classes[] = 'page-template';
+ $classes[] = 'page-template-' . str_replace( '.php', '-php', get_post_meta( $pageID, '_wp_page_template', true ) );
+ } elseif ( is_search() ) {
+ if ( !empty($wp_query->posts) )
+ $classes[] = 'search-results';
+ else
+ $classes[] = 'search-no-results';
+ }
+
+ if ( is_user_logged_in() )
+ $classes[] = 'logged-in';
+
+ $page = $wp_query->get('page');
+
+ if ( !$page || $page < 2)
+ $page = $wp_query->get('paged');
+
+ if ( $page && $page > 1 ) {
+ $classes[] = 'paged-' . $page;
+
+ if ( is_single() )
+ $classes[] = 'single-paged-' . $page;
+ elseif ( is_page() )
+ $classes[] = 'page-paged-' . $page;
+ elseif ( is_category() )
+ $classes[] = 'category-paged-' . $page;
+ elseif ( is_tag() )
+ $classes[] = 'tag-paged-' . $page;
+ elseif ( is_date() )
+ $classes[] = 'date-paged-' . $page;
+ elseif ( is_author() )
+ $classes[] = 'author-paged-' . $page;
+ elseif ( is_search() )
+ $classes[] = 'search-paged-' . $page;
+ }
+
+ if ( !empty($class) ) {
+ if ( !is_array( $class ) )
+ $class = preg_split('#\s+#', $class);
+ $classes = array_merge($classes, $class);
+ }
+
+ return apply_filters('body_class', $classes, $class);
+}
+
/**
* Whether post requires password and correct password has been provided.
*
if ( $show_option_no_change )
$output .= "\t<option value=\"-1\">$show_option_no_change</option>";
if ( $show_option_none )
- $output .= "\t<option value=\"$option_none_value\">$show_option_none</option>\n";
+ $output .= "\t<option value=\"" . esc_attr($option_none_value) . "\">$show_option_none</option>\n";
$output .= walk_page_dropdown_tree($pages, $depth, $r);
$output .= "</select>\n";
}
$output .= '<li class="pagenav">' . $r['title_li'] . '<ul>';
global $wp_query;
- if ( is_page() || $wp_query->is_posts_page )
+ if ( is_page() || is_attachment() || $wp_query->is_posts_page )
$current_page = $wp_query->get_queried_object_id();
$output .= walk_page_tree($pages, $r['depth'], $current_page, $r);
* @see Walker_Page::walk() for parameters and return description.
*/
function walk_page_tree($pages, $depth, $current_page, $r) {
- $walker = new Walker_Page;
+ if ( empty($r['walker']) )
+ $walker = new Walker_Page;
+ else
+ $walker = $r['walker'];
+
$args = array($pages, $depth, $r, $current_page);
return call_user_func_array(array(&$walker, 'walk'), $args);
}
* @see Walker_PageDropdown::walk() for parameters and return description.
*/
function walk_page_dropdown_tree() {
- $walker = new Walker_PageDropdown;
$args = func_get_args();
+ if ( empty($args[2]['walker']) ) // the user's options are the third parameter
+ $walker = new Walker_PageDropdown;
+ else
+ $walker = $args[2]['walker'];
+
return call_user_func_array(array(&$walker, 'walk'), $args);
}
* @uses apply_filters() Calls 'wp_get_attachment_link' filter on HTML content with same parameters as function.
*
* @param int $id Optional. Post ID.
- * @param string $size Optional. Image size.
+ * @param string $size Optional, default is 'thumbnail'. Size of image, either array or string.
* @param bool $permalink Optional, default is false. Whether to add permalink to image.
* @param bool $icon Optional, default is false. Whether to include icon.
+ * @param string $text Optional, default is false. If string, then will be link text.
* @return string HTML content.
*/
-function wp_get_attachment_link($id = 0, $size = 'thumbnail', $permalink = false, $icon = false) {
+function wp_get_attachment_link($id = 0, $size = 'thumbnail', $permalink = false, $icon = false, $text = false) {
$id = intval($id);
$_post = & get_post( $id );
if ( $permalink )
$url = get_attachment_link($_post->ID);
- $post_title = attribute_escape($_post->post_title);
+ $post_title = esc_attr($_post->post_title);
+
+ if ( $text ) {
+ $link_text = esc_attr($text);
+ } elseif ( ( is_int($size) && $size != 0 ) or ( is_string($size) && $size != 'none' ) or $size != false ) {
+ $link_text = wp_get_attachment_image($id, $size, $icon);
+ }
- $link_text = wp_get_attachment_image($id, $size, $icon);
- if ( !$link_text )
+ if( trim($link_text) == '' )
$link_text = $_post->post_title;
- return apply_filters( 'wp_get_attachment_link', "<a href='$url' title='$post_title'>$link_text</a>", $id, $size, $permalink, $icon );
+ return apply_filters( 'wp_get_attachment_link', "<a href='$url' title='$post_title'>$link_text</a>", $id, $size, $permalink, $icon, $text );
}
/**
if ( $permalink )
$url = get_attachment_link($_post->ID);
- $post_title = attribute_escape($_post->post_title);
+ $post_title = esc_attr($_post->post_title);
$innerHTML = get_attachment_innerHTML($_post->ID, $fullsize, $max_dims);
return "<a href='$url' title='$post_title'>$innerHTML</a>";
$constraint = '';
}
- $post_title = attribute_escape($post->post_title);
+ $post_title = esc_attr($post->post_title);
$icon = "<img src='$src' title='$post_title' alt='$post_title' $constraint/>";
return $innerHTML;
- $innerHTML = attribute_escape($post->post_title);
+ $innerHTML = esc_attr($post->post_title);
return apply_filters('attachment_innerHTML', $innerHTML, $post->ID);
}
$label = 'pwbox-'.(empty($post->ID) ? rand() : $post->ID);
$output = '<form action="' . get_option('siteurl') . '/wp-pass.php" method="post">
<p>' . __("This post is password protected. To view it please enter your password below:") . '</p>
- <p><label for="' . $label . '">' . __("Password:") . ' <input name="post_password" id="' . $label . '" type="password" size="20" /></label> <input type="submit" name="Submit" value="' . __("Submit") . '" /></p>
+ <p><label for="' . $label . '">' . __("Password:") . ' <input name="post_password" id="' . $label . '" type="password" size="20" /></label> <input type="submit" name="Submit" value="' . esc_attr__("Submit") . '" /></p>
</form>
';
return apply_filters('the_password_form', $output);
if ( !in_array( $revision->post_type, array( 'post', 'page', 'revision' ) ) )
return false;
- $datef = _c( 'j F, Y @ G:i|revision date format');
- $autosavef = __( '%s [Autosave]' );
- $currentf = __( '%s [Current Revision]' );
+ /* translators: revision date format, see http://php.net/date */
+ $datef = _x( 'j F, Y @ G:i', 'revision date format');
+ /* translators: 1: date */
+ $autosavef = __( '%1$s [Autosave]' );
+ /* translators: 1: date */
+ $currentf = __( '%1$s [Current Revision]' );
- $date = date_i18n( $datef, strtotime( $revision->post_modified ) );
+ $date = date_i18n( $datef, strtotime( $revision->post_modified_gmt . ' +0000' ) );
if ( $link && current_user_can( 'edit_post', $revision->ID ) && $link = get_edit_post_link( $revision->ID ) )
$date = "<a href='$link'>$date</a>";
* @uses wp_get_post_revisions()
* @uses wp_post_revision_title()
* @uses get_edit_post_link()
- * @uses get_author_name()
+ * @uses get_the_author_meta()
*
* @todo split into two functions (list, form-table) ?
*
break;
}
- $titlef = _c( '%1$s by %2$s|post revision 1:datetime, 2:name' );
+ /* translators: post revision: 1: when, 2: author name */
+ $titlef = _x( '%1$s by %2$s', 'post revision' );
if ( $parent )
array_unshift( $revisions, $post );
continue;
$date = wp_post_revision_title( $revision );
- $name = get_author_name( $revision->post_author );
+ $name = get_the_author_meta( 'display_name', $revision->post_author );
if ( 'form-table' == $format ) {
if ( $left )
<div class="tablenav">
<div class="alignleft">
- <input type="submit" class="button-secondary" value="<?php _e( 'Compare Revisions' ); ?>" />
+ <input type="submit" class="button-secondary" value="<?php esc_attr_e( 'Compare Revisions' ); ?>" />
<input type="hidden" name="action" value="diff" />
</div>
</div>