更改已标记帖子的永久链接结构

时间:2016-11-19 00:35:58

标签: php wordpress url-rewriting permalinks

我尝试修改的帖子的当前永久链接结构包括日期,并在设置页面中配置如:“/%year%/%monthnum%/%day%/%category%/%postname %/“

示例帖子网址:http://example.com/2016/09/11/category/child-category/long-post-slug-is-printed-here/

我的问题是我无法弄清楚如何为标记有特定标记的帖子修改此固定链接结构,例如,如果我有一个标签“permalink-struc-2”,我添加它在我的帖子中,我想重写永久链接:http://example.com/category/child-category/long-post-slug-is-printed-here/ 日期应该从帖子永久链接中删除。

我尝试过使用wp过滤器“post_link”

add_filter('post_link',array($ this,'change_permalink_date_structure'),1,3);

但最终发生的是网址被更改,但是当我尝试从缩短的网址访问帖子时,它仍然会重定向到原始网址 - > http://example.com/2016/09/11/category/child-category/long-post-slug-is-printed-here/

有人可以帮忙解决这个问题吗?

由于

2 个答案:

答案 0 :(得分:0)

您可以尝试使用htaccess mod重写。您必须为每个网址添加一个规则。例如:

 RewriteRule /category/child-category/long-post-slug-is-printed-here/ /2016/09/11/category/child-category/long-post-slug-is-printed-here/ [L]

答案 1 :(得分:0)

感谢所有试图帮助解决这个问题的人,我设法找到了一种方法来做我需要的事情。基本上我用add_rewrite_rule()为wp写了一个重写规则 它适用于没有日期的帖子网址:

  $rewrite_rule_regex = '^(?!([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/)(.+?)/([^/]+)(?:/([0-9]+))?/?$';

add_rewrite_rule($rewrite_rule_regex, 'index.php?category_name=$matches[4]&name=$matches[5]&page=$matches[6]&istaggedcalendar=1', 'bottom');

此外,这个新的重写规则必须具有比最后一个(通用)wp重写规则更高的优先级(如果我的重写规则是最后一个,它没有工作,如果它被设置为" top& #34;其他一些重写规则不起作用):

add_filter(' rewrite_rules_array',数组($ this,' rewrite_rulles_array_look'));

// * set the priority of our rewrite rule to not interfere with other pages

function rewrite_rules_array_look($r_array) {

  $rew_rule = $r_array[$this->rewrite_rule_regex];

  unset($r_array[$this->rewrite_rule_regex]);

  $res = array_slice($r_array, 0, count($r_array)-1, true) +

      array($this->rewrite_rule_regex => $rew_rule) +

      array_slice($r_array, count($r_array)-1, count($r_array) , true) ;


  return $res;

}