[WordPress]メディアにタクソノミーをつけてフィルタをかける

2016年7月20日

WordPressでサイトを作って記事を追加していくと、メディアファイルがいっぱいになって管理しづらいことがあると思う

そういうときに便利なプラグインがあって、メディア(post_type=attachment)にタクソノミーをひもづけることができる
https://wordpress.org/plugins/media-taxonomies/
※似たようなプラグインがほかにも落ちているが、残念ながら一部機能が有料

タクソノミーでフィルタもできるので非常に便利

ただこのプラグイン、ちょっと最新版(ver 4.5.3 2016-07-20時点)で一部不具合があるので、それを回避するソースを作った。

プラグインはライセンス云々があるし、更新できなくなるから、本体をいじらずfunctions.phpに記載

//メディアタクソノミープラグインの調整
function media_taxonomies_pre_get_posts( $query ) {
	if ( !isset( $query->query_vars['post_type'] ) || 'attachment' != $query->query_vars['post_type'] )
		return;

	$taxonomies = apply_filters( 'media-taxonomies', get_object_taxonomies( 'attachment', 'objects' ) );

	if ( !$taxonomies )
		return;

	
	$media_category = @$query->query_vars['media-category'];
	if( $media_category == 'all' )
		$query->set( 'media-category', null );
}
add_action( 'pre_get_posts', 'media_taxonomies_pre_get_posts', 15 );

function media_taxonomies_admin_head() {
	$taxonomies = apply_filters( 'media-taxonomies', get_object_taxonomies( 'attachment', 'objects' ) );

	if ( !$taxonomies )
		return;
	?>
<script type="text/javascript">
mediaTerms['media-category'][0]['slug'] = 'all';
</script>
<?php
	
}
add_action( 'admin_head', 'media_taxonomies_admin_head', 15 );