2016-08-04 12 views
0

Ich habe tausend von Woocommerce-Produkt in meiner Website und meine Wordpress-Suche arbeitet sehr langsam. Damit ich habe versucht, nur in Titel suchen meine Suche zu beschleunigen, und ich fand dies:Wordpress Suche nur Titel (Aber nicht genau)

function __search_by_title_only($search, $wp_query) 
{ 
global $wpdb; 

if (empty($search)) 
return $search; // skip processing - no search term in query 

$q = $wp_query->query_vars; 
$n = ! empty($q['exact']) ? '' : '%'; 

$search = 
$searchand = ''; 

foreach ((array) $q['search_terms'] as $term) { 
$term = esc_sql(like_escape($term)); 

$search .= "{$searchand}($wpdb->posts.post_title REGEXP '[[:<:]]{$term}[[:>:]]')"; 

$searchand = ' AND '; 
} 

if (! empty($search)) { 
$search = " AND ({$search}) "; 
if (! is_user_logged_in()) 
$search .= " AND ($wpdb->posts.post_password = '') "; 
} 

return $search; 
} 

add_filter('posts_search', '__search_by_title_only', 1000, 2); 

Aber es genau das Wort sucht mit Groß-/Klein empfindlich und ich möchte nicht, dass. Zum Beispiel habe ich ein Produkt mit dem Namen "795PA" und als ich "795pa" durchsucht habe, gibt es kein Ergebnis zurück. Wie kann ich das beheben? Ideen?

+0

Haben Sie versucht, während der Suche alles in Kleinbuchstaben zu konvertieren? – flomei

+0

Danke für den Vorschlag, aber einige meiner Post Titel Großbuchstaben und einige Kleinbuchstaben kann ich nicht verwenden. – exspet

Antwort

0

Ich kann den Unterschied nicht sehen, aber dieser kleine Code hat mein Problem behoben. Hier ist das Update:

//Limit Search to Post Titles Only 
function ni_search_by_title_only($search, &$wp_query) 
{ 
    global $wpdb; 
    if (empty($search)) 
     return $search; // skip processing - no search term in query 
    $q = $wp_query->query_vars; 
    $n = ! empty($q['exact']) ? '' : '%'; 
    $search = 
    $searchand = ''; 
    foreach ((array) $q['search_terms'] as $term) { 
     $term = esc_sql(like_escape($term)); 
     $search .= "{$searchand}($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')"; 
     $searchand = ' AND '; 
    } 
    if (! empty($search)) { 
     $search = " AND ({$search}) "; 
     if (! is_user_logged_in()) 
      $search .= " AND ($wpdb->posts.post_password = '') "; 
    } 
    return $search; 
} 
add_filter('posts_search', 'ni_search_by_title_only', 500, 2); 

Ich weiß nicht, kann ich Links teilen, aber nathan ingram dass geteilt.