WordPress中为book-store页面配置URL重写规则实现友好URL求助
我来帮你搞定这个URL重写的问题!你已经走对了第一步——添加自定义查询变量,接下来只需要补全重写规则,再在页面模板里处理逻辑就行。下面是完整的解决方案:
第一步:完善自定义查询变量
先把你没写完的query_vars过滤器补全,确保category_name和book_id这两个变量都能被WordPress识别:
add_filter('query_vars', 'add_book_store_vars', 0); function add_book_store_vars($vars) { $vars[] = 'category_name'; $vars[] = 'book_id'; return $vars; }
第二步:添加URL重写规则
接下来要注册重写规则,让WordPress能正确解析你想要的URL结构,把请求映射到book-store页面并传递对应变量:
add_action('init', 'book_store_rewrite_rules'); function book_store_rewrite_rules() { // 匹配 /book-store/category/{category_name} add_rewrite_rule( '^book-store/category/([^/]+)/?$', 'index.php?pagename=book-store&category_name=$matches[1]', 'top' ); // 匹配 /book-store/book/{book_id} add_rewrite_rule( '^book-store/book/([0-9]+)/?$', 'index.php?pagename=book-store&book_id=$matches[1]', 'top' ); }
这里简单解释下:
- 正则表达式里,
[^/]+用来匹配任意非斜杠字符作为分类名,[0-9]+则只匹配数字作为书籍ID,这样更精准。 index.php?pagename=book-store明确指定要加载slug为book-store的页面。top参数让这个规则优先于WordPress默认规则,避免冲突。
第三步:刷新重写规则
添加完规则后必须刷新重写规则才能生效,操作很简单:
- 登录WordPress后台,进入设置 → 固定链接
- 不用修改任何设置,直接点击保存更改按钮即可。
第四步:在页面模板中处理逻辑
现在编辑book-store对应的页面模板(比如page-book-store.php),在里面判断当前访问的是分类页还是书籍详情页,然后获取变量并展示内容:
<?php get_header(); // 获取自定义查询变量 $category_name = get_query_var('category_name'); $book_id = get_query_var('book_id'); if ($category_name) { // 处理分类页面逻辑 echo '<h1>分类:' . esc_html($category_name) . '</h1>'; // 这里可以添加查询该分类下书籍的代码,比如自定义WP_Query } elseif ($book_id) { // 处理书籍详情页逻辑(假设书籍是自定义文章类型book) $book = get_post($book_id); if ($book && $book->post_type === 'book') { echo '<h1>书籍:' . esc_html($book->post_title) . '</h1>'; echo '<div>' . apply_filters('the_content', $book->post_content) . '</div>'; } else { echo '<p>未找到该书籍</p>'; } } else { // 默认的书店首页内容 echo '<h1>欢迎来到书店</h1>'; echo '<p>浏览我们的分类或热门书籍吧!</p>'; } get_footer(); ?>
如果你的书籍不是用自定义文章类型创建的,记得调整获取书籍数据的代码,适配你的实际数据结构。
内容的提问来源于stack exchange,提问作者proPhet
相关产品推荐
相关产品推荐

