Wie erstelle ich ein benutzerdefiniertes Suchformular und einen benutzerdefinierten Handler?

Ich versuche, eine Suche zu erstellen, die, je nachdem, welcher Benutzer in admin gewählt wird, entweder eine von mehreren externen API-Suchmethoden mit Benutzereingaben abfragt, alle Ergebnisse in der database speichert und sie dann anzeigt, oder sie sucht die benutzerdefinierten Tabellen in database sollte es auch vollständig in einem Plugin gekapselt sein. Ich habe bereits die Geschäftslogik, die das tut, ich habe Probleme, es an WP anzuschließen. Was wäre der beste Weg, dies zu erreichen?

Bearbeiten: Entschuldigung, es war wahrscheinlich ziemlich vage Frage, was ich habe ist eine App, die ich oben auf PHP-Framework gebaut, was ich tun möchte, ist es zu WP verschieben, das Problem ist, während die Logik selbst wird wenig Modifikation erfordern, habe ich keine Ahnung, wie man es mit WordPress über Plugin verbinden kann, im Wesentlichen, wie erstelle ich ein Formular mit Plugin und wie nehme ich Input von diesem Formular und leite es an die Logik, die diese Anfrage bearbeitet?

Solutions Collecting From Web of "Wie erstelle ich ein benutzerdefiniertes Suchformular und einen benutzerdefinierten Handler?"

Um das Suchformular zu ändern, filtern Sie get_search_form . Sie erhalten das Formular hier als Zeichenfolge, und Sie können es ändern, wie Sie benötigen.

 add_filter( 'get_search_form', function( $form ) { // Replace the form, add additional fields return $form; }); 

Um die Suchanfrage in die database zu ändern, filtern Sie posts_search . Sie erhalten die Abfrage als Zeichenfolge und das aktuelle WP_Query Objekt, das weitere Informationen bereitstellt. Siehe wp-includes/query.php für Kontext.

 add_filter( 'posts_search', function( $search_query, $wp_query ) { // change the SQL return $search_query; }, 10, 2 ); 

Wenn Sie die Suchabfrage nicht filtern möchten, ändern Sie das $_POST im Suchformular, Beispiel foo , und überprüfen Sie die $_POST Anfrage:

 if ( ! empty ( $_POST['foo'] ) ) { $global $wpdb; $results = $wpdb->get_results( /* custom sql */ ); }