Ich versuche, Post - Meta in die Liste aufzunehmenWordPress Admin Panel Suche. Ich habe eine erneute Suche durchgeführt und festgestellt, dass ich den Filter "pre_get_posts" verwenden kann, um das Post-Meta in der Abfrage festzulegen. Also habe ich den folgenden Code geschrieben
function custom_search_query( $query ) {
if( is_admin() && $query->is_search) {
$custom_fields = array(
// put all the meta fields you want to search for here
["key" => "property-ref-code", "compare" => "LIKE"],
["key" => "property-status", "compare" => "="],
["key" => "price", "compare" => "="],
["key" => "rent-price", "compare" => "="],
["key" => "bedrooms", "compare" => "="],
);
$meta_query = $query->get("meta_query");
if (empty($meta_query))
{
$meta_query = array();
}
$meta_query[] = array("relation" => "OR");
foreach($custom_fields as $cf) {
$meta_query[] = array(
"key" => $cf["key"],
"value" => $query->query_vars["s"],
"compare" => $cf["compare"],
);
}
$query->set("meta_query", $meta_query);
}
}
add_filter( "pre_get_posts", "custom_search_query");
Dieser Code gibt jetzt nicht nur nichts zurückaber es bricht auch die WordPress-Suche. Was ich meine. Wenn Sie diesen Code deaktivieren, können Sie nach dem Titel des Beitrags suchen. Falls vorhanden, werden einige Ergebnisse zurückgegeben. Wenn Sie dann den Code aktivieren und nach dem Post-Titel suchen, wird nichts zurückgegeben. Grundsätzlich möchte ich Objekte nach Preis, Referenzcode usw. suchen, die Postmetafelder sind, die ich gemacht habe. Kann mir jemand helfen, die WordPress-Suche zu erweitern, wenn ich nach einer zu durchsuchenden Eigenschaft und den angegebenen meta_keys suche
Vielen Dank
Antworten:
-1 für die Antwort № 1Das Problem könnte sein, dass if (empty($meta_query_args))
Gibt immer true als zurück $meta_query_args
sind nicht definiert. So werden die eigentlichen meta_queries aus der Suche entfernt.
-1 für die Antwort № 2
function extend_admin_search( $query ) {
// Extend search for document post type
$post_type = "document";
// Custom fields to search for
$custom_fields = array(
"_file_name",
);
if( ! is_admin() )
return;
if ( $query->query["post_type"] != $post_type )
return;
$search_term = $query->query_vars["s"];
// Set to empty, otherwise it won"t find anything
$query->query_vars["s"] = "";
if ( $search_term != "" ) {
$meta_query = array( "relation" => "OR" );
foreach( $custom_fields as $custom_field ) {
array_push( $meta_query, array(
"key" => $custom_field,
"value" => $search_term,
"compare" => "LIKE"
));
}
$query->set( "meta_query", $meta_query );
};
}
add_action( "pre_get_posts", "extend_admin_search" );