Ich habe einen benutzerdefinierten Beitragstyp namens "Knoten" registriert.
Wenn ich eine einfache WP_Query erstelle, um Beiträge dieses Typs abzurufen, funktioniert dies einwandfrei. Beispiel:
$args = array(
'post_status' => 'publish',
'post_type' => 'node');
$query = new WP_Query($args);
Dadurch werden alle veröffentlichten Beiträge vom Typ "Knoten" abgerufen.
Sobald ich dies jedoch mit einer Suche kombiniere, wird nichts zurückgegeben. Beispiel:
$args = array(
'post_status' => 'publish',
'post_type' => 'node',
's' => 'My search term');
$query = new WP_Query($args);
Dies wird nichts bekommen, obwohl es mehrere Beiträge vom Typ 'Knoten' bekommen sollte, die 'Mein Suchbegriff' enthalten.
Soweit ich sehen kann, werden die Beitragstypen automatisch auf "Beitrag" und "Seite" gesetzt, sobald ich den Parameter "s" in $ args einbinde. Wenn ich einen var_dump von $ query ausdrucke, wird Folgendes angezeigt:
Ohne "s":
object(WP_Query)
public 'query' =>
array (size=2)
'post_status' => string 'publish' (length=7)
'post_type' => string 'node' (length=4)
public 'query_vars' =>
array (size=63)
'post_status' => string 'publish' (length=7)
'post_type' => string 'node' (length=4)
...
Mit "s":
object(WP_Query)
public 'query' =>
array (size=2)
'post_status' => string 'publish' (length=7)
's' => string 'My search term' (length=14)
'post_type' => string 'node' (length=4)
public 'query_vars' =>
array (size=66)
'post_status' => string 'publish' (length=7)
's' => string 'My search term' (length=14)
'post_type' =>
array (size=2)
0 => string 'post' (length=4)
1 => string 'page' (length=4)
...
Wordpress scheint also die Beitragstypen zu überschreiben, sobald eine Suche durchgeführt wird.
Wie kann ich das beheben?
quelle
Antworten:
Sie haben Recht, ich habe es in einer sauberen Wordpress-Installation versucht und es funktioniert.
Es scheint, als würde sich eines der Plugins, die ich in meiner Umgebung verwende, in eines der Ereignisse vor der Abfrage einbinden.
Vielen Dank!
quelle
Bei einer Standardinstallation von WordPress ist WP_Query standardmäßig
post_type
='post'
.Betrachten Sie dieses einfache Beispiel:
Es wird die folgende Abfrage ausgeführt:
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1=1 AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') ORDER BY wp_posts.post_date DESC LIMIT 0, 5
DIE BESTE LÖSUNG
Die Lösung besteht darin, ein
post_type
Argument hinzuzufügen , das auf gesetzt ist'any'
. Auf diese Weise sucht WordPress automatisch zwischen allen Typen mit Ausnahme von Revisionen und Typen, auf dieexclude_from_search
gesetzt isttrue
. Problem Standardmäßig werden Anhänge nicht von der Suche ausgeschlossen. Solange Sie keinpost_status
Argument auf gesetzt haben'inherit'
, sollten Sie sich nicht ärgern, da Anhänge immer aufpost_status
gesetzt sind'inherit'
.Auf diese Weise ändert sich die Abfrage in:
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1=1 AND wp_posts.post_type IN ('post', 'page', 'attachment') AND (wp_posts.post_status = 'publish' OR wp_posts.post_author = 1 AND wp_posts.post_status = 'private') ORDER BY wp_posts.post_date DESC LIMIT 0, 5
Bei Bedarf können Sie Anhänge mithilfe dieses Codes von der Suche ausschließen:
quelle
Ich weiß, dass dies eine sehr alte Frage ist, aber ich bin darauf gestoßen, weil ich das gleiche Problem hatte. Ich kann wegen des guten Rufs keine Kommentare abgeben, aber ich möchte Leuten wie @Stefano helfen, damit Sie nicht alle Plugins durchgehen und prüfen müssen, welches die Änderung an der Abfrage verursacht.
Für mich war es ein Plugin namens " Custom Search by BestWebSoft ". Aber es war nicht der Fehler des Plugins, ich hatte das Kästchen für meinen benutzerdefinierten Beitragstyp in den Einstellungen einfach nicht angekreuzt.
quelle