it-swarm.com.de

Wie paginiere ich Suchergebnisse für benutzerdefinierte Beitragstypen?

Ich habe einen benutzerdefinierten Beitragstyp namens "Autos", in dem mehrere benutzerdefinierte Felder zusammen mit den Standardfeldern für Titel/Beschreibung gespeichert sind. Ich benötige Benutzer, die in der Lage sind, das CPT anhand der benutzerdefinierten Felder zu durchsuchen, die den Kriterien des Benutzers entsprechen. Ich habe diesen Teil herausgefunden und es funktioniert, aber das Problem ist die Paginierung. Ich habe herausgefunden, wie ich das CPT anhand des bei Google gefundenen Codes paginieren kann, und es funktioniert. Sobald Sie jedoch Seite 1 verlassen, werden die Suchdaten nicht mehr mit dem Formular übermittelt. Ich muss nur wissen, wie ich das aufbewahren oder weitergeben soll.

In normalen PHP würde ich nur eine Sitzung zum Speichern der Daten verwenden, aber mir wurde gesagt, dass ich das mit Wordpress nicht tun soll. Also, was ist die beste Option? Ich habe erfahren, dass Transients die WP -Version von Sitzungen sind, bin mir jedoch nicht sicher, wie ich sie effizient verwenden und für jeden Benutzer separat halten kann.

Ich bitte niemanden, das für mich zu schreiben - ich brauche nur Hilfe, um das beste Konzept dafür zu verstehen.

5
kcarter609

Nehmen Sie statt einer benutzerdefinierten Suchabfrage die benutzerdefinierten Felder in die Standardsuche auf und ordnen Sie /?post_type=cars&s=mysearchterm/search/cars/mysearchterm mithilfe von Umschreiberegeln zu. Oder verwenden Sie einfach die Abfragevariablen in der URL und nicht POSTname __/$_POST oder transiente Daten. GETname __/$_GET ist dein Freund hier.

Transienten sind dazu gedacht, Daten vorübergehend zu speichern, anstatt sie neu zu berechnen, z. RSS-Feeds und andere Dinge, deren Berechnung teuer ist und die möglicherweise keine dauerhafte Lebensdauer haben. Sie sind kein Ersatz für Sitzungen (noch sollten Sie Sitzungen oder ein anderes Analogon benötigen).

Dies sollte Ihnen zeigen, wie Sie die benutzerdefinierten Felder in der Suche bündeln:

http://stv.whtly.com/2010/03/15/extend-wordpress-search-to-include-custom-post-meta/

Testen Sie anhand von $wp->query_vars['s'] oder get_query_var( 's' ), ob Ihre Suchanfrage für Ihren Beitragstyp bestimmt ist, sodass Sie die benutzerdefinierten Metasuchbits unter bestimmten Bedingungen einschließen können.

credits: danke kaiser für den get_query_var tipp

6
Tom J Nowell

Ähnlich wie @TomJNowellAntwort .

Verwenden Sie bei Ihrer Suche $_GET anstelle von $_POST für Ihre Suchanfrage. Ihre Suchvariablen werden in der URL für Ihre benutzerdefinierte Paginierung von Seite zu Seite weitergegeben.

Die Verwendung von $_GET kann zu einer Sicherheitsverletzung führen. Stellen Sie sicher, dass Sie Ihre Variablen validieren oder bereinigen. WordPress hat eine Menge Dokumentation zu Datenvalidierung . Ansonsten lesen Sie das PHP Handbuch für weitere Methoden zur Validierung oder Desinfektion .

Was Ihre benutzerdefinierte Paginierung angeht, würde ich empfehlen, eine zusätzliche Variable in Ihrer URL festzulegen. Ich bin sicher, dass Ihre benutzerdefinierte Paginierung bereits eine Seitenzahl festlegt. So können Sie die Seitenzahl von Ihrer URL abrufen (z. B. $_GET['page']) und Ihren Abfrage-Offset für die Suchergebnisse anpassen.

Angenommen, Sie hatten eine URL-freundliche Paginierung zusammen mit der folgenden Konfiguration.

$number_posts = 10;// Numer of search results to display per page.
$current_page = $_SERVER['REQUEST_URI'];// Will return the current page values of your URL.
$sub_page = '/page/';// Current pagination page.
$using_pagination = strpos($current_page, $sub_page);// Check for paginated content.
if($using_pagination === false){
    /* Not using the pagination, get $number_posts with no offset. */
} else{
    $page_number = explode('/page/', $current_page);// Locate just the sub-page from the URL.
    $page_number = preg_replace('/\D/', '', $page_number[1]);// Get only the sub-page number from the URL.
    if(is_numeric($page_number)){
        /* Set the correct offset number, based on the number of search results to display. */
        $offset = ($page_number - 1) * $number_posts;
    }
    /* Using the pagination, get $number_posts, with an offset of $offset. */
}

Sie können den obigen Code für Ihre benutzerdefinierte Paginierung verwenden, um die richtigen Suchergebnisse zurückzugeben. Hinweis: Denken Sie daran, Sie müssten natürlich die Suchvariablen aus der URL entfernen, um die korrekten Suchergebnisse korrekt abzufragen.

1
Michael Ecklund