Intereting Posts

Подсчитайте общее количество изображений в сообщениях и эхо-результатах в виде числа

Я ищу функцию, которая будет подсчитывать и показывать .jpg URL-адреса или изображения в моем сообщении, а затем эхо-результаты (например, 12 изображений).

Я только нашел способ подсчитать прикрепленные изображения в сообщении. Я также нашел функцию xpath, но я не уверен, что она работает, потому что я не могу заставить ее повторить результаты.

Вот что я до сих пор:

function post_photo_count_xpath( $post_id ) { global $wpdb; $post_id_safe = intval( $post_id ); $html = $wpdb->get_row( "select * from {$wpdb->posts} where ID={$post_id_safe} limit 1" ); $doc = new DOMDocument(); @$doc->loadHTML( $html->post_content ); $path = new DOMXpath( $doc ); $images = $path->query( "//img" ); return( $images->length ); } 

Solutions Collecting From Web of "Подсчитайте общее количество изображений в сообщениях и эхо-результатах в виде числа"

Используйте регулярное выражение для поиска всех URL-адресов и фильтрации по типу.

 $post = get_post( 504 ); $content = $post->post_content; // match all urls preg_match_all( '/(http:|https:)?\/\/([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?/', $content, $matches ); $count = 0; if ( ! empty( $matches ) && ! empty( $matches[ 0 ] ) ) { foreach ( $matches[ 0 ] as $url ) { $split = explode( '#', $url ); $split = explode( '?', $split[ 0 ] ); $split = explode( '&', $split[ 0 ] ); $filename = basename( $split[ 0 ] ); $file_type = wp_check_filetype( $filename, wp_get_mime_types() ); if ( ! empty ( $file_type[ 'ext' ] ) ) { // (optional) limit inclusion based on file type if( ! in_array( $file_type[ 'ext' ], array('jpg', 'png')) ) continue; $files[ $url ] = $file_type; $urls[]=$url; $count ++; } } } // print out urls and total count print_r( array ( 'total' => $count, 'unique' => array_keys( $files ), 'urls' => $urls ) ); 

OOP

Если вы хотите, чтобы это как функция многократного использования …

 function get_file_urls( $content = '', $file_types = array ( 'jpg', 'png' ) ) { // match all urls preg_match_all( '/(http:|https:)?\/\/([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?/', $content, $matches ); $urls = array (); $files = array (); if ( ! empty( $matches ) && ! empty( $matches[ 0 ] ) ) { foreach ( $matches[ 0 ] as $url ) { $split = explode( '#', $url ); $split = explode( '?', $split[ 0 ] ); $split = explode( '&', $split[ 0 ] ); $filename = basename( $split[ 0 ] ); $file_type = wp_check_filetype( $filename, wp_get_mime_types() ); if ( ! empty ( $file_type[ 'ext' ] ) ) { // (optional) limit inclusion based on file type if ( ! in_array( $file_type[ 'ext' ], $file_types ) ) { continue; } $files[ $url ] = $file_type; $urls[] = $url; } } } // print out urls and total count return array ( 'total' => count( $urls ), 'urls' => $urls, 'total_unique' => count( $files ), 'unique' => array_keys( $files ), ); } $post = get_post( 504 ); $content = $post->post_content; $file_urls = get_file_urls( $content, array ( 'jpg' ) ); $count = $file_urls[ 'total' ]; echo "<div class='count'>${count}</div>"; 

для получения дополнительной информации посетите https://blog.josemcastaneda.com/2014/03/18/get-image-count-in-wordpress-post/

 // Get all the galleries in the current post $galleries = get_post_galleries( get_the_ID(), false ); // Count all the galleries $total_gal = count( $galleries ); /** * count all the images * @param array $array The array needed * @return int returns the number of images in the post */ function _get_total_images( $array ){ $key = 0; $src = 0; while ( $key < count( $array ) ){ $src += count( $array[$key]['src'] ); $key++; } return intval( $src ); } echo _get_total_images( $galleries ); 

Чтобы получить все URL-адреса изображений из содержимого HTML или строки / переменной PHP, и отфильтровать их по определенному расширению и включить только удаленные домены, используйте этот код:

 $data = 'alsdj<img src="http://localdomain.com/donotinclude.jpg">fklasjdf<img src="image.jpg">asdfasdf<img src="http://remotedomain.com/image.jpg">asdfasdfsf<img src="dont_include_me.png">asdfasfasdf'; $images = array(); // Domains to not include images from (for instances where the full URL is specified to image) $localhosts = array( 'localdomain.com' ); // Remove or add any extensions TO be included $allowed_extensions = array( 'jpg', 'jpeg' ); preg_match_all('/(img|src)\=(\"|\')[^\"\'\>]+/i', $data, $media); unset($data); $data=preg_replace('/(img|src)(\"|\'|\=\"|\=\')(.*)/i',"$3",$media[0]); foreach($data as $url) { $url_data = parse_url( $url ); $info = pathinfo($url); // Goto next, we're only looking for remote hosts if( ! array_key_exists( 'host', $url_data ) ) continue; // Check if this is an extension we want to include if( array_key_exists( 'extension', $info ) && in_array( $info['extension'], $allowed_extensions) ){ // Verify this isn't one of our local hosts (where the full URL is specified) if( ! in_array( $url_data['host'], $localhosts ) ){ array_push($images, $url); } } } echo 'Total Images: ' . count( $images ); // This is just linebreaks for display formatting print "\n\n"; echo 'Image Data:'; var_dump( $images ); с $data = 'alsdj<img src="http://localdomain.com/donotinclude.jpg">fklasjdf<img src="image.jpg">asdfasdf<img src="http://remotedomain.com/image.jpg">asdfasdfsf<img src="dont_include_me.png">asdfasfasdf'; $images = array(); // Domains to not include images from (for instances where the full URL is specified to image) $localhosts = array( 'localdomain.com' ); // Remove or add any extensions TO be included $allowed_extensions = array( 'jpg', 'jpeg' ); preg_match_all('/(img|src)\=(\"|\')[^\"\'\>]+/i', $data, $media); unset($data); $data=preg_replace('/(img|src)(\"|\'|\=\"|\=\')(.*)/i',"$3",$media[0]); foreach($data as $url) { $url_data = parse_url( $url ); $info = pathinfo($url); // Goto next, we're only looking for remote hosts if( ! array_key_exists( 'host', $url_data ) ) continue; // Check if this is an extension we want to include if( array_key_exists( 'extension', $info ) && in_array( $info['extension'], $allowed_extensions) ){ // Verify this isn't one of our local hosts (where the full URL is specified) if( ! in_array( $url_data['host'], $localhosts ) ){ array_push($images, $url); } } } echo 'Total Images: ' . count( $images ); // This is just linebreaks for display formatting print "\n\n"; echo 'Image Data:'; var_dump( $images ); 

Пример кода: https://glot.io/snippets/ekahzvu8sh

Результат вывода примера кода выше:

 Total Images: 1 Image Data:array(1) { [0]=> string(27) "http://remotedomain.com/image.jpg" } 

Убедитесь, что вы установили, что ваш домен находится в массиве $localhosts , таким образом, если по какой-либо причине указан полный URL-адрес, он не будет включать этот.

Используя приведенный выше примерный код, вот ваша обновленная функция для использования этого кода и возврата количества изображений:

 function post_photo_count_xpath( $post_id ) { $post = get_post( $post_id ); if( ! $post ) return 0; $data = $post->post_content; $images = array(); // Domains to not include images from (for instances where the full URL is specified to image) $localhosts = array( 'localdomain.com' ); // Remove or add any extensions TO be included $allowed_extensions = array( 'jpg', 'jpeg' ); preg_match_all('/(img|src)\=(\"|\')[^\"\'\>]+/i', $data, $media); unset($data); $data=preg_replace('/(img|src)(\"|\'|\=\"|\=\')(.*)/i',"$3",$media[0]); if( empty( $data ) ) return 0; foreach( $data as $url ){ $url_data = parse_url( $url ); $info = pathinfo($url); // Goto next, we're only looking for remote hosts if( ! array_key_exists( 'host', $url_data ) ) continue; // Check if this is an extension we want to include if( array_key_exists( 'extension', $info ) && in_array( $info['extension'], $allowed_extensions) ){ // Verify this isn't one of our local hosts (where the full URL is specified) if( ! in_array( $url_data['host'], $localhosts ) ){ array_push($images, $url); } } } return count( $images ); } с function post_photo_count_xpath( $post_id ) { $post = get_post( $post_id ); if( ! $post ) return 0; $data = $post->post_content; $images = array(); // Domains to not include images from (for instances where the full URL is specified to image) $localhosts = array( 'localdomain.com' ); // Remove or add any extensions TO be included $allowed_extensions = array( 'jpg', 'jpeg' ); preg_match_all('/(img|src)\=(\"|\')[^\"\'\>]+/i', $data, $media); unset($data); $data=preg_replace('/(img|src)(\"|\'|\=\"|\=\')(.*)/i',"$3",$media[0]); if( empty( $data ) ) return 0; foreach( $data as $url ){ $url_data = parse_url( $url ); $info = pathinfo($url); // Goto next, we're only looking for remote hosts if( ! array_key_exists( 'host', $url_data ) ) continue; // Check if this is an extension we want to include if( array_key_exists( 'extension', $info ) && in_array( $info['extension'], $allowed_extensions) ){ // Verify this isn't one of our local hosts (where the full URL is specified) if( ! in_array( $url_data['host'], $localhosts ) ){ array_push($images, $url); } } } return count( $images ); } 

Ресурс: https://davebrooks.wordpress.com/2009/04/22/php-preg_replace-some-useful-regular-expressions/