2017-04-10 5 views
1
  • Ich muss das Wort Presse grundlegenden Suchfilter anpassen.
  • Es funktioniert gut Suche nach Stichworten in Post-Titel und Post-Inhalt.
  • Jetzt muss ich Ergebnisse zeigen, wo, wenn Benutzer den Namen der Kategorie Name eingeben, dann sollte es Ergebnisse aus dieser Kategorie sowie als andere Ergebnisse ziehen.
  • Ich nehme an, es sollte etwas wie LIKE-Klausel für die Kategorie category_name oder category_in Operatoren in Steuer Abfrage sein.Wie suchen Beiträge mit LIKE für Kategorie Name in WordPress?

     
    
    
    $args = get_posts(array(
          'fields' => 'ids', 
          'post_type' => 'post', 
          'post_status' => 'publish', 
          'posts_per_page' => -1, 
          's' => $_REQUEST['s'] ? $_REQUEST['s'] : '' , 
          'tax_query' => array(
           array(
           'taxonomy' => 'NAME OF TAXONOMY', 
           'field' => 'slug', 
           'terms' => 'SLUG OF the TERM', // LIKE (here should be any LIKE clause etc) 
           ), 
          ) 
         )); 
    

    Wie dieses Szenario zu erreichen, bedeutet, wenn der Benutzer einen Suchbegriff passende den Kategorienamen trägt sie zusammen mit allgemeinen Suchergebnissen alle Ergebnisse aus dieser Kategorie ziehen sollten.

Beispiel: In Suchleiste Benutzern schreiben „ABC“ und es gibt Kategorie verfügbar mit dem Namen „ABC Park“, dann sollte es Ergebnisse aus dieser Kategorie zieht zusammen mit den Ergebnissen Post-Titel mit und Inhalte, die "ABC" enthalten.

+0

http://wordpress.stackexchange.com/a/18715 –

+0

http://wordpress.stackexchange.com/a/173752 –

+0

@AlivetoDie Bei diesen Links geht es nicht um die Suche nach Kategorienamen ähnlich dem Suchbegriff. Sehen Sie sich auch die bearbeitete Frage an. Vielen Dank. –

Antwort

1

Okay ... Ich komme mit einer Lösung, ich habe alle Kategorie IDs aus Tabelle terms mit einer LIKE-Abfrage abgerufen, dann in anderen Abfrage dieses Array als Kategorie Parameter übergeben. Hier ist der Code.

$term_ids=array(); 
     $cat_Args="SELECT * FROM $wpdb->terms WHERE name LIKE '%".$_REQUEST['s']."%' "; 
     $cats = $wpdb->get_results($cat_Args, OBJECT); 
     array_push($term_ids,$cats[0]->term_id);  



$q1 = get_posts(array(
     'fields' => 'ids', 
     'post_type' => 'post', 
     'post_status' => 'publish', 
     'posts_per_page' => -1, 
     's' => $_REQUEST['s'] ? $_REQUEST['s'] : '' 

)); 
$q2 = get_posts(array(
     'fields' => 'ids', 
     'post_type' => 'post', 
     'post_status' => 'publish', 
     'posts_per_page' => -1, 
     'category' =>$term_ids 
)); 
$unique = array_unique(array_merge($q1, $q2)); 

$posts = get_posts(array(
    'post_type' => 'post', 
    'post__in' => $unique, 
    'posts_per_page' => -1 
)); 
    if ($posts) : 

foreach($posts as $post) : 
//show results 
endforeach; 
endif; 

Aber noch möchte ich eine minimalere und genauere Art und Weise. :)

Verwandte Themen