Wie kann das Wort “class” bei der Suche ausgeschlossen werden?

Ich möchte das Wort “class” von der Übereinstimmung mit dem Suchbegriff “lass” ausschließen.

Auf einer Seite, die ich helfe, ist der Suchbegriff “Lass” ziemlich prominent. Leider entspricht dies der üblichen Verwendung von “class” innerhalb des Inhalts vieler, vieler WP-Posts, was viele irrelevante Ergebnisse liefert. Ich möchte jedoch immer noch Beiträge mit dem Wort “class” als mögliche Übereinstimmungen sehen, ich möchte nur nicht, dass “Lass” mit “class” übereinstimmt.

Hier sind drei mögliche Beiträge:

1. Image Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsum et veritatis pariatur deleniti excepturi beatae voluptatum aspernatur voluptates rerum numquam. 2. Image Lass is lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsum et veritatis pariatur deleniti excepturi beatae voluptatum aspernatur voluptates rerum numquam. 3. Lass is lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsum et veritatis pariatur deleniti excepturi beatae voluptatum aspernatur voluptates rerum numquam. 

Wenn ich nach “Mädchen” suchen würde, möchte ich, dass Ergebnisse 2 und 3 zurückgegeben werden, aber nicht Ergebnis 1.

Ich habe die ausgezeichneten Ergebnisse in diesen beiden Fragen gesehen, aber sie haben nicht alles erfüllt, wonach ich gesucht habe. Irgendwelche Vorschläge würden geschätzt werden.

Solutions Collecting From Web of "Wie kann das Wort “class” bei der Suche ausgeschlossen werden?"

Sie könnten versuchen, den posts_search Filter zu verwenden, wie von @Kaiser im ersten von Ihnen bereitgestellten Link elegant vorgeschlagen. Hier ist eine Idee:

 function filter_search($sql){ global $wpdb; if( strpos(get_query_var("s"),"lass") !== false AND strpos(get_query_var("s"),"class") === false ){ $sql .= " AND {$wpdb->posts}.post_title NOT LIKE '%class%'"; $sql .= " AND {$wpdb->posts}.post_content NOT LIKE '%class%'"; } return $sql; } add_filter( 'posts_search', 'filter_search'); 

Überprüfen Sie, ob der Suchbegriff lass und nicht class und ändern Sie dann die Suchabfrage, um die class auszuschließen.

Die Änderung in der SQL wird wie folgt aussehen:

Vor:

 AND (((wp_posts.post_title LIKE '%lass%') OR (wp_posts.post_content LIKE '%lass%'))) 

Nach:

 AND (((wp_posts.post_title LIKE '%lass%') OR (wp_posts.post_content LIKE '%lass%'))) AND wp_posts.post_title NOT LIKE '%class%' AND wp_posts.post_content NOT LIKE '%class%' 

Aktualisieren:

Du kannst es versuchen

  function filter_search($sql){ global $wpdb; if( strpos(get_query_var("s"),"lass") !== false AND strpos(get_query_var("s"),"class") === false ){ $sql .= " AND ( {$wpdb->posts}.post_content LIKE 'lass %'"; $sql .= " OR {$wpdb->posts}.post_content LIKE '% lass %'"; $sql .= " OR {$wpdb->posts}.post_content LIKE '% lass' )"; } return $sql; } add_filter( 'posts_search', 'filter_search'); 

Wenn Sie das genaue Wort lass im Post-Inhalt lass möchten.