だから私は、分類法としてデフォルトのcategory
とpost_tag
を使った1つのCPTという、かなり単純な設定を得ました。
同じカテゴリに1つの投稿と1つのCPTエントリが割り当てられているとします。これはカテゴリウィジェット内にも反映される必要があります。
ウィジェットによって生成されたリンクが機能するように、request
フィルタを介してカテゴリページに両方を表示することができました。
問題は、投稿が存在しない場合、ウィジェットはそのカテゴリへのリンクを生成しないことです(それが空であると見なします)。
また、アイテム数が正しくありません。2ではなく1です。
wp_list_categories(apply_filters('widget_categories_args', $cat_args));
だから私はフィルタを介して引数を変更することができますがwp_list_categories()
はそれがどの投稿タイプを使うべきかについての引数を持っていません。
http://wordpress.org/support/topic/custom-post-types-and-category-widget - 運が悪い
http://themehybrid.com/support/topic/custom-post-types-and-category-widget - 同じ男、ジャスティンの返事を読むことができないが、私は運が悪くなるとは思わない。彼は終わりに切符を提出し、それは閉じられました
デフォルトのウィジェットコードをコピー/貼り付けして新しいものを作成しないで、どういうわけかフィルタを使用してこれを解決したいのですが。
それは言われて、カスタムウォーカーはこれを手伝うでしょうか?何か案は?
補足として、私はこれを使用してアーカイブウィジェットに関する同様の問題を解決しました:
/*
* Add CPTs to wp_get_archives()
* http://bajada.net/2010/07/15/adding-custom-post-types-to-wp_get_archives
*/
function ucc_getarchives_where_filter( $where , $r ) {
$args = array( 'public' => true , '_builtin' => false );
$output = 'names'; $operator = 'and';
$post_types = get_post_types( $args , $output , $operator );
$post_types = array_merge( $post_types , array( 'post' ) ); $post_types = "'" . implode( "' , '" , $post_types ) . "'";
return str_replace( "post_type = 'post'" , "post_type IN ( $post_types )" , $where );
}
add_filter( 'getarchives_where' , 'ucc_getarchives_where_filter' , 10 , 2 );
乾杯!
私は 'アクター' cptを持っていて、それは自動的にクエリに追加されるようです:
SELECT object_id, term_taxonomy_id
FROM wp_term_relationships INNER JOIN wp_posts ON object_id = ID
WHERE term_taxonomy_id IN (38,40,30,11,32,34,29,39,35,9,31,19,33,37,42,41,27,25,36,1,26)
AND post_type IN ('post', 'actor')
AND post_status = 'publish'
Call from: require, require_once, include, get_sidebar, get_template_part, locate_template, load_template, require, dynamic_sidebar, call_user_func_array, WP_Widget->display_callback, WP_Widget_Categories->widget, wp_list_categories, get_categories, get_terms, _pad_term_counts
( デバッグクエリ pluginを使う)
そしてこれがCPTの定義です。
register_post_type('actor', array(
'public' => true,
'labels' => $labels,
'has_archive' => 'actors',
'taxonomies' => array( 'category' )
));