自定义分类档案不显示某些子分类的帖子

时间:2013-09-16 作者:GMBrian

我有一个自定义的帖子类型,它有一个自定义的分类法,作为这个自定义帖子类型的主要层次结构。我正在经历一些我无法解释的行为。

该层次结构有三个层次,如下所示:

主节-小节

其想法是将每个自定义帖子类型添加到一个小节中,以便形成一个类似于书籍>章节的结构。我对自定义帖子类型管理页面做了一些限制,因此只能向子部分添加新的自定义帖子类型(这一部分工作得很好)。

问题是,对于主要/部分过滤器,某些子部分中的自定义帖子类型不会显示。这不仅存在于我的定制前端归档中,也存在于WordPress后端,这似乎是一个非常基本的问题。对于这个自定义帖子类型的后端,我还为分类添加了一些非常标准的过滤器。当我在这个过滤器中选择--subsection depth时,包含这个--subsection的帖子将按预期显示。但是当选择前面提到的小节的主要部分或-部分时,什么都没有显示。所有这些分类法都是由用户添加的,所以我不确定他在添加这些有问题的子部分时是否做了一些不同的事情。

一些可能相关且处于活动状态的插件:

WPML多语言CMS分类顺序和分类术语顺序:使用自定义帖子类型作为分类,我自然尝试禁用它们。

我的CPT注册:

add_action(\'init\', function() {
    global $plugin_base_dir;

    // Argumenten voor registreer functie
    $args = array(
        \'labels\' => array(
            \'name\' => \'Rules\',
            \'singular_name\' => \'Rule\',
            \'add_new\' => \'New rule\',
            \'add_new_item\' => \'Add new rule\',
            \'edit_item\' => \'Edit rule\',
            \'new_item\' => \'New rule\',
            \'view_item\' => \'View rule\',
            \'search_items\' => \'Search rules\',
            \'not_found\' => \'No rules found\',
            \'not_found_in_trash\' => \'No rules found in trash\'
        ),
        \'query_var\' => \'rule\',
        \'rewrite\' => false, 
        \'taxonomies\' => array(
            \'rlt_rule_headline\', 
            \'rlt_rule_topic\',
            \'rlt_rule_year\'
        ),
        \'public\' => true,
        \'publicly_queryable\' => true,
        \'menu_icon\' => \'\',
        \'show_ui\' => true,
        \'hierarchical\' => false,
        \'menu_position\' => null,
        \'supports\' => array(
            \'title\',
            \'editor\'
        )
    );
    // Registreer de Custom Post Type
    register_post_type(\'rlt_rule\', $args);
});
有问题的分类法注册:

register_taxonomy(
    \'rlt_rule_headline\',
    \'rlt_rule\',
    array(
        \'labels\' => array(
            \'name\' => \'Headlines\',
            \'singular_name\' => \'Headline\',
            \'add_new_item\' => \'Add headline\',
            \'new_item_name\' => "New headline"
        ),
    \'rewrite\' => array(
        \'slug\' => \'headline\',
        \'with_front\'=> false,  
        \'feed\'=> true 
        ),
    \'show_ui\' => true,
    \'show_tagcloud\' => false,
    \'hierarchical\' => true
    )
);
我添加的后端筛选器:

$filter_taxonomy = \'rlt_rule_headline\';
    wp_dropdown_categories( 
        array(
            \'show_option_all\' => \'Show all headlines\',
            \'taxonomy\' => $filter_taxonomy,
            \'name\' => $filter_taxonomy,
            \'orderby\' => \'name\',
            \'selected\' => ( isset( $wp_query->query[$filter_taxonomy] ) ? $wp_query->query[$filter_taxonomy] : \'\' ),
            \'hierarchical\' => true,
            \'depth\' => 3,
            \'show_count\' => false,
            \'hide_empty\' => true,
        ) 
    );
过滤器为默认值。我没有添加函数来捕获它并处理任何事情。因此,它只是像普通归档一样添加query\\u变量和过滤器。前端归档也是如此。

2 个回复
最合适的回答,由SO网友:GMBrian 整理而成

结果证明与插件有关CPT-onomies. 当然,我尝试禁用插件进行测试。但这些导致问题的归档文件也依赖于一些插件来发挥作用,我并没有单独禁用插件。

吸取的教训。在使用这个插件之前,我没有对它进行充分的研究。这有点奇怪,因为我只使用这个插件将一个“CPT onomy”添加到另一个CPT的存档中。但据我所知,插件中没有错误。

SO网友:cybmeta

你所说的“过滤器”只是一个HTMLselect 要素你需要把select 元素,并根据此select 要素

例如,对于前端:

表格:

<form method="post" action="<?php echo get_post_type_archive_link(\'rlt_rule\');?>">
    <?php
    $filter_taxonomy = \'rlt_rule_headline\';
    wp_dropdown_categories( 
        array(
            \'show_option_all\' => \'Show all headlines\',
            \'taxonomy\'        => $filter_taxonomy,
            \'name\'            => $filter_taxonomy,
            \'orderby\'         => \'name\',
            \'selected\'        => ( isset( $wp_query->query[$filter_taxonomy] ) ? $wp_query->query[$filter_taxonomy] : \'\' ),
            \'hierarchical\'    => true,
            \'depth\'           => 3,
            \'show_count\'      => false,
            \'hide_empty\'      => true,
        ) 
    );
    <button type="submit">Search</button>
</form>
过滤过程:

add_action( \'pre_get_posts\', \'my_pre_get_post\' );
function my_pre_get_post($query){

   //limit to main query and frontend are. Add you own conditionals
   if($query->is_main_query() && !is_admin()) {

       $tax_query = array();
       $tax_input = isset($_POST[\'rlt_rule_headline\']) ? $_POST[\'rlt_rule_headline\'] : \'\';
       if(!empty($tax_input)){

           $tax_query[] = array(
                                \'taxonomy\'         => \'rlt_rule_headline\',
                                \'field\'            => \'id\',
                                \'terms\'            =>  $tax_input,
                                \'operator\'         => \'IN\',
                                \'include_children\' => true
                               );
        }
    }

    $query->set(\'tax_query\',$tax_query);
}
对于后端,您需要在restrict_manage_posts 行动钩,如所示this answer.

结束

相关推荐

rewrite rules hierarchical

我希望我的WordPress遵循以下规则:/productes/ 包含所有产品的页面/productes/[category]/ 包含该类别所有产品的分类页面/productes/[category]/[subcategory]/ 包含该类别所有产品(与2相同)的分类页面/[productes]/[category]/[product]/ A.single-productes.php 将显示类别产品/[productes]/[category]/[subcategory]/[product]/ A.sin