タグ名が日本語の場合にアーカイブタイトルなどが空欄になる問題の解決法

※ この問題は、WordPress 2.6.1 で解消されています。

WordPress 2.6 で、タグ名に日本語を使い、かつ英語のタグスラッグを設定していない場合、アーカイブタイトルなどが空欄になってしまいます。
これを修正するハックを以前調べたので、記録しておきます。

/wp-includes/taxonomy.php を一部書き換えます。

書き換える箇所は、761〜778行目です。

function is_term($term, $taxonomy = '') {
	global $wpdb;

	if ( is_int($term) ) {
		if ( 0 == $term )
			return 0;
		$where = $wpdb->prepare( "t.term_id = %d", $term );
	} else {
		if ( '' === $term = sanitize_title($term) )
			return 0;
		$where = $wpdb->prepare( "t.slug = %s", $term );
	}

	if ( !empty($taxonomy) )
		return $wpdb->get_row( $wpdb->prepare("SELECT tt.term_id, tt.term_taxonomy_id FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy as tt ON tt.term_id = t.term_id WHERE $where AND tt.taxonomy = %s", $taxonomy), ARRAY_A);

	return $wpdb->get_var("SELECT term_id FROM $wpdb->terms as t WHERE $where");
}

これを以下の内容で置き換えます。

function is_term($term, $taxonomy = '') {
	global $wpdb;

	if ( is_int($term) ) {
		if ( 0 == $term )
			return 0;
		$where = 't.term_id = %d';
	} else {
		if ( '' === $term = sanitize_title($term) )
			return 0;
		$where = 't.slug = %s';
	}

	if ( !empty($taxonomy) )
		return $wpdb->get_row( $wpdb->prepare("SELECT tt.term_id, tt.term_taxonomy_id FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy as tt ON tt.term_id = t.term_id WHERE $where AND tt.taxonomy = %s", $term, $taxonomy), ARRAY_A);

	return $wpdb->get_var( $wpdb->prepare("SELECT term_id FROM $wpdb->terms as t WHERE $where", $term) );
}

以上です。