自定义分类归档页面上未显示自定义发布类型

时间:2016-04-13 作者:jkd540

我已经使用自定义帖子类型有一段时间了,但昨天我第一次尝试使用自定义分类法来与它们配对。

以下是我的“公司”分类法:

function create_company_taxonomy() {
    $labels = array(
        \'name\'              => _x( \'Companies\', \'taxonomy general name\' ),
        \'singular_name\'     => _x( \'Company\', \'taxonomy singular name\' ),
        \'search_items\'      => __( \'Search Companies\' ),
        \'all_items\'         => __( \'All Companies\' ),
        \'parent_item\'       => __( \'Parent Company\' ),
        \'parent_item_colon\' => __( \'Parent Company:\' ),
        \'edit_item\'         => __( \'Edit Companies\' ),
        \'update_item\'       => __( \'Update Companies\' ),
        \'add_new_item\'      => __( \'Add New Company\' ),
        \'new_item_name\'     => __( \'New Company Name\' ),
        \'menu_name\'         => __( \'Company\' ),
    );

    $args = array(
        \'labels\'            => $labels,
        \'show_ui\'           => true,
        \'show_admin_column\' => true,
        \'query_var\'         => true,
        \'rewrite\'           => array( \'slug\' => \'company\' ),
        \'public\' => true,
        \'hierarchical\' => true,
        \'show_ui\' => true,
        \'show_in_nav_menus\' => true,
        \'query_var\' => true,
        \'publicly_queryable\' => true,
        \'capability_type\' => \'post\',
        \'hierarchical\' => true,
        \'has_archive\' => true
    );

    register_taxonomy( \'company\', array( \'brochures\',\'business-cards\',\'post\',\'websites\' ), $args );
}
add_action( \'init\', \'create_company_taxonomy\', 0 );
正如你所见,我正在尝试将其用于“帖子”以及三种自定义帖子类型——“宣传册”、“名片”、“网站”

当我创建一家分类公司时。php模板(基于archive.php)并为这些post\\u类型中的每一个类型提供分类法中的术语,只有post才会显示在页面上。我根本无法显示自定义帖子类型。

我需要自定义查询吗?如有任何见解,将不胜感激。

编辑:这也是我的register\\u post\\u类型之一

add_action( \'init\', \'create_custom_post_types\' );
function create_custom_post_types() {

   $labels = array(
    \'name\' => __( \'Websites\' ),
    \'singular_name\' => __( \'Website\' )
    );

    $args = array(
    \'labels\' => $labels,
    \'public\' => true,
    \'has_archive\' => true,
    \'rewrite\' => array(\'slug\' => \'websites\'),
    \'taxonomies\' => array( \'category\',\'company\',\'post_tag\' ),
    \'supports\'  => array( \'title\', \'editor\', \'thumbnail\' , \'custom-fields\', \'excerpt\' ),
    \'exclude_from_search\' => true
    );

  register_post_type( \'websites\', $args);
}

1 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

默认情况下,所有公共帖子类型都包含在分类页面的主查询中。如果你看register_post_type()\'s设置为true时的公共参数

  • \'true\'

    意味着exclude_from_search: 错误的publicly_queryable: 符合事实的show_in_nav_menus: 正确,以及show_ui:符合事实的

注册帖子类型时exclude_from_searchtrue. 这不仅会从搜索中删除自定义帖子类型,还会从分类页面上的主查询中删除。同样,来自exclude_from_search 参数

注意:如果要显示与分类法术语关联的帖子列表,必须将exclude\\u from\\u search设置为false(即:for callsite_domaine/?taxonomy_slug=term_slugsite_domaine/taxonomy_slug/term_slug). 如果设置为true,请在分类页面上(例如:taxonomy.php) WordPress将找不到您的帖子和/或分页将产生404错误。

解决方案

您需要设置exclude_from_search 若要出错,请刷新永久链接并继续。如果需要从搜索页面中排除帖子类型,可以使用pre_get_posts 从主查询中删除帖子类型

出于兴趣编辑,下面是WP_Query 类(在wp includes/query.php中),负责在分类术语归档页面的主查询中包括和排除帖子类型

if ( $this->is_tax ) {
    if ( empty($post_type) ) {
        // Do a fully inclusive search for currently registered post types of queried taxonomies
        $post_type = array();
        $taxonomies = array_keys( $this->tax_query->queried_terms );
        foreach ( get_post_types( array( \'exclude_from_search\' => false ) ) as $pt ) {
            $object_taxonomies = $pt === \'attachment\' ? get_taxonomies_for_attachments() : get_object_taxonomies( $pt );
            if ( array_intersect( $taxonomies, $object_taxonomies ) )
                $post_type[] = $pt;
        }
        if ( ! $post_type )
            $post_type = \'any\';
        elseif ( count( $post_type ) == 1 )
            $post_type = $post_type[0];

        $post_status_join = true;
    } elseif ( in_array(\'attachment\', (array) $post_type) ) {
        $post_status_join = true;
    }
}
这里的重要部分是:get_post_types( array( \'exclude_from_search\' => false ). 这里是查询获取所有公共帖子类型的地方exclude_from_search 设置为false. 所有岗位类型exclude_from_search 设置为true 将从查询中排除,这就是为什么您的自定义帖子类型不会包含在分类术语归档页面中

相关推荐