Man arbeitet mit $_REQUEST.
Wenn es sich anbietet und nicht auf die Datenbank zugegriffen werden soll, dann könnte man auch den Request, den Server und somit ebenso WP übergehen und mit DOM-Storage arbeiten. Die XML, welche durchsucht werden soll, ist wohl etwas zu groß dafür. Doch je nach Browser lassen sich 2 bis 4 und mehr MB als sessionStorage oder localStorage zwischenspeichern.
Das Beispiel versendet nur mit POST, wenn JavaScript deaktiviert ist. In allen anderen Fällen wird die Aktion POST nach Aufruf der Funktion sendeStorage durch den Eventhandler onsubmit mit return false abgebrochen. Mit sendeStorage wird dafür dann mit DOM-Storage gearbeitet.
Somit müsste es eigentlich möglich sein, bei Aufruf der Seite die XML in ein etwas sparsameres Format umzuwandeln, als Storage zu speichern und wenn jemand die Suche betätigt, durchsucht er nur noch die in seinem Browser als DOM-Storage gespeicherten Daten, ohne den Server mit einem Request zu belästigen. Da die Same Origin Policy nicht verletzt wird, sollte es eigentlich möglich sein, habe es nur noch nicht ausprobiert.
Ein einfaches Beispiel (ohne Suchfunktion) hatte ich vor längerer Zeit mal gefertigt, wobei auch ein Seitenwechsel erfolgen kann, nur nicht durch das Attribut action, sondern window.location: