URL插件中的分类/类别术语与帖子无关?

时间:2015-01-06 作者:blahdyeck

因此,我有一个很好的分层系统,涉及自定义的帖子类型和分类法。(参见Custom post types, taxonomies, and permalinks 供参考)

所以如果我在mysite上有帖子。com/taxonomy/subtaxonomy/stages很好,很管用,我可以访问mysite中的分类页面。com/分类学/亚分类学等

然而,注意到了一个bug——我可以把任何东西作为slug分类法的一部分,它仍然会放到帖子中!

例如mysite。com/LAIOAJSDJ/AOIDJKOASJD/味道很好。。。我还是会去的,没问题,但我要404!

如果slug/url中的分类术语不相关,那么使用它有什么意义?我希望它只使用一个特定的分类术语作为URL的一部分来转到帖子。。。如果帖子与分类术语不匹配,那么应该是404!!或者至少转发到正确的slug/url。。。。

编辑:

我通过设置/%category%/%postname%/…的自定义永久链接结构来测试普通的post/category函数。。。这足够好,并转发到正确的类别,这是我在上面寻找的,适合我网站的功能

下面提供的代码似乎根本不起作用,它是否与我的重写规则的设置有关?

my=自定义帖子类型

 add_filter(\'rewrite_rules_array\', \'mmp_rewrite_rules\');
  function mmp_rewrite_rules($rules) {
 $newRules  = array();
 $newRules[\'my/(.+)/page/?([0-9]{1,})/?$\']           = \'index.php?mycategory=$matches[1]&paged=$matches[2]\';
 $newRules[\'my/(.+)/(.+)/(.+)/?$\'] = \'index.php?my=$matches[3]\';
 $newRules[\'my/(.+)/?$\']           = \'index.php?mycategory=$matches[1]\'; 
 return array_merge($newRules, $rules);
  }
答复中的代码

 add_action( \'save_post\', \'mfields_set_default_object_terms\', 100, 2 );
 function wpd_single_cpt_queries( $query ){
   if( $query->is_singular()
     && $query->is_main_query()
     && isset( $query->query_vars[\'mycategory\'] ) ){
         $tax_query = array(
             array(
                 \'taxonomy\' => \'mycategory\',
                 \'field\' => \'slug\',
                 \'terms\' => $query->query_vars[\'mycategory\'],
             )
         );
         $query->set( \'tax_query\', $tax_query );
 }
 }
 add_action( \'pre_get_posts\', \'wpd_single_cpt_queries\' );
也将此用于参考代码(How to create a permalink structure with custom taxonomies and custom post types like base-name/parent-tax/child-tax/custom-post-type-name)

我甚至使用了WP Permastructure插件来看看这是否能解决问题。。这个插件工作得很好,但它仍然是同一个问题-分类术语本身被认为是不相关的,它只是URL的填充!

1 个回复
SO网友:Milo

我不会把它称为bug,你没有做任何事情来限制你的帖子的查询。这似乎也是一种不太可能的情况,随机字符串最终将取代您的分类术语,从而让它自己出现。

无论如何,答案是通过修改查询pre_get_posts 添加所需的任何分类数据。我不知道您的具体情况,因此这不是一个复制粘贴解决方案,但它显示了您需要执行的一般概念。

function wpd_single_cpt_queries( $query ){
    if( $query->is_singular()
        && $query->is_main_query()
        && isset( $query->query_vars[\'your_tax\'] ) ){
            $tax_query = array(
                array(
                    \'taxonomy\' => \'your_tax\',
                    \'field\' => \'slug\',
                    \'terms\' => $query->query_vars[\'your_tax\'],
                )
            );
            $query->set( \'tax_query\', $tax_query );
    }
}
add_action( \'pre_get_posts\', \'wpd_single_cpt_queries\' );

结束

相关推荐

GET_TERMS:确定分类术语是否有子项

我想确定一个分类术语是否有子项。请参见下面的标记,我将解释我的意思:<?php $terms = get_terms(\"wpsc_product_category\"); if ( !empty( $terms ) && !is_wp_error( $terms ) ){ foreach( get_terms( \'wpsc_product_category\', array( \'hide_empty\' => false, \'parent