webentwicklung-frage-antwort-db.com.de

nach Titeln von Anhängen nach Typ suchen

Ich habe eine Seite, auf der alle Anhänge einer Seite in einer Tabelle mit id=10 angezeigt werden.

Ich habe Hunderte von Anhängen und möchte ein AJAX Suchformular implementieren, das den Titel des Anhangs als Schlüssel für die Suche verwendet.

Tatsächlich liegt das Problem nicht in der Implementierung des Aufrufs AJAX, sondern in der Abfrage, die die Anhangsliste zurückgibt.

du fragst in vielleicht wie

<?php
$args = array( 'post_type' => 'attachment', 'numberposts' => -1, 'post_status' =>'any', 'post_parent' => 10 ); 
$attachments = get_posts($args);
if ($attachments) {
    foreach ( $attachments as $attachment ) {
        if('you title of image'==$attachment->post_title ){
              //your code goes here
        }
    }
}
?>

Wichtiger Link :

get_posts ()

Ajax-Suchformular

2
Ravinder Kumar

Sie sollten versuchen, die s (Suche) als Parameter für Ihre benutzerdefinierte Abfrage anzuwenden.

Sehen Sie dieses Beispiel hier:

$query = new WP_Query( 's=keyword' );

und Sie können dann eine normale Schleife anwenden, um Ihre Ergebnisse zu durchlaufen. Dies führt auch einen String-Abgleich durch, der mit dem Operator %keyword% identisch ist, den Sie im Kommentar für @Ravs 'Antwort erwähnt haben.

Siehe Dokumentation hier .

2
Rohit Pande

WP_Query macht standardmäßig nicht das, was Sie wollen. Wenn Sie versuchen, nach post_name zu suchen, erhalten Sie eine zu strenge post_name=-Abfrage. Wenn Sie den Parameter s verwenden, erhalten Sie eine %term%-Suche sowohl über den Beitragsnamen als auch über den Beitragsinhalt, und term stimmt an einer beliebigen Stelle im Word überein, nicht nur am Anfang. Und das ist zu weit gefasst für das, was Sie tun. Und s wird mit dem Hinzufügen von Begriffen immer weniger effizient, obwohl dies für Sie möglicherweise kein Problem darstellt.

Sie sagen, Sie möchten eine Übereinstimmung, wenn Sie die "ersten n" Buchstaben eingeben, also müssen Sie die Abfrage filtern. Das sollte es tun.

function search_filter_right_wild($search) {
  remove_filter('posts_where','search_filter_right_wild');
  global $wpdb;
  $pattern = "|{$wpdb->posts}.post_name = '([^']*)'|";
  $search = preg_replace($pattern,"{$wpdb->posts}.post_name LIKE '$1%'",$search);
  return $search;
}
add_filter('posts_where','search_filter_right_wild');

$q = new WP_Query( 
  array(
    'name' => 'test',
    'post_type' => 'attachment', 
    'numberposts' => -1, 
    'post_status' => 'inherit'
  ) 
);
var_dump($q->request);

Sie suchen nur nach dem Beitragsnamen und der Filter fügt einen % nur rechts hinzu, sodass die Platzhalterübereinstimmung nur rechts vom Begriff angezeigt wird.

Fügen Sie den Filter in Ihrem AJAX -Rückruf vor der Abfrage hinzu, und er wird automatisch entfernt (obwohl dieser letzte Teil wahrscheinlich nicht erforderlich ist).

2
s_ha_dum