| | 1802 | * Return the class for a post format content wrapper |
| | 1803 | * |
| | 1804 | * @since 3.6.0 |
| | 1805 | * |
| | 1806 | * @param string $format |
| | 1807 | */ |
| | 1808 | function get_post_format_content_class( $format ) { |
| | 1809 | return apply_filters( 'post_format_content_class', 'post-format-content', $format ); |
| | 1810 | } |
| | 1811 | |
| | 1812 | /** |
| | 1813 | * Ouput the class for a post format content wrapper |
| | 1814 | * |
| | 1815 | * @since 3.6.0 |
| | 1816 | * |
| | 1817 | * @param string $format |
| | 1818 | */ |
| | 1819 | function post_format_content_class( $format ) { |
| | 1820 | echo get_post_format_content_class( $format ); |
| | 1821 | } |
| | 1822 | |
| | 1823 | /** |
| | 1824 | * Provide fallback behavior for Posts that have associated post format |
| | 1825 | * |
| | 1826 | * @since 3.6.0 |
| | 1827 | * |
| | 1828 | * @param string $content |
| | 1829 | */ |
| | 1830 | function post_formats_compat( $content, $id = 0 ) { |
| | 1831 | $post = empty( $id ) ? get_post() : get_post( $id ); |
| | 1832 | if ( empty( $post ) ) |
| | 1833 | return $content; |
| | 1834 | |
| | 1835 | $format = get_post_format( $post ); |
| | 1836 | if ( empty( $format ) || in_array( $format, array( 'status', 'aside', 'chat' ) ) ) |
| | 1837 | return $content; |
| | 1838 | |
| | 1839 | if ( current_theme_supports( 'post-formats', $format ) ) |
| | 1840 | return $content; |
| | 1841 | |
| | 1842 | $defaults = array( |
| | 1843 | 'position' => 'after', |
| | 1844 | 'tag' => 'div', |
| | 1845 | 'class' => get_post_format_content_class( $format ), |
| | 1846 | 'link_class' => '', |
| | 1847 | 'image_class' => '', |
| | 1848 | 'gallery' => '[gallery]', |
| | 1849 | 'audio' => '', |
| | 1850 | 'video' => '' |
| | 1851 | ); |
| | 1852 | |
| | 1853 | $args = apply_filters( 'post_format_compat', array() ); |
| | 1854 | $compat = wp_parse_args( $args, $defaults ); |
| | 1855 | |
| | 1856 | $show_content = true; |
| | 1857 | $format_output = ''; |
| | 1858 | $meta = get_post_format_meta( $post->ID ); |
| | 1859 | |
| | 1860 | switch ( $format ) { |
| | 1861 | case 'link': |
| | 1862 | $compat['tag'] = ''; |
| | 1863 | |
| | 1864 | if ( ! empty( $meta['url'] ) ) { |
| | 1865 | $esc_url = preg_quote( $meta['url'], '#' ); |
| | 1866 | // Make sure the same URL isn't in the post (modified/extended versions allowed) |
| | 1867 | if ( ! preg_match( '#' . $esc_url . '[^/&\?]#', $content ) ) { |
| | 1868 | $format_output .= sprintf( |
| | 1869 | '<a %shref="%s">%s</a>', |
| | 1870 | empty( $compat['link_class'] ) ? '' : sprintf( 'class="%s" ', $compat['link_class'] ), |
| | 1871 | esc_url( $meta['url'] ), |
| | 1872 | empty( $post->post_title ) ? esc_url( $meta['url'] ) : apply_filters( 'the_title', $post->post_title ) |
| | 1873 | ); |
| | 1874 | } |
| | 1875 | } |
| | 1876 | break; |
| | 1877 | |
| | 1878 | case 'quote': |
| | 1879 | if ( ! empty( $meta['quote'] ) && ! stristr( $content, $meta['quote'] ) ) { |
| | 1880 | $format_output .= sprintf( '<blockquote>%s</blockquote>', $meta['quote'] ); |
| | 1881 | if ( ! empty( $meta['quote_source'] ) ) { |
| | 1882 | $format_output .= sprintf( |
| | 1883 | '<cite>%s</cite>', |
| | 1884 | ! empty( $meta['url'] ) ? |
| | 1885 | sprintf( '<a href="%s">%s</a>', esc_url( $meta['url'] ), $meta['quote_source'] ) : |
| | 1886 | $meta['quote_source'] |
| | 1887 | ); |
| | 1888 | } |
| | 1889 | } |
| | 1890 | break; |
| | 1891 | |
| | 1892 | case 'image': |
| | 1893 | if ( ! empty( $meta['image'] ) ) { |
| | 1894 | $image = is_numeric( $meta['image'] ) ? wp_get_attachment_url( $meta['image'] ) : $meta['image']; |
| | 1895 | |
| | 1896 | if ( ! empty( $image ) && ! stristr( $content, $image ) ) { |
| | 1897 | $image_html = sprintf( |
| | 1898 | '<img %ssrc="%s" alt="" />', |
| | 1899 | empty( $compat['image_class'] ) ? '' : sprintf( 'class="%s" ', $compat['image_class'] ), |
| | 1900 | $image |
| | 1901 | ); |
| | 1902 | if ( empty( $meta['url'] ) ) { |
| | 1903 | $format_output .= $image_html; |
| | 1904 | } else { |
| | 1905 | $format_output .= sprintf( |
| | 1906 | '<a href="%s">%s</a>', |
| | 1907 | esc_url( $meta['url'] ), |
| | 1908 | $image_html |
| | 1909 | ); |
| | 1910 | } |
| | 1911 | } |
| | 1912 | } |
| | 1913 | break; |
| | 1914 | |
| | 1915 | case 'gallery': |
| | 1916 | preg_match_all( '/' . get_shortcode_regex() . '/s', $content, $matches ); |
| | 1917 | if ( ! empty( $matches ) && isset( $matches[2] ) ) { |
| | 1918 | foreach ( (array) $matches[2] as $match ) { |
| | 1919 | if ( 'gallery' === $match ) |
| | 1920 | break 2; // foreach + case |
| | 1921 | } |
| | 1922 | } |
| | 1923 | |
| | 1924 | if ( empty( $meta['gallery'] ) && ! empty( $compat['gallery'] ) ) { |
| | 1925 | $format_output .= $compat['gallery']; |
| | 1926 | } elseif ( ! empty( $meta['gallery'] ) ) { |
| | 1927 | $format_output .= $meta['gallery']; |
| | 1928 | } |
| | 1929 | break; |
| | 1930 | |
| | 1931 | case 'video': |
| | 1932 | case 'audio': |
| | 1933 | $shortcode_regex = '/' . get_shortcode_regex() . '/s'; |
| | 1934 | $matches = preg_match( $shortcode_regex, $content ); |
| | 1935 | if ( ! $matches || $format !== $matches[2] ) { |
| | 1936 | if ( empty( $meta['media'] ) && ! empty( $compat[$format] ) ) { |
| | 1937 | $format_output .= $compat[$format]; |
| | 1938 | } elseif ( ! empty( $meta['media'] ) ) { |
| | 1939 | // the metadata is a shortcode or an embed code |
| | 1940 | if ( preg_match( $shortcode_regex, $meta['media'] ) || preg_match( '#<[^>]+>#', $meta['media'] ) ) { |
| | 1941 | $format_output .= $meta['media']; |
| | 1942 | } elseif ( ! stristr( $content, $meta['media'] ) ) { |
| | 1943 | // attempt to embed the URL |
| | 1944 | $format_output .= sprintf( '[embed]%s[/embed]', $meta['media'] ); |
| | 1945 | } |
| | 1946 | } |
| | 1947 | } |
| | 1948 | break; |
| | 1949 | default: |
| | 1950 | return $content; |
| | 1951 | break; |
| | 1952 | } |
| | 1953 | |
| | 1954 | if ( empty( $format_output ) ) |
| | 1955 | return $content; |
| | 1956 | |
| | 1957 | $output = ''; |
| | 1958 | |
| | 1959 | if ( ! empty( $content ) && $show_content && 'before' !== $compat['position'] ) |
| | 1960 | $output .= $content . PHP_EOL . PHP_EOL; |
| | 1961 | |
| | 1962 | if ( ! empty( $compat['tag'] ) ) |
| | 1963 | $output .= sprintf( '<%s class="%s">', $compat['tag'], $compat['class'] ); |
| | 1964 | |
| | 1965 | $output .= $format_output; |
| | 1966 | |
| | 1967 | if ( ! empty( $compat['tag'] ) ) |
| | 1968 | $output .= sprintf( '</%s>', $compat['tag'] ); |
| | 1969 | |
| | 1970 | if ( ! empty( $content ) && $show_content && 'before' === $compat['position'] ) |
| | 1971 | $output .= PHP_EOL . PHP_EOL . $content; |
| | 1972 | |
| | 1973 | return $output; |
| | 1974 | } |
| | 1975 | |
| | 1976 | /** |