如何将404个URL分解为单个单词并搜索它们?

时间:2012-01-19 21:34:57

标签: php html wordpress

我正在使用我的网页找不到404模板。出于某种原因,我的条件似乎不正常:

我想要实现的是打破路径并搜索每个表达式。 我从表达式中删除了 - 和_。

$s = preg_replace("/(.*)-(html|htm|php|asp|aspx)$/","$1",$wp_query->query_vars['name']);
            $posts = query_posts('post_type=any&name='.$s);
            $s = str_replace("-"," ",$s);
            $s = str_replace("_"," ",$s);
            if (count($posts) == 0) {
                $posts = query_posts('post_type=any&s='.$s);
            }
            if (count($posts) > 0) {
                echo "<ol><li>";
                echo "<p>Were you looking for <strong>one of the following</strong> posts or pages?</p>";               
                echo "<ul>";
                foreach ($posts as $post) {
                    echo '<li><a href="'.get_permalink($post->ID).'">'.$post->post_title.'</a></li>';
                }
                echo "</ul>";
}

如果我输入“products_s”

它说:

  

让我帮你找到你来这里的:你在寻找吗?   以下帖子或页面之一?   的产品

所以它找到了很棒的产品。

但如果我输入“products_services”

即使我希望获得上面列出的产品和服务页面,它也找不到任何东西。

我错过了什么?

谢谢,

2 个答案:

答案 0 :(得分:0)

我从未使用过wordpress,但我注意到你更改了queryposts()

在第一次检查中,您执行以下操作:

$posts = query_posts('post_type=any&name='.$s); //notice &name=

在第二次检查中,您执行以下操作:

$posts = query_posts('post_type=any&s='.$s); // notice &s=

这完全取决于queryposts()内发生的事情。就个人而言,我只是将字符串传递给另一边的'_'' - '和explode('-',$string),将它们分成一个数组。

答案 1 :(得分:0)

它不适合你的原因是因为Wordpress的搜索仅返回符合查询中所有单词的帖子。因此,“products_s”变成“产品”,“产品”和“s”都在产品中。所以产品会被退回。 “products_ducts”将返回相同的页面。

如果您有一个名为“产品和服务”的页面,则会在第二次搜索时获得结果。

也许您可以在空格处拆分字符串并搜索每个单词并将结果相互追加。