web-dev-qa-db-ja.com

デフォルト WP 特定の文字を除いて検索することは可能ですか?

Wordpressのデフォルトの検索モジュールをカスタマイズできるかどうかを知りたいのですが。私はチームとチームのニュースを扱うWebサイトです。

これらのチームの中には、名前が次のように書かれているものもあります。

  • H.M.S.
  • L.A.ドリーム
  • N.Y.インベーダー

私はHMS、またはLA Dreamのような文字列を探しても、検索モジュールが結果でそれらのチームを管理できることを望みます。ドットで文字を埋める代わりに、またはNY。誰かがいくつかの提案を持っていますか、または現時点で私が気づいていないというWPトリックを知っていますか?

前もって感謝します

2
axel

検索語Dotifier:

これは、requestフィルタを使用して、ドットを含まない2文字または3文字の「ドット付き」単語を現在の検索語に追加するというアイデアです。

だからあなたの検索文字列が例えばであれば:

LAの夢

それはになります:

LAの夢L.A.

これがデフォルトの検索を修正するデモプラグインです。

<?php
/**
 * Plugin Name: Search Terms Dotifier
 * Author:      birgire
 * Plugin URI:  http://wordpress.stackexchange.com/a/157972/26350
 * Version:     0.0.1
 */

add_filter( 'request', function( $request ) {
    if( ! is_admin() && isset( $request['s'] ) )
    {
        // Dont' dotify these words (lower case):
        $exclude = array( 'the', 'in', 'it', 'he', 'she', 'was' );

        // Loop over search terms:
        $words = explode( ' ', $request['s'] );
        foreach( (array) $words as $Word )
        {
             // Words with two or three chars that don't contain any dots:
             if( mb_strlen( $Word ) > 1
                 && mb_strlen( $Word ) < 4 
                 && false === strpos( $Word, '.' ) 
                 && ! in_array( mb_strtolower( $Word ), $exclude, true ) 
             )
             {
                 // Append the 'dotted' Word:
                 $words[] = join( '.', str_split( $Word ) ) . '.';
             }
         }
         $request['s'] = join( ' ', $words );
    }
    return $request;
});

あなたはうまくいけばあなたのニーズにこれをさらに拡張することができます。

0
birgire