一个类别的自定义固定链接

时间:2018-04-26 作者:Dee

我有以下permalink结构/%category%/blog/%postname%/.

我还在/博客上有一个存档,其中列出了所有博客帖子。

我有一个特定的类别,我希望permalink结构是/blog/%postname%/

这是我尝试过的代码:

add_filter( \'post_link\', \'custom_permalink\', 10, 3 );
function custom_permalink( $permalink, $post, $leavename ) {

$category = get_the_category($post->ID); 
if (  !empty($category) && $category[0]->cat_name == "hello" ) {
    $permalink = trailingslashit( home_url(\'/blog/\'. $post->post_name 
.\'/\' ) );
}
return $permalink;
}
第一部分工作正常,将类别为“hello”的帖子的url更改为https://example/blog/post-name - 在下一部分中,我将尝试为这个url创建一个指向实际帖子的重定向。

add_action(\'generate_rewrite_rules\', \'custom_rewrite_rules\');
function custom_rewrite_rules( $wp_rewrite ) {

$feed_rules = array(

  \'^blog/?\' => \'index.php?name=$matches[1]\',
);
$wp_rewrite->rules = $feed_rules + $wp_rewrite->rules;
return $wp_rewrite->rules;;
}
这也可以将url重定向到https://example/blog/post-name但是这个url不是显示一篇文章,而是显示我的博客存档,因此呈现方式本质上与-https://example/blog/

我的问题-为什么是https://example/blog/post-name 显示与相同https://example/blog/ 而不是展示帖子?

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

您的重写规则没有捕获任何内容。更改:

\'^blog/?\'
添加引用的捕获组$matches[1] 在您的规则中:

\'^blog/([^/]+)/?\'
访问Settings>Permalinks页面,该页面将刷新规则,否则您的代码应该可以正常工作。

SO网友:Oleg Butuzov

首先,我发现您的代码中有一个问题,您应该知道,而不是使用rewrite_rules_array 这是最终的重写规则过滤器,或者类似的东西post_rewrite_rules 您正在使用操作generate_rewrite_rules 让您自己的规则在全球范围内访问和更改$wp_rewrite. 您最好使用一个合适的过滤器,如本例所示。

add_filter( \'rewrite_rules_array\', function( $rules ){
    $rule = [ \'^blog/([^/]+)/?\' => \'index.php?name=$matches[1]\' ];
    return array_merge( $rule, $rules);
});

结束

相关推荐

How to replace permalinks

我已将wordpress项目导出并导入live server。现在的问题是,我将permalink结构作为“localhost”格式。当我单击网站中的任何链接时,它会将我重定向到localhost。我怎样才能改变这一点?我的htaccess文件如下所示<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /myproject/ RewriteRule ^index\\.php$ - [L] RewriteCo