diff --git wp-includes/default-filters.php wp-includes/default-filters.php index 7d47e45..7c56bdb 100644 --- wp-includes/default-filters.php +++ wp-includes/default-filters.php @@ -132,12 +132,13 @@ add_filter( 'the_title', 'wptexturize' ); add_filter( 'the_title', 'convert_chars' ); add_filter( 'the_title', 'trim' ); -add_filter( 'the_content', 'wptexturize' ); -add_filter( 'the_content', 'convert_smilies' ); -add_filter( 'the_content', 'convert_chars' ); -add_filter( 'the_content', 'wpautop' ); -add_filter( 'the_content', 'shortcode_unautop' ); -add_filter( 'the_content', 'prepend_attachment' ); +add_filter( 'the_content', 'wptexturize' ); +add_filter( 'the_content', 'convert_smilies' ); +add_filter( 'the_content', 'convert_chars' ); +add_filter( 'the_content', 'post_formats_compat' ); +add_filter( 'the_content', 'wpautop' ); +add_filter( 'the_content', 'shortcode_unautop' ); +add_filter( 'the_content', 'prepend_attachment' ); add_filter( 'the_excerpt', 'wptexturize' ); add_filter( 'the_excerpt', 'convert_smilies' ); diff --git wp-includes/formatting.php wp-includes/formatting.php index 83f5269..6f8f705 100644 --- wp-includes/formatting.php +++ wp-includes/formatting.php @@ -1802,6 +1802,198 @@ function convert_smilies($text) { } /** + * Return the class for a post format content wrapper + * + * @since 3.6 + * + * @param string $format + */ +function get_post_format_content_class( $format ) { + return apply_filters( 'post_format_content_class', $format . '-post-format-content', $format ); +} + +/** + * Ouput the class for a post format content wrapper + * + * @since 3.6 + * + * @param string $format + */ +function post_format_content_class( $format ) { + echo get_post_format_content_class( $format ); +} + +/** + * Provide fallback behavior for Posts that have associated post format + * + * @since 3.6 + * + * @param string $content + */ +function post_formats_compat( $content, $id = 0 ) { + $post = empty( $id ) ? get_post() : get_post( $id ); + if ( empty( $post ) ) + return $content; + + $formats = get_the_terms( $post, 'post_format' ); + if ( empty( $formats ) ) + return $content; + + $format = str_replace( 'post-format-', '', reset( $formats )->slug ); + + if ( current_theme_supports( 'post-formats', $format ) ) + return $content; + + $defaults = array( + 'position' => 'after', + 'tag' => 'div', + 'class' => get_post_format_content_class( $format ), + 'chat_tag' => 'span', + 'chat_tag_class' => 'chat-line', + 'chat_delimiter' => PHP_EOL, + 'link_class' => '', + 'image_class' => '', + 'gallery' => '[gallery]', + 'audio' => '[audio]', + 'video' => '[video]' + ); + + $args = apply_filters( 'post_format_compat', array() ); + $compat = wp_parse_args( $args, $defaults ); + + $show_content = true; + $format_output = ''; + + switch ( $format ) { + case 'chat': + $show_content = false; + $lines = explode( $compat['chat_delimiter'], $content ); + foreach ( $lines as $line ) + $format_output .= sprintf( '<%1$s class="%2$s">%3$s%1$s>', $compat['chat_tag'], $compat['chat_tag_class'], $line ); + break; + + case 'link': + $compat['tag'] = ''; + + $url = get_post_meta( $post->ID, '_wp_format_url', true ); + if ( ! empty( $url ) ) { + $format_output .= sprintf( + '%s', + empty( $compat['link_class'] ) ? '' : sprintf( 'class="%s" ', $compat['link_class'] ), + esc_url( $url ), + empty( $post->post_title ) ? esc_url( $url ) : apply_filters( 'the_title', $post->post_title ) + ); + } + break; + + case 'quote': + $quote = get_post_meta( $post->ID, '_wp_format_quote', true ); + $source = get_post_meta( $post->ID, '_wp_format_quote_source', true ); + $url = get_post_meta( $post->ID, '_wp_format_url', true ); + + if ( ! empty( $quote ) ) { + $format_output .= sprintf( '
%s', $quote ); + if ( ! empty( $source ) ) { + $format_output .= sprintf( + '%s', + ! empty( $url ) ? sprintf( '%1$s', esc_url( $url ) ) : $source + ); + } + } + break; + + case 'image': + $image = get_post_meta( $post->ID, '_wp_format_image', true ); + $url = get_post_meta( $post->ID, '_wp_format_url', true ); + + if ( is_numeric( $image ) ) + $image = wp_get_attachment_url( $image ); + + $esc_image_url = preg_quote( $image, '#' ); + if ( ! empty( $image ) && ! preg_match( "#src=['\"]{$esc_image_url}#", $content ) ) { + $image_html = sprintf( + '', + empty( $compat['image_class'] ) ? '' : sprintf( 'class="%s" ', $compat['image_class'] ), + $image + ); + if ( empty( $url ) ) { + $format_output .= $image_html; + } else { + $format_output .= sprintf( + '%s', + esc_url( $url ), + $image_html + ); + } + } + break; + + case 'gallery': + $matches = preg_match( '/' . get_shortcode_regex() . '/s', $content ); + if ( ! $matches || 'gallery' !== $matches[2] ) { + $gallery = get_post_meta( $post->ID, '_wp_format_gallery', true ); + if ( empty( $gallery ) && ! empty( $compat['gallery'] ) ) { + $format_output .= $compat['gallery']; + } elseif ( ! empty( $gallery ) ) { + $format_output .= $gallery; + } + } + break; + + case 'video': + case 'audio': + $shortcode_regex = '/' . get_shortcode_regex() . '/s'; + $matches = preg_match( $shortcode_regex, $content ); + if ( ! $matches || $format !== $matches[2] ) { + $media = get_post_meta( $post->ID, '_wp_format_media', true ); + if ( empty( $media ) && ! empty( $compat[$format] ) ) { + $format_output .= $compat[$format]; + } elseif ( ! empty( $media ) ) { + // the metadata is a shortcode or an embed code + if ( preg_match( $shortcode_regex, $media ) || preg_match( '#<[^>]+>#', $media ) ) { + $format_output .= $media; + } else { + $mime_type = wp_check_filetype( $media ); + // URL that can be shortcode'd + if ( ! empty( $mime_type['type'] ) + && ( ( 'video' === $format && 'video/mp4' === $mime_type['type'] ) + || ( 'audio' === $format && 'audio/mpeg' === $mime_type['type'] ) ) ) { + $format_output .= sprintf( '[%s src="%s"]', $format, esc_url( $media ) ); + // URL that isn't embeddable outputs string + } else { + $format_output .= $media; + } + } + } + } + break; + case 'standard': + case 'status': + case 'aside': + default: + return $content; + break; + } + + $output = ''; + if ( ! empty( $compat['tag'] ) ) + $output .= sprintf( '<%s class="%s">', $compat['tag'], $compat['class'] ); + + if ( $show_content && 'before' !== $compat['position'] ) + $output .= $content . PHP_EOL . PHP_EOL; + + $output .= $format_output; + + if ( $show_content && 'before' === $compat['position'] ) + $output .= PHP_EOL . PHP_EOL . $content; + + if ( ! empty( $compat['tag'] ) ) + $output .= sprintf( '%s>', $compat['tag'] ); + + return $output; +} + +/** * Verifies that an email is valid. * * Does not grok i18n domains. Not RFC compliant.