Intereting Posts
Почему the_content не работает, как другие, для заданного идентификатора сообщения? Получите версии стилей и файлов сценариев и используйте их при написании файла манифеста кэша Параметры URL, вызывающие 404 на главной странице, но нигде больше WP фильтр для изменения стилей администрирования CSS? Как исправить прозрачность в слайдерах продуктов / предлагаемых продуктах на главной странице? Добавить случайную строку в постоянную ссылку Проблема входа в WordPress wp-admin Программный набор файлов cookie для нескольких доменов Дополнительный пункт меню, отображаемый в подменю Получение плагина Невозможно изменить ошибки информации заголовка включить SFTP через SSH-ключи в wordpress Как использовать две одинаковые таксономии в одной и той же должности по-разному? POST для API REST из формы WordPress Родительская ссылка должна перейти в первое дочернее подменю Как определить, существует ли категория по идентификатору?

Получить все сообщения (любого типа сообщений), вложение которых используется в

Нелегко подсчитать количество сообщений, к которым прикреплено изображение – WordPress просто не отслеживает это. Он просто отслеживает сообщение, в которое первоначально было загружено приложение (не обязательно даже используя его там).

введите описание изображения здесь

Plugin

Чтобы вы начали как можно быстрее, вот код плагина:

<?php /** * Plugin Name: Media Count * Description: Adds a column to the media admin list table to show the count of posts */ add_filter( 'manage_media_columns', function( $cols, $detached ) { $cols['count'] = 'Count'; $cols['size'] = 'Size'; return $cols; }, 10, 2 ); add_action( 'manage_media_custom_column', function( $col, $id ) { switch ( $col ) { case 'size' : $meta = wp_get_attachment_metadata( $id ); // Image isset( $meta['width'] ) AND print "{$meta['width']} &times; {$meta['height']}"; // Audio isset( $meta['bitrate'] ) AND print "{$meta['length_formatted']} min"; break; case 'count' : $att = get_post_custom( $id ); $file = $att['_wp_attached_file'][0]; // Do not take full path as different image sizes could // have different month, year folders due to theme and image size changes $file = pathinfo( $file, PATHINFO_FILENAME ); // @TODO Fill in the blanks break; } }, 10, 2 ); 

Вопрос:

Как подсчитать количество сообщений, в которых используется вложение, – наиболее эффективный способ.

Заключительный плагин

Полный плагин можно скачать здесь как Gist .

Solutions Collecting From Web of "Получить все сообщения (любого типа сообщений), вложение которых используется в"

Второй проход . Известные вопросы:

  • Требуется кеширование (и кеш нужно при необходимости очищать)
  • Типы сообщений жестко закодированы
  • Какие статусы сообщений нам интересны?

Вот функция:

 /** * Given an attachment ID, searches for any post with that attachment used * as a featured image, or if it is present in the content of the post. * (Note above known issues). */ function get_image_count( $id ){ global $wpdb; $att = get_post_custom( $id ); $file = $att['_wp_attached_file'][0]; //Do not take full path as different image sizes could // have different month, year folders due to theme and image size changes $file = sprintf( "%s.%s", pathinfo( $file, PATHINFO_FILENAME ), pathinfo( $file, PATHINFO_EXTENSION ) ); $sql = "SELECT {$wpdb->posts}.ID FROM {$wpdb->posts} INNER JOIN {$wpdb->postmeta} ON ({$wpdb->posts}.ID = {$wpdb->postmeta}.post_id) WHERE {$wpdb->posts}.post_type IN ('post', 'page', 'event') AND (({$wpdb->posts}.post_status = 'publish')) AND ( ({$wpdb->postmeta}.meta_key = '_thumbnail_id' AND CAST({$wpdb->postmeta}.meta_value AS CHAR) = '%d') OR ( {$wpdb->posts}.post_content LIKE %s ) ) GROUP BY {$wpdb->posts}.ID"; $prepared_sql = $wpdb->prepare( $sql, $id, "%src=\"%".$wpdb->esc_like( $file )."\"%" ); $post_ids = $wpdb->get_results( $prepared_sql ); $count = count( $post_ids ); return $count; } 

Как дополнение, как улучшение для учета разных размеров изображения, я бы сделал:

 $file_name = pathinfo( $file, PATHINFO_FILENAME ); $file_extension = '.' . pathinfo( $file, PATHINFO_EXTENSION ); 

Вместо этого имеет комбинированное значение для $file .

И измените подготовку SQL на:

 $prepared_sql = $wpdb->prepare( $sql, $id, "%src=\"%" . like_escape( $file_name ) . "%" . like_escape( $file_extension ) . "\"%" ); 


В качестве второго примера, который использует функциональность REGEXP / RLIKE MySQL, он также получает образы, только связанные в теге, кроме того, это способно – вопреки первому добавлению, которое получает только полный, загруженный размер – получение изображения независимо от размера изображения – где, например, «the-image.jpg« будет в полном размере »и« the-image-150×150.jpg «сгенерированный размер – используется:

 $file_name = pathinfo( $file, PATHINFO_FILENAME ); // beware different syntax $file_extension = '[[...]]'.pathinfo( $file, PATHINFO_EXTENSION ); $sql = "SELECT {$wpdb->posts}.ID FROM {$wpdb->posts} INNER JOIN {$wpdb->postmeta} ON ({$wpdb->posts}.ID = {$wpdb->postmeta}.post_id) WHERE {$wpdb->posts}.post_type IN ('post', 'page', 'event') AND (({$wpdb->posts}.post_status = 'publish')) AND ( ({$wpdb->postmeta}.meta_key = '_thumbnail_id' AND CAST({$wpdb->postmeta}.meta_value AS CHAR) = '%d') OR ( {$wpdb->posts}.post_content REGEXP %s ) ) GROUP BY {$wpdb->posts}.ID"; $exp = '([[.<.]])' // tag start . '(img|a)' // define tag types . '.*' // other attributes void . '(src|href)' // define anchor(s) attribute . '=([[.".]]|[[.\'.]])' // quotes . '.*' // path/URL void . $file_name . '.*' // image size void . $file_extension . '([[.".]]|[[.\'.]])' // quotes . '.*' // other attributes void . '([[.>.]])' // tag end ; $prepared_sql = $wpdb->prepare( $sql, $id, $exp ); $post_ids = $wpdb->get_results( $prepared_sql );