Wordpress 添加重写规则对我不起作用
Wordpress add rewrite rule doesn't work for me
我正在开发一个创建 2 个页面的插件:一个列表页面和一个详细信息页面。
我不使用自定义类型。我在数据库中创建了一个 table,我在其中保存了公司详细信息以及详细信息页面的 slug。
它工作正常,但 URL 有问题。他们不漂亮。
在列表页面上,我使用此代码创建 link:
<a href="https://www.website.com/company/details/?companyname=<?php echo $value->company_slug; ?>"><?php echo stripslashes($value->company_name); ?></a>
生成的 link 如下所示:
https://www.website.com/company/details/?companyname=new-company-name
我使用查询是因为我在详细信息页面上需要它,我在其中使用此代码:
$company_slug = $_GET['companyname'];
$company_details = $wpdb->get_row("SELECT * FROM $table_company WHERE company_slug = '$company_slug'");
这就是我从 sql 中检索公司详细信息的方式,它也工作得很好。
我在Wordpress中手动创建了详细信息页面。
问题是我想让细节 URL 看起来漂亮,像这样:
https://www.website.com/company/details/new-company-name/
像这样生成它很容易,但是当我点击时,我得到一个 404,因为缺少来自 URL 的查询。
我认为直接创建漂亮的 URL 并在详细信息页面上解析 URL 并获取公司 slug 很容易。它没有用。我收到 404 可能是因为该页面实际上不存在。
所以,我做了一些关于 URL 重写的研究,我找到了一些例子,但 none 有效。
我发现也试过这个代码:
add_filter('query_vars', function($vars) {
$vars[] = "companyname";
return $vars;
});
function custom_rewrite_rule() {
add_rewrite_rule('^companyname/?([^/]*)/?','company/details/?companyname=$matches[1]','top');
}
add_action('init', 'custom_rewrite_rule', 10, 0);
我读到如果我使用自定义 URL 而不是 index.php,我不应该使用火柴,所以我也尝试过不使用火柴:
add_rewrite_rule('^companyname/?([^/]*)/?','company/details/?companyname=','top');
没有结果。如果当然,每次更改后我都会再次保存 permalinks。
这应该是一个简单的任务,但不知何故它不起作用。
https://developer.wordpress.org/reference/functions/add_rewrite_rule/
有谁知道我怎样才能完成这项工作?
谢谢。
此致,
AG
我假设您创建的详细信息页面有 slug company/details
。这是你需要做的才能让它发挥作用-
1.在 functions.php 文件中添加自定义重写规则:
function theme_custom_rewrites() {
add_rewrite_tag("%companyname%", "([a-z0-9\-_]+)");
add_rewrite_rule('^company/details/([a-z0-9\-_]+)/?$', 'index.php?pagename=company/details&companyname=$matches[1]', 'top');
}
add_action('init', 'theme_custom_rewrites');
它注册了一个名为 companyname
的新重写 tag/query var 供以后使用,并为您想要的特定 URL 结构注册自定义重写规则 (/company/details/company_name
) .
2。获取模板文件上的公司名称并使用: 添加上述代码并保存永久链接后,只需使用get_query_var()
函数即可获取公司名称。
$companyname = get_query_var( 'companyname' );
希望对您有所帮助。谢谢。
非常感谢您的快速回复。有效。
当然,我不得不将列表页面上的 link 更改为:
<a href="https://www.website.com/company/details/<?php echo $value->company_slug; ?>"><?php echo stripslashes($value->company_name); ?></a>
我已经从 link 中删除了查询,现在看起来像这样:
https://www.website.com/company/details/new-company-name/
我不明白的是,WP 如何知道哪个是查询,因为我从 link.
中删除了它
如果我访问
我可以看到相同的数据
https://www.website.com/company/details/?companyname=new-company-name
或
https://www.website.com/company/details/new-company-name/
但是,基本上,这部分 (?companyname=) 在 link 中不再存在,因为我更改了它。
我的插件现在没有查询,但不知何故一切正常。 :)
我没有在某处声明它。它完全消失了并且有效。
此代码如何知道查询存在并从数据库中检索 slug?
$companyname = get_query_var( 'companyname' );
我现在只有这个代码:
<a href="https://www.website.com/company/details/<?php echo $value->company_slug; ?>"><?php echo stripslashes($value->company_name); ?></a>
因此,URL 中没有查询。
感谢您的宝贵时间。
此致,
AG
我正在开发一个创建 2 个页面的插件:一个列表页面和一个详细信息页面。
我不使用自定义类型。我在数据库中创建了一个 table,我在其中保存了公司详细信息以及详细信息页面的 slug。
它工作正常,但 URL 有问题。他们不漂亮。
在列表页面上,我使用此代码创建 link:
<a href="https://www.website.com/company/details/?companyname=<?php echo $value->company_slug; ?>"><?php echo stripslashes($value->company_name); ?></a>
生成的 link 如下所示:
https://www.website.com/company/details/?companyname=new-company-name
我使用查询是因为我在详细信息页面上需要它,我在其中使用此代码:
$company_slug = $_GET['companyname'];
$company_details = $wpdb->get_row("SELECT * FROM $table_company WHERE company_slug = '$company_slug'");
这就是我从 sql 中检索公司详细信息的方式,它也工作得很好。
我在Wordpress中手动创建了详细信息页面。
问题是我想让细节 URL 看起来漂亮,像这样:
https://www.website.com/company/details/new-company-name/
像这样生成它很容易,但是当我点击时,我得到一个 404,因为缺少来自 URL 的查询。
我认为直接创建漂亮的 URL 并在详细信息页面上解析 URL 并获取公司 slug 很容易。它没有用。我收到 404 可能是因为该页面实际上不存在。
所以,我做了一些关于 URL 重写的研究,我找到了一些例子,但 none 有效。
我发现也试过这个代码:
add_filter('query_vars', function($vars) {
$vars[] = "companyname";
return $vars;
});
function custom_rewrite_rule() {
add_rewrite_rule('^companyname/?([^/]*)/?','company/details/?companyname=$matches[1]','top');
}
add_action('init', 'custom_rewrite_rule', 10, 0);
我读到如果我使用自定义 URL 而不是 index.php,我不应该使用火柴,所以我也尝试过不使用火柴:
add_rewrite_rule('^companyname/?([^/]*)/?','company/details/?companyname=','top');
没有结果。如果当然,每次更改后我都会再次保存 permalinks。
这应该是一个简单的任务,但不知何故它不起作用。
https://developer.wordpress.org/reference/functions/add_rewrite_rule/
有谁知道我怎样才能完成这项工作?
谢谢。
此致, AG
我假设您创建的详细信息页面有 slug company/details
。这是你需要做的才能让它发挥作用-
1.在 functions.php 文件中添加自定义重写规则:
function theme_custom_rewrites() {
add_rewrite_tag("%companyname%", "([a-z0-9\-_]+)");
add_rewrite_rule('^company/details/([a-z0-9\-_]+)/?$', 'index.php?pagename=company/details&companyname=$matches[1]', 'top');
}
add_action('init', 'theme_custom_rewrites');
它注册了一个名为 companyname
的新重写 tag/query var 供以后使用,并为您想要的特定 URL 结构注册自定义重写规则 (/company/details/company_name
) .
2。获取模板文件上的公司名称并使用: 添加上述代码并保存永久链接后,只需使用get_query_var()
函数即可获取公司名称。
$companyname = get_query_var( 'companyname' );
希望对您有所帮助。谢谢。
非常感谢您的快速回复。有效。
当然,我不得不将列表页面上的 link 更改为:
<a href="https://www.website.com/company/details/<?php echo $value->company_slug; ?>"><?php echo stripslashes($value->company_name); ?></a>
我已经从 link 中删除了查询,现在看起来像这样:
https://www.website.com/company/details/new-company-name/
我不明白的是,WP 如何知道哪个是查询,因为我从 link.
中删除了它如果我访问
我可以看到相同的数据 https://www.website.com/company/details/?companyname=new-company-name
或
https://www.website.com/company/details/new-company-name/
但是,基本上,这部分 (?companyname=) 在 link 中不再存在,因为我更改了它。
我的插件现在没有查询,但不知何故一切正常。 :)
我没有在某处声明它。它完全消失了并且有效。
此代码如何知道查询存在并从数据库中检索 slug?
$companyname = get_query_var( 'companyname' );
我现在只有这个代码:
<a href="https://www.website.com/company/details/<?php echo $value->company_slug; ?>"><?php echo stripslashes($value->company_name); ?></a>
因此,URL 中没有查询。
感谢您的宝贵时间。
此致, AG