画像が添付されている投稿の数を数えるのは簡単ではありません - WordPressは単にそれを追跡しません。添付ファイルが最初にアップロードされた投稿を追跡するだけです(必ずしも使用する必要はありません)。
できるだけ早く始めるために、これがプラグインコードです。
<?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']} × {$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としてダウンロードすることができます。
セカンドパス 。既知の問題点:
これが関数です:
/**
* 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 )
. "\"%"
);
2番目の追加としてMySQLのREGEXP
/RLIKE
機能を利用する例として、それはさらにa
タグでリンクされた画像を取得するだけでなく、これは可能です画像サイズから独立した画像を取得する - 例えば、「the-image.jpg」はフルサイズになり、「the-image-150x150.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 );