[英]Using URL Rewrite Rules for Dynamic and Pretty URLs in Wordpress
我的book-store
一页写着。 我希望此页面具有不同的部分,即: category
和book
。 我想使用重写规则来实现与以下示例路由匹配的漂亮网址:
example.com/book-store/category/{category_name}
example.com/book-store/book/{book_id}
我已经尝试了以下方法,但我认为我缺少了一些重要的东西:
functions.php
:
add_filter('query_vars', 'add_state_var', 0, 1);
function add_state_var($vars)
{
$vars[] = 'category_name';
$vars[] = 'book_id';
return $vars;
}
page-book-store.php
:
add_rewrite_rule('^book-store/category/([^/]*)/?', 'index.php?post_type=page&name=book-store&book-category=$matches[1]', 'top');
add_rewrite_rule('^book-store/book/([^/]*)/?', 'index.php?post_type=page&name=book-store&book-id=$matches[1]', 'top');
然后,我进入/wp-admin
并在永久链接设置中单击“保存”
每当我访问网址example.com/book-store/category/fiction
或example.com/book-store/book/123
我都会收到404
我正在使用apache2.4和mysql。 在Apache中启用了mod-rewrite模块。
我在这里想念/做错了什么?
据我所知:
example.com/book-store/
页面 您想要创建以下网址:
example.com/book-store/category/{category_name} example.com/book-store/book/{book_id}
其中{category_name}
和{book_id}
是query vars
您添加到page-book-store.php
文件中的代码将不起作用,仅因为在代码之前已查询了url。 另外,过滤器add_filter('query_vars', 'add_state_var', 0, 1);
也不会工作。 该过滤器的优先级为10,但您使用的是0。
为了实现您的目标,请将以下代码添加到您的functions.php
文件中:
add_action('init', 'ww_rewrite_book_store');
function ww_rewrite_book_store(){
add_rewrite_tag('%book_id%', '([^&]+)');
add_rewrite_rule('^(book-store)/book/([^/]*)/?', 'index.php?pagename=$matches[1]&book_id=$matches[2]', 'top');
add_rewrite_tag('%category_name%', '([^&]+)');
add_rewrite_rule('^(book-store)/category/([^/]*)/?', 'index.php?pagename=$matches[1]&category_name=$matches[2]', 'top');
}
之后,转到“仪表板”>“设置”>“永久链接”,然后单击“ 保存更改”按钮。
首先,我们使用add_rewrite_tag()
建立查询变量。 并使用add_rewrite_rule()
使它正常工作。
例如,如果您的网址为example.com/book-store/category/some_category
,则可以在page-book-store.php
文件中使用查询vars(get {some_category}
),例如:
echo get_query_var('category_name');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.