WordPress父母/子女分类档案

时间:2020-04-18 10:56:04

标签: wordpress custom-post-type

我正在处理WordPress Custom Post TypesCustom Taxonomies

我已经读过很多类似的问题,但不幸的是,到目前为止,我还没有找到确切的案例。

我的目标是:

档案:

siteurl / rewrite / parent-term-slug /                                  => archive 
siteurl / rewrite / parent-term-slug / child-term-slug                  => archive

帖子:

siteurl / rewrite / parent-term-slug / post-name-slug                   => post
siteurl / rewrite / parent-term-slug / child-term-slug / post-name-slug => post

要达到上述效果,我有:

function register_my_cpt() {

    ...

    $my_cpt_arguments = array(

        ...
        'hierarchical'          => true,
        'has_archive'           => true,
        'rewrite'               => array('slug' => $rewrite . '/%term_slugs%', 'hierarchical' => true),

    );  

    register_post_type($my_cpt, $my_cpt_arguments);

}

add_action('init', 'register_my_cpt');

那我有:

function manage_post_links($post_link, $post_object){

    if(is_object($post_object) && $post_object->post_type === $my_cpt){

        $get_object_terms = wp_get_object_terms($post_object->ID, $my_tax);

        $object_terms_slug = array();

        foreach($get_object_terms as $get_object_term) {

            $object_terms_slug[] = $get_object_term->slug;

        }

        $object_terms = implode('/',$object_terms_slug);

        if($object_terms){

                    return str_replace('%term_slugs%' , $object_terms , $post_link);
         }

    }

    return $post_link;

}

add_filter('post_type_link', 'manage_post_links', 1, 2);

然后我又有了

function register_my_taxonomy() {

    ...

    $my_tax_arguments = array(

        ...
        'hierarchical'          => true,
        'has_archive'           => true,
        'rewrite'               => array('slug' => $rewrite, 'hierarchical' => true),

    );  

    register_taxonomy($my_tax, $my_tax_arguments);

}

add_action('init', 'register_my_taxonomy');

请注意,$rewritecustom taxonomycustom post type中具有相同的值

我当前的结果是:

档案:

siteurl / rewrite / parent-term-slug /                                  => it works
siteurl / rewrite / parent-term-slug / child-term-slug                  => it works

帖子:

siteurl / rewrite / parent-term-slug / post-name-slug                   => it DOES NOT work
siteurl / rewrite / parent-term-slug / child-term-slug / post-name-slug => it DOES NOT work

我想问题是,通过这种结构,即使调用了单个帖子,我仍在推动WordPress查找存档。也许我应该通过检查存档是否存在来过滤请求,如果不存在,则应该强制查找帖子内容。

我说得对吗?

编辑

在许多其他类似问题中都发现了这种解决方案,它使我意识到也许我应该研究重写规则。

function manage_rewrite_rules($rules) {

    $newRules = array();    
    $newRules[$rewrite.'/(.+)/(.+)/(.+)/?$']    = 'index.php?'.$my_cpt.'=$matches[3]';
    $newRules[$rewrite.'/(.+)/(.+)/?$']         = 'index.php?'.$my_tax.'=$matches[2]';

    return array_merge($newRules, $rules);
}

add_filter('rewrite_rules_array', 'manage_rewrite_rules');

这组规则(如果我没记错的话)告诉WordPress在URL为时显示帖子内容

siteurl / rewrite / one / two / three /

并在URL为

时显示档案内容
siteurl / rewrite / one / two / 

问题是我既有存档,又有URL之类的帖子

siteurl / rewrite / one / two / 

所以,现在我的情况是:

档案:

siteurl / rewrite / parent-term-slug /                                  => it works
siteurl / rewrite / parent-term-slug / child-term-slug                  => it works

帖子:

siteurl / rewrite / parent-term-slug / post-name-slug                   => it DOES NOT work
siteurl / rewrite / parent-term-slug / child-term-slug / post-name-slug => it works

只要这使我更接近结果,我怀疑这是一条死路。

0 个答案:

没有答案
相关问题