更改特定类别的固定链接结构

时间:2014-06-30 作者:Sergey

我只需要为一个类别更改我的永久链接结构。现在我有:/%postname%/ , 但对于新闻类别,我需要以下结构:/%postname%-%post_id%/.

Question: 如何在特定类别中添加%post\\u id%?

3 个回复
SO网友:dancriel

这可以通过一些自定义过滤器来实现;行动。

尝试将此代码放置在主题的函数中。php文件:

add_filter( \'post_link\', \'custom_permalink\', 10, 3 );
function custom_permalink( $permalink, $post, $leavename ) {
    // Get the categories for the post
    $category = get_the_category($post->ID); 
    if (  !empty($category) && $category[0]->cat_name == "News" ) {
        $permalink = trailingslashit( home_url(\'/\'. $post->post_name .\'-\'. $post->ID .\'/\' ) );
    }
    return $permalink;
}
add_action(\'generate_rewrite_rules\', \'custom_rewrite_rules\');
function custom_rewrite_rules( $wp_rewrite ) {
    // This rule will will match the post id in %postname%-%post_id% struture
    $new_rules[\'^([^/]*)-([0-9]+)/?\'] = \'index.php?p=$matches[2]\';
    $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
    return $wp_rewrite;
}
这将为新闻类别中的帖子设置permalink结构,还将转换如下所示的请求URI:

/news-headline-text-01234
对此:

/index.php?p=1234
来源:这个问题是already asked on wordpress.org 我的答案是基于那里提供的解决方案。

Edit: 更新了重写正则表达式和规则,以匹配%postname%-%post\\u id%链接结构中的帖子id。2 测试并确认当前代码。

SO网友:s1lv3r

如果你只想将其用于一个类别,我认为最简单的方法是使用wp_insert_post_datasave_post 要钩住帖子的slug生成,只需添加$post->ID 如果帖子有你要找的类别。

这是我目前知道的唯一解决方案,因为AFAIK所有其他用于操纵permalink结构的核心函数都不能轻松地仅用于一个类别。

Here 另一个问题是关于更新后更改slug的更多细节。

SO网友:john23klipp

为什么不直接添加帖子id呢?如果你只需要这些?你可以用query_vars.

add_filter(\'query_vars\', \'my_query_vars\' );
您只需检查您是否属于“特殊”类别,如果是,则添加var。然后利用pre_get_posts 钩子,检查您的帖子是否包含ID,如果是,则更改查询以获得所需的帖子。

结束

相关推荐

Custom permalinks structure

我希望有这样的结构:www.mysite.com/2013 (必须显示2013年的所有职位)www.mysite.com/my-category/2013 (必须显示2013年和“我的类别”类别的所有帖子)www.mysite.com/my-category/my-tag/ (必须显示所有类别为“我的类别”和标记为“我的标记”的帖子)www.mysite.com/my-category/ (必须显示“我的类别”类别的所有帖子)www.mysite.com/my-