私のカスタム分類フィルタは、これらの方法で3.3.1管理ではもはや機能しないことに気付きました: カスタム投稿タイプの管理リストに分類フィルタを追加する?
分類法をフィルタリングするには、クエリ文字列に&taxonomy=whatever
と&term=something
の両方を渡す必要があることもわかりました。これについて何か経験があり、解決策はありますか?
例として、質問からのいくつかのコードがあります。
add_action('restrict_manage_posts','restrict_listings_by_business');
function restrict_listings_by_business() {
global $typenow;
global $wp_query;
if ($typenow=='listing') {
$taxonomy = 'business';
$business_taxonomy = get_taxonomy($taxonomy);
wp_dropdown_categories(array(
'show_option_all' => __("Show All {$business_taxonomy->label}"),
'taxonomy' => $taxonomy,
'name' => 'business',
'orderby' => 'name',
'selected' => $wp_query->query['term'],
'hierarchical' => true,
'depth' => 3,
'show_count' => true, // Show # listings in parens
'hide_empty' => true, // Don't show businesses w/o listings
));
}
}
そして
add_filter('parse_query','convert_business_id_to_taxonomy_term_in_query');
function convert_business_id_to_taxonomy_term_in_query($query) {
global $pagenow;
$qv = &$query->query_vars;
if ($pagenow=='edit.php' &&
isset($qv['taxonomy']) && $qv['taxonomy']=='business' &&
isset($qv['term']) && is_numeric($qv['term'])) {
$term = get_term_by('id',$qv['term'],'business');
$qv['term'] = $term->slug;
}
}
あなたのコードにはいくつか問題があります...
term
ではなく、business
(この場合)がドロップダウンメニューに指定した名前になります。 term
のすべてのインスタンスをbusiness
に置き換えますparse_query
関数からこのチェックを外してください。以下は私にとってはうまくいきました(ただし 'listing'を 'post'に変更した場合を除く)。
add_action('restrict_manage_posts','restrict_listings_by_business');
function restrict_listings_by_business() {
global $typenow;
global $wp_query;
if ($typenow=='post') {
$taxonomy = 'business';
$term = isset($wp_query->query['business']) ? $wp_query->query['business'] :'';
$business_taxonomy = get_taxonomy($taxonomy);
wp_dropdown_categories(array(
'show_option_all' => __("Show All"),
'taxonomy' => $taxonomy,
'name' => 'business',
'orderby' => 'name',
'selected' => $term,
'hierarchical' => true,
'depth' => 3,
'show_count' => true, // Show # listings in parens
'hide_empty' => true, // Don't show businesses w/o listings
));
}
}
add_filter('parse_query','convert_business_id_to_taxonomy_term_in_query');
function convert_business_id_to_taxonomy_term_in_query($query) {
global $pagenow;
$qv =& $query->query_vars;
if ($pagenow=='edit.php' && isset($qv['business']) && is_numeric($qv['business'])) {
$term = get_term_by('id',$qv['business'],'business');
$qv['business'] = ($term ? $term->slug : '');
}
}