重定向至存档是单个帖子有特定的术语分配给它吗?

时间:2015-04-13 作者:Mattaton

我想将任何一篇文章重定向到其分类术语的归档页面,如果它有一个指定的术语。

因此,如果一个术语“系列”的帖子位于:
domain/series/post/
我想将这篇文章重定向回:
domain/series/

我尝试过使用php的header()函数,但我知道在发送任何其他头之前需要先使用它。我似乎无法在同一个位置检测术语和使用header()。

非常感谢您的帮助<谢谢!

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

有一个template_redirect 非常适合这样的任务的挂钩。

钩住template_redirectis_single(), etc)

  • 重定向wp_safe_redirect() (如果在站点内部)
  • die() 阻止执行继续

  • SO网友:Mattaton

    感谢Rarst提供的提示
    下面是我为两个类似的分类法/帖子类型设置完成重定向的代码
    这基本上与我在专栏中指出的一样。如果我点击一篇文章并为其指定了顶级术语,url将从domain/series/post/

    domain/series/

    它只是从url的末尾去掉帖子的slug。

    显然,必须正确设置CPT、分类法和重写才能使用它。

    我添加了$type 参数设置为theme_perform_redirect() 函数,以便以后可以为其他类型的重定向添加功能。

    function theme_perform_redirect($post, $taxonomy, $type) {
        if ($type == \'top-level\') {
            $top_level_terms = get_top_level_term_ids( $taxonomy );
            $post_terms = wp_get_post_terms( $post->ID, $taxonomy );
            if ( in_array($post_terms[0]->term_id, $top_level_terms)) {
                // This is the main/top post, redirect it to the archive
                $to_strip = $post->post_name;
                $permalink = get_permalink( $post->ID );
                $go_here = str_replace($to_strip."/", "", $permalink);
                wp_redirect( $go_here );
                exit();
            }
        }
    }
    
    function theme_redirects() {
        global $post;
        if ( is_single() ) {
            if (is_singular( \'cartoon-series\' )) {
                heman_perform_redirect($post, \'cartoon-features\', \'top-level\');
            } else if (is_singular( \'movies\' )) {
                heman_perform_redirect($post, \'movie-features\', \'top-level\');
            }
        }
    }
    add_action( \'template_redirect\', \'theme_redirects\' );
    
    请注意get_top_level_term_ids() 是我自己的功能。它只获取父项为0的所有术语。。。。只是在一个更整洁的包装中。:-)

    谢谢

    结束

    相关推荐

    如何在使用TEMPLATE_REDIRECT或TEMPLATE_INCLUDE后将帖子加载到自定义帖子模板

    我需要使用URL参数?m=1 用不同的模板加载wordpress的每个页面,但问题是我无法提取可以使用规范URL访问的文本和帖子我尝试了不同的方法,对我来说最好的方法是使用template_redirect 行动挂钩或template_include 过滤器问题是,我无法使用任何这种方法将数据加载到模板文件中模板加载,但页面是空的,使用某些方法,它会返回404错误,以便更好地解释我的问题我将此代码添加到functions.phpadd_filter( \'template_include\', \'cus