1. Herzlich willkommen bei WPDE.org, dem grössten und ältesten deutschsprachigen Community-Forum rund um das Thema WordPress. Du musst angemeldet oder registriert sein, um Beiträge verfassen zu können.
    Information ausblenden

WP_Query mit Suchbegriff

Dieses Thema im Forum "Plugins und Widgets" wurde erstellt von tomstar76, 4. Oktober 2013.

Schlagworte:
  1. tomstar76

    tomstar76 Member

    Registriert seit:
    2. Mai 2013
    Beiträge:
    20
    Zustimmungen:
    0
    Hallo Zusammen,

    ich möchte mittels WP_Query die Suchergebnisse (bzw. eigentlich die Anzahl der Suchergebnisse) für eine bestimmte Kategorie auslesen aber irgendwie klappt das nicht.

    Folgenden Code habe ich in meiner search.php derzeit im Einsatz:

    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Damit sollen für den aktuellen Suchstring ($s) alle Suchergebnisse bzw. Titel innerhalb der definierten Kategorie mit der ID 1 angezeigt werden.

    Allerdings wird leider nichts angezeigt. Es scheint also, ob er für die Abfrage nichts findet, wobei der verwendete Suchstring definitiv in einigen Posts aus der Kategorie vorhanden ist.

    Vielleicht hat jemand einen Tipp für mich.
     
  2. bgeissler

    bgeissler Well-Known Member

    Registriert seit:
    6. August 2006
    Beiträge:
    4.404
    Zustimmungen:
    0
    Auszug aus: http://codex.wordpress.org/Class_Reference/WP_Query
     
  3. tomstar76

    tomstar76 Member

    Registriert seit:
    2. Mai 2013
    Beiträge:
    20
    Zustimmungen:
    0
    Danke für den Tipp.

    Ich habe den showpost-Parameter durch posts_per_page ersetzt, allerdings findet er leider immer noch nichts. Die Abfrage scheint irgendwie immer leer zu sein.

    Auch wenn ich dem Such-Parameter einen festen Wert zuweise, der auch in Posts der jeweiligen Kategorie vorkommt, findet er nichts.
     
  4. Melewo

    Melewo Well-Known Member

    Registriert seit:
    8. Juli 2013
    Beiträge:
    3.097
    Zustimmungen:
    0
    Das wäre ein Ansatz, den Du nachgehen könntest.

    Ich habe jetzt nur einmal einige Zeilen in der search.php für einen kleinen Test geändert, somit ein anderer Ansatz, wobei sich das dann aber nur auf die ausgegebenen Suchergebnisse bezieht:

    Von:

    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    In:

    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Und erhalte als Ausgabe:

    5 Suchergebnisse für: Suchwort
     
  5. tomstar76

    tomstar76 Member

    Registriert seit:
    2. Mai 2013
    Beiträge:
    20
    Zustimmungen:
    0
    Also, die Anzahl der bzw. aller Suchergebnisse an sich habe ich soweit schon integrieren können und das funktioniert auch.

    Mir geht es jetzt darum, herauszufinden wie die Anzahl der Suchergebnisse für einzelne Kategorien ist. Deshalb wollte ich eben über WP_Query für meine drei fixen Kategorien die Anzahl der Suchergebnisse für den aktuellen Suchstring ermitteln.

    Aber mein Query scheint nie irgendwelche Ergebnisse zu enthalten.

    Das möchte ich letztlich erreichen:

    ---

    Insgesamt wurden 5 Ergebnisse zu dem Begriff XYZ gefunden

    Alle (5) | Kategorie 1 (2) | Kategorie 2 (3) | Kategorie 3 (0)
    |
    |-> und dort wird verlinkt auf die Suchergebnisse nur für diese Kategorie​

    ---

    Da ich mir jetzt nicht anders zu helfen wußte, war der Gedanke, dass ich eben für jede der 3 vorhandenen Kategorien (es wird auch nicht mehr geben) mittels WP_Query sowie der Parameter Suchstring ($s)und Kategorie-ID (cat) ermittle, wie hoch die Anzahl der Suchergebnisse für die jeweilige Kategorie denn ist.

    Das war der Ansatz dazu, der allerdings nie irgendwelche Ergebnisse liefert:

    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Vielleicht hat jemand auch einen ganz anderen Ansatz, der mir weiterhelfen könnte.
     
  6. Melewo

    Melewo Well-Known Member

    Registriert seit:
    8. Juli 2013
    Beiträge:
    3.097
    Zustimmungen:
    0
    Ich verstehe Dich schon, nur bin ich mir nicht einmal sicher, ob Du dafür ein neues Objekt new WP_Query() erzeugen musst oder einfach nur mit $query auf alle $query->query_vars zugreifen kannst. Beim Filtern der Sucheingaben habe ich das zumindest so gehandhabt. Nur dabei betraf es ja erst einmal nur s und mit s hat die search.php was zu tun? Die gibt doch wohl die Ergebnisse nur noch aus. Die Anfragen werden hingegen an / gesendet. Um s abzugreifen, gehört nach meiner Meinung die Funktion dafür in die functions.php.

    Deshalb würde ich das jetzt hier nur als mögliche Ansätze verstehen. Wobei s in einem neuen Ojekt nicht mehr das enthalten kann, was mit s an / gesendet wurde. Oder befinde ich mich jetzt auf einem Holzweg?
     
    #6 Melewo, 4. Oktober 2013
    Zuletzt bearbeitet: 4. Oktober 2013
  7. Melewo

    Melewo Well-Known Member

    Registriert seit:
    8. Juli 2013
    Beiträge:
    3.097
    Zustimmungen:
    0
    Falls Du kein neues Objekt instanziierst, sondern auf das vorhandene mit $wp_query zugreifst, dann erhältst Du bereits etwas. Hier einmal mit

    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Was ansonsten noch enthalten ist, könntest Du zum Beispiel mit print_r abfragen und da ist recht viel enthalten.

    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    <header class="page-header">

    Wobei aber was Du suchst leer bleibt.

    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
     
    #7 Melewo, 4. Oktober 2013
    Zuletzt bearbeitet: 4. Oktober 2013
  8. Melewo

    Melewo Well-Known Member

    Registriert seit:
    8. Juli 2013
    Beiträge:
    3.097
    Zustimmungen:
    0
    So, nun hätte ich einen möglichen Anfang für Dich und denke, dass ein neues Objekt instanziieren in diesem Fall nicht der richtige Weg ist. Verstehe ab und an auch noch nicht viel in dieser Richtung von WP, doch allgemein in OOP kann ja ein neues Objekt nur das enthalten, was Du an diesem übergibst als Werte für die Eigenschaften, insofern die Eigenschaften noch keine vordefinierten Werte enthalten.

    search.php:

    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Ausgabe:

    Nun brauchst Du das nur noch auszählen und für die Ausgabe aufbereiten. Plugins und Allgemein sind die beiden Namen der Kategorien, die Zahlen die IDs von den Posts mit Treffern.
     
    #8 Melewo, 4. Oktober 2013
    Zuletzt bearbeitet: 4. Oktober 2013
  9. Melewo

    Melewo Well-Known Member

    Registriert seit:
    8. Juli 2013
    Beiträge:
    3.097
    Zustimmungen:
    0
    Weil ich schon dabei war, habe ich mal noch ein etwas besseres Beispiel fertig gemacht:

    search.php:

    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Ausgabe:

     
  10. Melewo

    Melewo Well-Known Member

    Registriert seit:
    8. Juli 2013
    Beiträge:
    3.097
    Zustimmungen:
    0
    Noch einmal, weil in der For-Schleife fehlte noch eine if-Statement zur Überprüfung, ob die IDs auch zu einer Kategorie gehören, da sonst array_count_values eine Warnung auslöste. Da könnte aber im Einsatz ohnehin noch ein @ vorgesetzt werden.

    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Nun sollte es jedoch für den Anfang genügen.
     
    #10 Melewo, 4. Oktober 2013
    Zuletzt bearbeitet: 4. Oktober 2013
  11. tomstar76

    tomstar76 Member

    Registriert seit:
    2. Mai 2013
    Beiträge:
    20
    Zustimmungen:
    0
    Vielen Dank für deine Mühe.

    Allerdings ergeben deine Code-Beispiele (noch) nicht ganz das, was ich erreichen wollte - aber es kommt der Sache schon um einiges näher, als was ich bisher erreicht habe. Es wird zwar immer die korrekte Gesamt-Anzahl der Suchergebnisse angezeigt, aber es variiert dann von Seite zu Seite der Suchergebnisse die Anzahl der Suchergebnisse pro Kategorie und die Anzahl der Suchergebnisse pro Kategorie stimmt dann auch zum Teil nicht mehr.

    Es scheint so, dass sofern die Anzahl der Suchergebnisse geringer als die maximale Anzahl der Suchergebnisse pro Seite ist (bei mir sind es 5) dein Beispiel funktioniert.

    also zur Verdeutlichung:

    Auf der Suchergebnisseite Nr. 1 zum Suchbegriff xyz kommt raus: 3 Treffer in Kategorie A und 2 Treffer in Kategorie B

    Dann aber wenn ich innerhalb der Suchergebnis-Seiten weiterblättere ändert sich die Anzahl der Treffer pro Kategorie bzw. neue Kategorien kommen dazu.

    Unter http://test.energieundbau.de kann man (vorübergehend) die Problematik direkt auf der Website, um die es geht anschauen. Dazu einfach mal die Suchfunktion z. B. mit "lorem" (ergibt mehrere Suchergebnisse), "blub" oder "test" (ergibt 1 bzw. 2 Ergebnisse) füttern.
     
  12. Melewo

    Melewo Well-Known Member

    Registriert seit:
    8. Juli 2013
    Beiträge:
    3.097
    Zustimmungen:
    0
    Gut, dann muss das noch etwas weiter entwickelt werden. Stimmt bei "lorem" ein Ergebnis oder sind die alle fehlerhaft? Was ich beim Blättern gesehen habe, danach stimmte wohl eher nichts.

    Werde mich da wohl noch etwas mit beschäftigen, falls es die Zeit erlaubt.
     
  13. Melewo

    Melewo Well-Known Member

    Registriert seit:
    8. Juli 2013
    Beiträge:
    3.097
    Zustimmungen:
    0
    Habe jetzt nicht genügend Seiten in der Testumgebung bzw. "und" ist nicht gerade der ideale Suchbegriff, um mit Tests Abweichungen zu ermitteln. Müsste mir da erst einmal mehr Kategorien mit auffälligeren Suchwörtern zulegen.

    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Dann könnte man die Anzahl heruntersetzen und dann mit den Ergebnissen der Blätterseiten vergleichen, wo da was aus dem Ruder läuft. Alles andere wäre für mich jetzt beinahe so wie herumraten.
     
  14. Melewo

    Melewo Well-Known Member

    Registriert seit:
    8. Juli 2013
    Beiträge:
    3.097
    Zustimmungen:
    0
    Wobei diese Zeile nicht funktioniert:

    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Doch so:

    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    So langsam begreife ich das eine oder andere.
     
  15. Melewo

    Melewo Well-Known Member

    Registriert seit:
    8. Juli 2013
    Beiträge:
    3.097
    Zustimmungen:
    0
    Die für einen Halbwissenden mit Abstand einfachste Lösung fiel mir heute Morgen nach dem Erwachen ein. Nur "s" übernehmen und mit s die Datenbank erneut abzufragen. Dabei könnte SQL gleich entsprechend formuliert werden. Und dabei wird dann ja auch ein neues WP_Query Objekt erzeugt, was dann beinahe einen Sinn ergibt.

    $search = new WP_Query($search_query);
    http://codex.wordpress.org/Creating_a_Search_Page

    Die begonnene Variante muss aber ebenfalls funktionieren, denn die DB-Abfrage wurde ja bereits ausgeführt und ist abgreifbar.

    Wie hast Du das mit der Pagnitation bzw. mit der Blätterfunktion gelöst?
     
  16. Melewo

    Melewo Well-Known Member

    Registriert seit:
    8. Juli 2013
    Beiträge:
    3.097
    Zustimmungen:
    0
    Wenn ich jetzt die search.php ändere, um eine erneute Abfrage zu senden, dann ist die einfache Ausgabe erst einmal wieder relativ leicht realisierbar. Doch die ID lässt sich scheinbar nur über die Tabelle wp_term_relationships der ID einer Kategorie zuordnen und der ID der Kategorie müsste dann über der Tabelle wp_terms der Name einer Kategorie zugeordnet werden, falls ich das richtig verstehen sollte.

    Und wie müsste der SQL-Code aussehen, um so eine verknüpfte Anfrage an die DB zu senden? Da hätte ich wohl drei Tage zu tun, so fit bin ich in SQL nicht unbedingt.

    Die search.php sieht augenblicklich so aus:

    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
     
    #16 Melewo, 6. Oktober 2013
    Zuletzt bearbeitet: 6. Oktober 2013
  17. bgeissler

    bgeissler Well-Known Member

    Registriert seit:
    6. August 2006
    Beiträge:
    4.404
    Zustimmungen:
    0
    Überlesen,
    gelöscht.
     
  18. Melewo

    Melewo Well-Known Member

    Registriert seit:
    8. Juli 2013
    Beiträge:
    3.097
    Zustimmungen:
    0
  19. formateins

    formateins Gast

    SQL kann ich Dir nicht beibringen, aber mal mit einem JOIN gearbeitet? ;) Anonsten hier mal ein Denkanstoß:

    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Gültige compare-values findest Du im Codex. Ich hab sowas umgesetzt, aber im Rahmen eines Plugins und mit eigenen Queries, da hier Wordpress (respektive die abgewandelte ez-sql-Klasse) einfach Grenzen hat.
     
  20. Melewo

    Melewo Well-Known Member

    Registriert seit:
    8. Juli 2013
    Beiträge:
    3.097
    Zustimmungen:
    0
    Ja, heute, hatte ich ja schon längere Zeit vor mich da mal einzuarbeiten, doch vermutlich war das Beispiel gleich wieder etwas zu viel des Guten. Bisher ging das bei mir meist mit einer Tabelle ab, was ich so für den Eigenbedarf programmierte.

    Ich danke Dir für Deinen Denkanstoß.
     
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden