【问题标题】:Cycle through a list of items to ensure a different slug?循环浏览项目列表以确保不同的 slug?
【发布时间】:2014-06-19 14:48:15
【问题描述】:

我知道以前有人这样做过。每当您在 Wordpress 中发布新的博客文章/页面时,您都可以看到它的示例,并且标题与现有页面/文章的标题相同。这是一个例子:

  • 一些页面蛞蝓
  • some-page-slug-1
  • some-page-slug-2

您将如何以编程方式(使用 PHP)处理使用给定列表提交“some-page-slug”的人。显然,您应该得到“some-page-slug-3”,但该代码是什么样的?出于某种原因,这让我无法理解。我假设,希望我错了,你必须使用 jQuery(或 vanilla js,等等),对吗?

【问题讨论】:

  • 先尝试研究和尝试一些东西。然后,我们可以帮助您处理无效的代码。
  • @nevermind 那行不通。如果存在 slug1、slug2 和 slug3 并且你去添加 slug1,如果你 +1 它将导致 slug2 也存在。尽管基于此,尽管您可以执行一个 while 循环来检查,并且每次它看到它存在时都会添加 1 直到它不存在,然后它会提交到数据库。
  • @MathewMacLean 我已经尝试过构建一些东西。如果您需要该代码,那就另当别论了,但是是的,我已经尝试过了。

标签: php slug


【解决方案1】:

这是一个可能的解决方案,例如他的评论中建议的Mathew MacLeans

$slug = 'slug';
$slugs = array('slug', 'slug-1', 'slug-2', 'slug-5');
$result = $slug;

$i = 1;
while(in_array($result, $slugs)) {
    $result = $slug . '-' . $i;
    ++$i;
}

// prints 'slug-3'
print $result;

当然,您必须将 in_array 替换为检查是否存在 slug 的函数。

演示

Try before buy

【讨论】:

  • 我喜欢你的,不知道他是用数组还是mysql?我会假设帖子将存储在数据库中。我发布了我的答案,但它只不过是伪代码。
  • @MathewMacLean 是的 - 他可以一次将该菜单级别的所有 slug 加载到一个数组中,然后像示例代码中那样检查它们(1 MySQL 请求),或者他可以尝试加载每个新的$result slug 并查看它是否存在(1…n MySQL 请求)。
  • 是的,我同意。你的方法效率更高
  • 这个数组对我有用,有很多原因,我喜欢它。我总是可以将 SQL 转储到一个数组中,这基本上就是我所做的。
【解决方案2】:

只是一些伪代码让你开始,但我相信这是你应该采取的路线。

$postTitle = <WhateverTheTitleIs>;
$result = mysql_query("SELECT id FROM mytable WHERE title = '$postTitle'");
if(mysql_num_rows($result) == 0) {
     // title not found, submit to database
} else {
    // title exists
    $postTitle = $postTitle + 1;   
}

现在,显然这不是 100% 正确的语法,但它应该不仅仅是为您指明您需要前进的方向。 :)

【讨论】:

  • 我没有尝试过上面的代码,但是通过简单地理解它,问题就在这里。正如我最初的问题所展示的那样,它不会循环通过标题/slugs 以确保“title + 1”不存在。
  • 你是对的。你总是可以在那里添加一个while循环。
猜你喜欢
  • 2016-08-08
  • 1970-01-01
  • 1970-01-01
  • 2018-12-13
  • 2020-10-14
  • 1970-01-01
  • 2020-06-07
  • 1970-01-01
  • 2020-01-02
相关资源
最近更新 更多