重写规则:带有2个数值型变量的自定义帖子类型

时间:2016-07-21 作者:bvsmith

我有一个wordpress网站,使用自定义帖子类型“gallery”来显示一些照片。我找不到合适的正则表达式来匹配我的url变量(我是正则表达式的新手)

我想要实现的是获得这种形式的url:

/custom_post_type_slug/custom_post_type_name/page_num/photo_id/
在我的情况下,它应该给出:

/gallery/name-of-gallery/1/15/
我试过这个正则表达式:

add_rewrite_rule( \'gallery/(.+?)(?:/([0-9]+))?/([0-9]{1,2})/([0-9]{1,2})/?$\', \'index.php?gallery=$matches[1]&page=$matches[2]&photo=$matches[3]\',\'top\' );
没有成功。

当我用查询监视器测试这个重写规则时,它告诉我photo=$匹配[3],而page为null。

如果有人能给我一个建议,那就太好了。

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

add_rewrite_rule() 无法自动为您创建永久链接结构。您应该使用wp_link_pages_link 滤器E、 g:

add_filter(\'wp_link_pages_link\', function($link, $i)
{
  global $post, $photo_id;

  if ($photo_id && \'gallery\' === $post->post_type)
    $link = $link . \'/\' . intval($photo_id) . \'/\';

  return $link;
}, PHP_INT_MAX, 2);
那么,您必须使用add_rewrite_tag() 让WordPress知道photo 查询字符串:

add_action(\'init\', function()
{
  add_rewrite_tag(\'%photo%\', \'([0-9]+)\');
  add_rewrite_rule(\'^gallery/([^/]+)/([0-9]+)/([0-9]+)/?$\', \'index.php?post_type=gallery&name=$matches[1]&page=$matches[2]&photo=$matches[3]\', \'top\');
}, 0, 0);

相关推荐