【问题标题】:How do I turn PHP string into slug in Wordpress如何在 Wordpress 中将 PHP 字符串转换为 slug
【发布时间】:2015-11-13 20:09:03
【问题描述】:

我在 wordpress 中有一个页面,我正在使用一个名为 Bad-Debt-Recovery-in/ 的 slug。我在该页面上使用自定义 php 查询,URL 中的字符串如下所示

Bad-Debt-Recovery-in/?zipcode=55555&location=Chambers%20County+AL

我怎样才能把这个网址变成这样的蛞蝓

Bad-Debt-Recovery-in/55555/Chambers-County/AL/

作为重写?任何帮助将不胜感激!

更新: 这段代码实际上是我正在使用的。我还让它变得更简单,并创建了第三个名为“state”的变量。一种是针对城市的,一种是针对县页面的:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^Bad-Debt-Recovery-And-Collection-Agencies-Services-In\/([^\/]+)\/([^\/]+)\/([^\/]+)\/? Bad-Debt-Recovery-And-Collection-Agencies-Services-In/?zipcode=$1&city=$2&state=$3 [QSA,L,NC]
RewriteRule ^Bad-Debt-Recovery-And-Collection-Agency-Services-In\/([^\/]+)\/([^\/]+)\/([^\/]+)\/? Bad-Debt-Recovery-And-Collection-Agency-Services-In/?countyid=$1&county=$2&state=$3 [QSA,L,NC]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php

</IfModule>

# END WordPress

【问题讨论】:

  • 请添加您的代码
  • 我根据“Scriptonomy”解释添加了我的代码。它仍然无法正常工作。我可能做错了什么。

标签: php wordpress slug


【解决方案1】:

您所要求的,并寻求完成的称为:将请求路径转换为查询字符串。

使用 .htaccess RewriteRule 指令来修改传入的请求

RewriteRule ^Bad-Debt-Recovery-in\/([^\/]+)\/([^\/]+)\/([^\/]+)\/? Bad-Debt-Recovery-in/?a=$1&b=$2&c=$3 [QSA,L,NC]

每个([^\/]+) 将路径元素捕获到变量$1,$2,$3...

末尾的? 只是表示最后一个/ 是可选的,否则最后一个匹配可能会失败

\ 只需转义“/”以进行字面解释

根据需要添加尽可能多的([^\/]+) 并在查询中捕获它们

zipcode=$1&location=$2+$3

[QSA,L,NC] 末尾的修饰符称为标志

  • QSA 将查询字符串附加到重写的末尾(如果存在)
  • L 只是说这是最后一次重写
  • NC 表示不区分大小写

这是您的最终解决方案:

RewriteRule ^Bad-Debt-Recovery-in\/([^\/]+)\/([^\/]+)\/([^\/]+)\/? Bad-Debt-Recovery-in/?zipcode=$1&location=$2+$3 [QSA,L,NC]

【讨论】:

  • 谢谢!我要试试这个,如果它对我有用,我会告诉你。
  • 我添加了 htaccess 解决方案,但它仍然无法正常工作。我是否使链接看起来像这样 Bad-Debt-Recovery-in/?zipcode=55555&location=Chambers%20County+AL 或 slug 方式?在其他作品中,它是否将该网址更改为正确的网址?还是我必须输入正确的?我应该刷新我的规则吗?
  • 另外,我在这两行之后添加了重写规则:RewriteEngine On RewriteBase /
【解决方案2】:

您可以使用 WP function sanitize_title

将此与 php 循环结合起来,即

$url = $_SERVER['REQUEST_URI'];
foreach($_GET as $g){
  $url .= '/'.$g;
}
$url = sanitize_title($url);

【讨论】:

  • 这如何工作?我在查询页面上使用了 $_GET['zipcode'] 但我应该把函数代码放在哪里?
  • @PhilM 用一个例子更新了我的答案。应该做的伎俩。
  • 所以我应该把它放在生成 url 的 php 代码中?还是运行查询的下一页?
  • 在哪个页面上接收到 get 请求
猜你喜欢
  • 2017-03-31
  • 2023-03-13
  • 2020-06-17
  • 2012-01-21
  • 2017-03-03
  • 2022-10-23
  • 2011-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多