私はmfg_ppn
という名前のカスタム投稿タイプとmfg_pp
という名前のカスタム分類法を作成しました。それらについて疑問に思った場合はそれらを$this->cpt_promotion_news
および$this->cpt_promotion
として参照しています。
管理者にはすべてうまく表示されており、カスタム投稿に分類法を簡単に割り当てることができます。しかし、http://example.com/promotion/company
を使用して自分のサイトにアクセスしたときに、その特定の用語に関連する12の投稿があるにもかかわらず、投稿が表示されません。
投稿タイプを登録するためのPHPコードは次のとおりです。
// Register campaign news:
register_post_type($this->cpt_promotion_news, array(
'labels' => array(
'name' => __('Campaign Posts', $this->plugin_locale),
'singular_name' => __('Promotion Campaign', $this->plugin_locale),
'menu_name' => __('Promotion', $this->plugin_locale),
'all_items' => __('All Campaign Posts', $this->plugin_locale),
'add_new' => __('Add New Post', $this->plugin_locale),
'add_new_item' => __('Add New Campaign Post', $this->plugin_locale),
'edit_item' => __('Edit Post', $this->plugin_locale),
'new_item' => __('New Post', $this->plugin_locale),
'view_item' => __('View Post', $this->plugin_locale),
'search_items' => __('Search Posts', $this->plugin_locale),
'not_found' => __('No posts found', $this->plugin_locale),
'not_found_in_trash' => __('No posts found in trash', $this->plugin_locale),
'parent_item_colon' => __('Post parent:', $this->plugin_locale)
),
'description' => __('News for a partner promotion campaign.', $this->plugin_locale),
'public' => true,
'exclude_from_search' => true,
'show_in_nav_menus' => true,
'menu_position' => 25,
'show_in_menu' => true,
'map_meta_cap' => true,
'capabilities' => array( 'manage_options' ),
'capability_type' => 'post',
'hierarchical' => false,
'supports' => array( 'title', 'editor', 'thumbnail', 'comments' ),
'taxonomies' => array( $this->cpt_promotion ),
'has_archive' => true,
'rewrite' => array(
'slug' => __('promotion-post', $this->plugin_locale)
)
));
そして、分類法を登録するためのコードは次のとおりです。
// Register promotion campaigns:
register_taxonomy($this->cpt_promotion, $this->cpt_promotion_news, array(
'labels' => array(
'name' => __('Promotion Campaigns', $this->plugin_locale),
'singular_name' => __('Promotion Campaign', $this->plugin_locale),
'menu_name' => __('All Campaigns', $this->plugin_locale),
'all_items' => __('All Campaigns', $this->plugin_locale),
'edit_item' => __('Edit Campaign', $this->plugin_locale),
'view_item' => __('View Campaign', $this->plugin_locale),
'update_item' => __('Update Campaign', $this->plugin_locale),
'add_new_item' => __('Add New Promotion Campaign', $this->plugin_locale),
'new_item_name' => __('New Campaign Name', $this->plugin_locale),
'parent_item' => __('Post parent:', $this->plugin_locale),
'parent_item_colon' => __('Post parent:', $this->plugin_locale),
'search_items' => __('Search Campaigns', $this->plugin_locale),
'add_or_remove_items' => __('Add or Remove Campaigns', $this->plugin_locale)
),
'public' => true,
'show_ui' => true,
'show_in_nav_menus' => false,
'show_tagcloud' => false,
'show_admin_column' => true,
'hierarchical' => true,
'query_var' => true,
'rewrite' => array(
'slug' => __('promotion', $this->plugin_locale)
)
));
分類法の名前であるtaxonomy-mfg_pp
というテンプレートも作成しましたが、投稿があっても投稿を出力することはありません。犯人は、下に見られるように、実行されたWP_Queryが記事、ページ、および添付ファイルのみを探すことであるようです。
SELECT SQL_CALC_FOUND_ROWS qADrathuFrU2_posts.ID FROM qADrathuFrU2_posts INNER JOIN qADrathuFrU2_term_relationships ON (qADrathuFrU2_posts.ID = qADrathuFrU2_term_relationships.object_id) WHERE 1=1 AND ( qADrathuFrU2_term_relationships.term_taxonomy_id IN (1196) ) AND qADrathuFrU2_posts.post_type IN ('post', 'page', 'attachment') AND (qADrathuFrU2_posts.post_status = 'publish' OR qADrathuFrU2_posts.post_author = 1 AND qADrathuFrU2_posts.post_status = 'private') AND qADrathuFrU2_posts.post_password = '' GROUP BY qADrathuFrU2_posts.ID ORDER BY qADrathuFrU2_posts.post_date DESC LIMIT 0, 10
私は何か間違ったことをしています、そして私はこれについて間違ったやり方で行っていますか?
締め切りが近づいているので、私を助けてください、私はちょうどこれを正しくするようには思えません!
事前に感謝します、ジョナサン
その理由や理由はわかりませんが、以下のコードは問題を解決しています。私はそれを必要とすべきではないように私には思えるが、どうやら私はそうしている。
add_filter('pre_get_posts', array(&$this, 'modify_pre_query_request'));
public function modify_pre_query_request($query){
if ($query->is_main_query()){
if ($query->is_tax){
$post_type = get_query_var('post_type');
if (!$post_type){
$post_type = array( 'post', 'YOUR POST TYPE' );
$query->set('post_type', $post_type);
}
}
}
}
上記のコードはオブジェクト指向のテーマ用です。オブジェクト指向のテーマで作業しない場合は、代わりに次のコードを使用してください。
add_filter('pre_get_posts', 'modify_pre_query_request');
function modify_pre_query_request($query){
if ($query->is_main_query()){
if ($query->is_tax){
$post_type = get_query_var('post_type');
if (!$post_type){
$post_type = array( 'post', 'YOUR POST TYPE' );
$query->set('post_type', $post_type);
}
}
}
}
すべての助けをありがとう!
Jonathanの回答と この回答 に感謝しますが、これは自動的に投稿タイプを決定し、投稿タイプの名前を気にする必要がないため、この問題を解決するためのより柔軟な方法です。
add_action( 'pre_get_posts', 'dw_handle_posts' );
function dw_handle_posts( $query ) {
if( ! $query->is_main_query() || is_admin() )
return;
if ( $query->is_tax ){
$post_type = get_query_var('post_type');
if( ! $post_type ){
global $wp_taxonomies;
$taxo = get_queried_object();
$post_type = ( isset( $wp_taxonomies[$taxo->taxonomy] ) ) ? $wp_taxonomies[$taxo->taxonomy]->object_type : array();
$query->set('post_type', $post_type);
}
}
return $query;
}