現在、以下に示すように、現在表示されている投稿タイプに関連カテゴリを出力しています。私はwp_list_categories
を使ってカテゴリをリストアップしていますが、それはうまく機能します。唯一の問題は、これがarchive.phpに表示され、単一の投稿ではないということです。そのため、リストに表示されている分類法は、主要分類法アーカイブにリンクしています。
現在の投稿タイプの分類法アーカイブ($type
)にリンクし、その特定の分類法を表示するためのクエリを含めます。 http://example.com?post_type=foo&custom_tax=bar
へのリンクと同様
<? $type = get_post_type(); ?>
<?php
$customPostTaxonomies = get_object_taxonomies($type);
if(count($customPostTaxonomies) > 0)
{
echo '<h3>Browse By:</h3>';
foreach($customPostTaxonomies as $tax)
{
$args = array(
'orderby' => 'name',
'show_count' => 0,
'pad_counts' => 0,
'hierarchical' => 1,
'taxonomy' => $tax,
'title_li' => ''
);
$woah = get_taxonomy($tax);
echo '<ul>';
//var_dump($tax);
//var_dump($woah);
//print_r($woah);
echo '<h4>'.$woah->labels->name.'</h4>';
echo wp_list_categories( $args );
echo '</ul>';
}
}
?>`
wp_list_categories
はget_term_link
を使用して用語リンクを検索します。
この関数には、返されるものを変更するために使用できるフィルタがあります。問題は、現在の投稿タイプをフィルタにフックする関数に渡す必要があることですが、グローバル変数はスコープに対して機能するはずです。
もちろん、すべてのwp_list_categories
呼び出しの後にfilterを削除する必要があります。これは、get_term_link
のnexクラスを妨害しないためです。
だから、あなたのfunctions.php
に置く:
function convert_term_link_to_post_type( $termlink, $term, $taxonomy ) {
global $the_current_type;
if ( empty($the_current_type) ) return $termlink;
$link = get_post_type_archive_link( $the_current_type );
if ( $taxonomy == 'category') $taxonomy = "category_name";
if ( $link ) return add_query_arg( array($taxonomy => $term->slug), $link );
return $termlink;
}
その後、あなたが投稿したコードを以下のように変更します。
$type = get_post_type();
$customPostTaxonomies = get_object_taxonomies($type);
if( count($customPostTaxonomies) > 0) {
echo '<h3>Browse By:</h3>';
// set the global variable
global $the_current_type;
$the_current_type = $type;
// add the filter that convert the term link
add_filter('term_link', 'convert_term_link_to_post_type', 20, 3);
foreach($customPostTaxonomies as $tax) {
$woah = get_taxonomy($tax);
$args = array(
'orderby' => 'name',
'show_count' => 0,
'pad_counts' => 0,
'hierarchical' => 1,
'taxonomy' => $tax,
'title_li' => ''
);
echo '<ul>';
echo '<h4>' . $woah->labels->name . '</h4>';
echo wp_list_categories( $args );
echo '</ul>';
}
// unset the global variable
unset($the_current_type);
// remove the filter to not alter any other 'get_term_link' calls
remove_filter('term_link', 'convert_term_link_to_post_type', 20, 3);
}