| 1825 | * Extract the srcs from the post's [{media type}] <source>s |
| 1826 | * |
| 1827 | * @since 3.6.0 |
| 1828 | * |
| 1829 | * @param string $content A string which might contain media data. |
| 1830 | * @param boolean $remove Whether to remove the found URL from the passed content. |
| 1831 | * @return array A list of lists. Each item has a list of sources corresponding |
| 1832 | * to a [{media type}]'s primary src and specified fallbacks |
| 1833 | */ |
| 1834 | function get_content_media( $type, &$content, $remove = false ) { |
| 1835 | $src = ''; |
| 1836 | $items = array(); |
| 1837 | $matches = array(); |
| 1838 | |
| 1839 | if ( preg_match_all( '/' . get_shortcode_regex() . '/s', $content, $matches, PREG_SET_ORDER ) && ! empty( $matches ) ) { |
| 1840 | foreach ( $matches as $shortcode ) { |
| 1841 | if ( $type === $shortcode[2] ) { |
| 1842 | $srcs = array(); |
| 1843 | $count = 1; |
| 1844 | if ( $remove ) |
| 1845 | $content = str_replace( $shortcode[0], '', $content, $count ); |
| 1846 | |
| 1847 | $item = do_shortcode_tag( $shortcode ); |
| 1848 | preg_match_all( '#src=[\'"](.+?)[\'"]#is', $item, $src, PREG_SET_ORDER ); |
| 1849 | if ( ! empty( $src ) ) { |
| 1850 | foreach ( $src as $s ) |
| 1851 | $srcs[] = $s[1]; |
| 1852 | |
| 1853 | $items[] = array_values( array_unique( $srcs ) ); |
| 1854 | } |
| 1855 | } |
| 1856 | } |
| 1857 | } |
| 1858 | return $items; |
| 1859 | } |
| 1860 | |
| 1861 | /** |
| 1862 | * Check the content blob for an <{media type}>, <object>, <embed>, or <iframe>, in that order |
| 1863 | * If no HTML tag is found, check the first line of the post for a URL |
| 1864 | * |
| 1865 | * @since 3.6.0 |
| 1866 | * |
| 1867 | * @param string $content A string which might contain media data. |
| 1868 | * @param boolean $remove Whether to remove the found URL from the passed content. |
| 1869 | * @return array A list of found HTML media embeds and possibly a URL by itself |
| 1870 | */ |
| 1871 | function get_embedded_media( $type, &$content, $remove = false ) { |
| 1872 | $html = array(); |
| 1873 | $matches = ''; |
| 1874 | |
| 1875 | foreach ( array( $type, 'object', 'embed', 'iframe' ) as $tag ) { |
| 1876 | if ( preg_match( '#' . get_tag_regex( $tag ) . '#', $content, $matches ) ) { |
| 1877 | $html[] = $matches[1]; |
| 1878 | if ( $remove ) |
| 1879 | $content = str_replace( $matches[0], '', $content ); |
| 1880 | |
| 1881 | return $html; |
| 1882 | } |
| 1883 | } |
| 1884 | |
| 1885 | $lines = explode( "\n", trim( $content ) ); |
| 1886 | $line = trim( array_shift( $lines ) ); |
| 1887 | |
| 1888 | if ( 0 === stripos( $line, 'http' ) ) { |
| 1889 | if ( $remove ) |
| 1890 | $content = join( "\n", $lines ); |
| 1891 | |
| 1892 | $html[] = $line; |
| 1893 | } |
| 1894 | return $html; |
| 1895 | } |
| 1896 | |
| 1897 | /** |
| 1898 | * Extract the srcs from the post's [audio] <source>s |
| 1899 | * |
| 1900 | * @since 3.6.0 |
| 1901 | * |
| 1902 | * @param string $content A string which might contain audio data. |
| 1903 | * @param boolean $remove Whether to remove the found URL from the passed content. |
| 1904 | * @return array A list of lists. Each item has a list of sources corresponding |
| 1905 | * to a [audio]'s primary src and specified fallbacks |
| 1906 | */ |
| 1907 | function get_content_audio( &$content, $remove = false ) { |
| 1908 | return get_content_media( 'audio', $content, $remove ); |
| 1909 | } |
| 1910 | |
| 1911 | /** |
| 1912 | * Check the content blob for an <audio>, <object>, <embed>, or <iframe>, in that order |
| 1913 | * If no HTML tag is found, check the first line of the post for a URL |
| 1914 | * |
| 1915 | * @since 3.6.0 |
| 1916 | * |
| 1917 | * @param string $content A string which might contain audio data. |
| 1918 | * @param boolean $remove Whether to remove the found URL from the passed content. |
| 1919 | * @return array A list of found HTML audio embeds and possibly a URL by itself |
| 1920 | */ |
| 1921 | function get_embedded_audio( &$content, $remove = false ) { |
| 1922 | return get_embedded_media( 'audio', $content, $remove ); |
| 1923 | } |
| 1924 | |
| 1925 | /** |
| 1926 | * Extract the srcs from the post's [video] <source>s |
| 1927 | * |
| 1928 | * @since 3.6.0 |
| 1929 | * |
| 1930 | * @param string $content A string which might contain video data. |
| 1931 | * @param boolean $remove Whether to remove the found URL from the passed content. |
| 1932 | * @return array A list of lists. Each item has a list of sources corresponding |
| 1933 | * to a [video]'s primary src and specified fallbacks |
| 1934 | */ |
| 1935 | function get_content_video( &$content, $remove = false ) { |
| 1936 | return get_content_media( 'video', $content, $remove ); |
| 1937 | } |
| 1938 | |
| 1939 | /** |
| 1940 | * Check the content blob for a <video>, <object>, <embed>, or <iframe>, in that order |
| 1941 | * If no HTML tag is found, check the first line of the post for a URL |
| 1942 | * |
| 1943 | * @since 3.6.0 |
| 1944 | * |
| 1945 | * @param string $content A string which might contain video data. |
| 1946 | * @param boolean $remove Whether to remove the found URL from the passed content. |
| 1947 | * @return array A list of found HTML video embeds and possibly a URL by itself |
| 1948 | */ |
| 1949 | function get_embedded_video( &$content, $remove = false ) { |
| 1950 | return get_embedded_media( 'video', $content, $remove ); |
| 1951 | } |
| 1952 | |
| 1953 | /** |