タグ名が日本語の場合にアーカイブタイトルなどが空欄になる問題の解決法
※ この問題は、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) ); }
以上です。