php 如何正确地重写一个帖子标签?

holgip5t  于 2023-11-16  发布在  PHP
关注(0)|答案(1)|浏览(98)

假设我有一个post标签,其term id为480,我试图使用add_rewrite_rule创建一个重定向,到目前为止我做到了:

function term_custom_redirect()
{
    $referer_url = "en/tag/a-lange-sohne";
    add_rewrite_rule(
        "^$referer_url/?$",
        'index.php?p=' . 480,
        "top"
    );

    flush_rewrite_rules();
}
add_action('init', 'term_custom_redirect', 10, 0);

字符串
代码应该为项id 480添加一个重写,所以当用户访问下面的url:example.com/en/tag/a-lange-sohne/时,应该加载与480相关联的标记页面,但是我得到了404,即使我在最后添加了flush_rewrite_rules(我也保存了后端的永久链接)。

  • 更新:*

这里的主要问题是,一些帖子标签包含在URL -en中,我想删除它,例如:

example.com/en/tag/a-lange-sohne-en/


应成为:

example.com/en/tag/a-lange-sohne/


分类法是post_tag,并且是wordpress中的默认分类法,所以我没有创建任何新的分类法:


的数据
我认为我最初的解决方案会工作,但由于某种原因没有。我还尝试了一个新的钩子,应该处理这项工作:

function update_term_link($permalink, $tag)
{
    if (strpos($permalink, '-en') !== false) {
        $permalink = str_replace('-en', '', $permalink);
    }

    return $permalink;
}

add_filter('tag_link', 'update_term_link', 10, 2);


但它也不起作用(我总是刷新固定链接)。
注意:使用tag_link钩子,我可以正确地看到新的永久链接结构,它根本无法访问404错误。

a14dhokn

a14dhokn1#

这应该是可行的:

function term_custom_redirect()
{
    $referer_url = "en/tag/a-lange-sohne";
    $tag_id = 480;
    $tag = get_term($tag_id, 'post_tag');

    if ( $tag ) {
        add_rewrite_rule(
            "^{$referer_url}/?$",
            'index.php?tag=' . $tag->slug,
            "top"
        );

        flush_rewrite_rules();
    }
}
add_action('init', 'term_custom_redirect', 10, 0);

字符串
这里我们使用tag参数来要求WordPress按slug查找标签存档页面。
该函数使用get_term()通过ID获取标签(在本例中,ID为480),然后我们可以使用该信息检索标签对象,包括其slug。这很好,因为如果标签被重命名,它不会影响我们的代码,因为ID将保持不变。


的数据

相关问题