我正在开发一个可创建2个页面的插件:一个列表页面和一个详细信息页面。
我不使用自定义类型。我已经在数据库中创建了一个表,用于保存公司详细信息以及详细信息页面的信息。
它工作正常,但是我的网址有问题。他们不漂亮。
在列表页面上,我使用以下代码创建链接:
<a href="https://www.website.com/company/details/?companyname=<?php echo $value->company_slug; ?>"><?php echo stripslashes($value->company_name); ?></a>
生成的链接如下:
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并获取公司信息很容易。没用我得到404,可能是因为该页面实际上不存在。
因此,我已经完成了有关URL重写的一些研究,发现了一些示例,但没有一个奏效。
我发现还尝试了以下代码:
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=$1','top');
没有结果。如果可以的话,每次更改后,我都会再次保存永久链接。
这应该是一件容易的事,但是不成功。
https://developer.wordpress.org/reference/functions/add_rewrite_rule/
你们当中有人知道我该怎么做吗?
谢谢。
关于, AG
答案 0 :(得分:1)
我假设您创建的详细信息页面上有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
的新重写标记/查询变量,以供以后使用,并为您想要的特定URL结构(/company/details/company_name
)注册一个自定义重写规则。
2。在模板文件上获取公司名称并使用它:在添加以上代码并保存了永久链接之后,只需使用get_query_var()
函数即可获取公司名称。
$companyname = get_query_var( 'companyname' );
希望有帮助。谢谢。
答案 1 :(得分:0)
非常感谢您的快速回复。有效。
当然,我必须将列表页面上的链接更改为:
<a href="https://www.website.com/company/details/<?php echo $value->company_slug; ?>"><?php echo stripslashes($value->company_name); ?></a>
我已经从链接中删除了查询,现在看起来像这样:
https://www.website.com/company/details/new-company-name/
我不了解的是WP如何知道哪个查询,因为我从链接中删除了它。
访问后我可以看到相同的数据
https://www.website.com/company/details/?companyname=new-company-name
或
https://www.website.com/company/details/new-company-name/
但是,基本上,该部分(?companyname =)在链接中已不存在,因为我已对其进行了更改。
我的插件中现在没有查询,但是某种方式一切正常。 :)
我没有在某处声明它。它已经完全消失,并且可以正常工作。
此代码如何知道该查询存在并且正在从数据库中检索该子弹?
$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