2012-01-19 9 views
0

私の404ページが見つかりませんでした。何らかの理由で私の条件が正しく動作していないようです:404のURLを単一の単語に分解して検索するにはどうすればよいですか?

私が達成しようとしているのは、パスを分解して各式を検索することです。 式から - と_を削除します。

$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」

を入力するとそれは言う:あなたは、次の記事やページの 1を探していた:私はあなたがのためにここに来たものを見つける手伝いをさせて中

を? 製品

だから、それは偉大である、製品を検索します。

しかし、私は、私は上記のように記載された製品やサービスのページを取得するために期待していたとしても、「products_services」

を入力した場合、それが何かを見つけていません。

私には何が欠けていますか?

おかげで、

答えて

0

私はワードプレスを使用したことがないが、私はあなたがチェックし、あなたが最初にqueryposts()

を変更気づくん:秒で

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

はあなたがチェックします。

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

それはすべてqueryposts()の内部で何が起こっているかによって異なります。個人的には、文字列を '_' ' - 'と他の側のexplode('-',$string)で渡して配列に分割します。

0

Wordpressの検索では、クエリ内のすべての単語に一致する投稿のみが返されるため、それがうまくいかない理由があります。したがって、「products_s」は「products s」に変わり、「products」と「s」は両方とも「製品」となります。したがって、商品が返品されます。 "products_ducts"は同じページを返します。

[製品とサービス]という名前のページがある場合は、2回目の検索で結果が得られます。

おそらく、スペースで文字列を分割し、各単語の検索を実行して、結果を互いに追加することができます。

関連する問題