使用单个类别显示所有帖子和自定义帖子类型

时间:2016-09-27 06:47:49

标签: wordpress custom-post-type

我创建了一个CPT UI的帖子类型:

add_action( 'init', 'cptui_register_my_cpts_matratze' );
function cptui_register_my_cpts_matratze() {
    $labels = array(
        "name" => __( 'Matratzen', '' ),
        "singular_name" => __( 'Matratze', '' ),
        );

    $args = array(
        "label" => __( 'Matratzen', '' ),
        "labels" => $labels,
        "description" => "",
        "public" => true,
        "publicly_queryable" => true,
        "show_ui" => true,
        "show_in_rest" => false,
        "rest_base" => "",
        "has_archive" => true,
        "show_in_menu" => true,
                "exclude_from_search" => false,
        "capability_type" => "post",
        "map_meta_cap" => true,
        "hierarchical" => false,
        "rewrite" => array( "slug" => "matratze", "with_front" => true ),
        "query_var" => true,

        "supports" => array( "title", "editor", "thumbnail", "excerpt", "trackbacks", "custom-fields", "comments", "revisions", "author", "page-attributes", "post-formats" ),      
        "taxonomies" => array( "category", "post_tag" ),
            );
    register_post_type( "matratze", $args );

// End of cptui_register_my_cpts_matratze()
}

但是,当我想通过我的前端的链接访问类别时,我没有发帖。

例如,当你点击我什么都没有回来时:

Category

帖子已开启,其类别为DaMi

Post

我的CPT UI Post Type配置错误了吗?有什么建议我做错了吗?

3 个答案:

答案 0 :(得分:3)

查看here

默认情况下,WordPress网站上的类别页面只显示默认的“帖子”帖子类型,因此您需要在Wordpress通过添加pre_get_posts过滤器查询帖子之前添加CPT。

在这里添加了代码:

add_filter('pre_get_posts', 'query_post_type');
function query_post_type($query) {
  if( is_category() ) {
    $post_type = get_query_var('post_type');
    if($post_type)
        $post_type = $post_type;
    else
        $post_type = array('nav_menu_item', 'post', 'matratze'); // don't forget nav_menu_item to allow menus to work!
    $query->set('post_type',$post_type);
    return $query;
    }
}

答案 1 :(得分:2)

当您将Wordpress标准类别用于自定义帖子类型时,默认情况下,Wordpress不会在类别存档页面上显示您的自定义帖子类型帖子。因此,您必须修改类别存档页面查询以包含您的自定义帖子类型。

请在function.php文件中包含以下代码。不要忘记在以下代码中更改自定义帖子类型名称。

function add_custom_post_types_to_tax( $query ) {
    if( is_category() || is_tag() && 
        empty( $query->query_vars['suppress_filters'] ) ) {

        // Include your custom post type
        $post_types = array( 'post', 'your_custom_type' );

        $query->set( 'post_type', $post_types );
        return $query;
    }
}

add_filter( 'pre_get_posts', 'add_custom_post_types_to_tax' );

希望这会对你有所帮助。

答案 2 :(得分:1)

为此,

function query_post_type($query) {
  if( is_category() ) {
        $post_type = get_query_var('post_type');
        // post type get here
        if($post_type){
                // no more code here for by default
        }           
        else{
           $post_types = array( 'post', 'your_custom_type' );
            // custom type          
        }
        $query->set('post_type',$post_type);
        return $query;
    }
}
add_filter('pre_get_posts', 'query_post_type');

我认为使用这个功能它会起作用。任何其他问题的评论。