Zurückgegebene WordPress-Felder von WP_Query- oder ‘get’-Funktionen einschränken
Lesezeit: 4 Minuten
niesz
Versuchen Sie, die zurückgegebenen Felder einer WP-Abfrage zu begrenzen, um die Antwort vom Server zu beschleunigen und die Menge der abgerufenen Daten zu reduzieren. Für die von mir verwendete Abfrage werden nur bis zu 3 Datenfelder benötigt, der Rest wird über ACF get_field_object in die Schleife eingebracht. Andere Funktionen, die ich verwende, wie get_posts oder get_terms, haben Feldoptionen, sind aber auf eine kleine Anzahl von Dingen beschränkt, wie z. B. nur ‘slug’ oder ‘id => slug’.
Ich bin es gewohnt, in CakePHP zu entwickeln, das die Option hat, jedes einzelne zurückzugebende Feld anzugeben, aber das Projekt erfordert WordPress für andere Funktionen, und daher bin ich ziemlich eingeschränkt.
TL;DR muss das Abrufen von Posts von WordPress beschleunigen
Was sind die Felder? Sind sie alle kundenspezifisch?
– rnevius
17. Oktober 2014 um 8:17 Uhr
Die Felder, die ich einschränken möchte, sind diejenigen, die standardmäßig vorhanden sind, wie “post_content”, “guid”, “post_modified” usw.
– niesz
17. Oktober 2014 um 8:20 Uhr
mögliches Duplikat von Fetch Selected Fields in WP_Query Class in WordPress
– rnevius
17. Oktober 2014 um 8:41 Uhr
Ich stelle vielleicht die gleiche Frage, die Sie oben zitiert haben, aber die für ihn bereitgestellte Antwort entspricht nicht meinen Bedürfnissen. Seine Antwort bot eine Möglichkeit, auf „Titel“ und „Beschreibung“ zuzugreifen, nachdem sie von der WP_Query zurückgegeben wurden. Auf der anderen Seite suche ich speziell alle anderen Daten aus der Rückgabe in der Abfrage zu entfernen, außer einigen wenigen. Mit der Absicht, die zurückgesendete Datenmenge zu reduzieren.
Ich habe den Feldparameter in der Abfrage verwendet und get posts für diese Abfrage ausgeführt. Zum Beispiel: In meinem Fall musste ich nur die Post-IDs für mehrere Kategorien abrufen, also habe ich eine Abfrage wie diese erstellt:
$posts erhält nur die IDs von Posts bestimmter Kategorien.
Oder es kann auch auf die übliche und beliebte Weise erfolgen, dh durch Ausführen der Schleife von have_posts:
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
$post_id_array[] = get_the_ID();
}
}
Dies sind die beiden Möglichkeiten, um die Antwort vom Server zu beschleunigen und die Menge der abgerufenen Daten zu reduzieren
rnevius
WP_Query wird Objekte zurückgeben … also ist es ziemlich schnell. Wenn Sie jedoch wirklich einschränken möchten, was zurückgegeben wird, können Sie dies mit dem tun Rückgabefeldparameter von WP_Query.
Ich habe mir das angesehen, obwohl es leider nur 3 Optionen bietet, die etwa 1 oder 2 Felder zu wenig von dem sind, was ich abrufen muss.
– niesz
17. Oktober 2014 um 8:42 Uhr
jer0dh
Dies habe ich getan, um die Felder von WP_Query einzuschränken, insbesondere wenn ich sie json_encoden möchte. Das $return Die Variable enthält mein Array von Posts mit nur den Feldern, die in der aufgelistet sind $fields Reihe.
$query = new WP_Query( array( 'post_type' => 'my_custom_type' ) );
$return = array();
$fields = array('post_title', 'ID'); //list of fields I want in $return
$posts = $query->get_posts();
foreach($posts as $post) {
$newPost = array();
foreach($fields as $field) {
$newPost[$field] = $post->$field;
}
$return[] = $newPost;
}
Dies optimiert die Abfrage nicht, Sie könnten mit einer einfachen Array-Map leicht erreichen, was Sie tatsächlich tun
– max
20. August 2021 um 19:20 Uhr
Ich weiß nicht, wie viel es helfen wird, aber unten ist, wie ich ein abgeflachtes Array von einem CPT bekomme. Es ist nicht das schnellste, aber es könnte schlimmer sein. Ich verwende ACF, um ein benutzerdefiniertes Feld zu erhalten, aber Sie könnten einfach den Slug zurückbekommen, oder Sie könnten stattdessen mehrere Felder zurückbekommen:
// Query Jobs Args
$query_args = array(
'post_type' => 'job',
'posts_per_page' => -1,
'fields' => 'ids'
);
// Get Jobs Query
$query = new WP_Query($query_args);
// Loop Persistent Vars
$job_ids = array();
// Loop Over Jobs
foreach($query->posts as $post_id) {
$job_ids[] = get_field('job_id', $post_id);
}
// Do stuff with flattened array of job ids
Interessanterweise können Sie dies mit der WP Rest API mit dem Parameter _fields tun
Was sind die Felder? Sind sie alle kundenspezifisch?
– rnevius
17. Oktober 2014 um 8:17 Uhr
Die Felder, die ich einschränken möchte, sind diejenigen, die standardmäßig vorhanden sind, wie “post_content”, “guid”, “post_modified” usw.
– niesz
17. Oktober 2014 um 8:20 Uhr
mögliches Duplikat von Fetch Selected Fields in WP_Query Class in WordPress
– rnevius
17. Oktober 2014 um 8:41 Uhr
Ich stelle vielleicht die gleiche Frage, die Sie oben zitiert haben, aber die für ihn bereitgestellte Antwort entspricht nicht meinen Bedürfnissen. Seine Antwort bot eine Möglichkeit, auf „Titel“ und „Beschreibung“ zuzugreifen, nachdem sie von der WP_Query zurückgegeben wurden. Auf der anderen Seite suche ich speziell alle anderen Daten aus der Rückgabe in der Abfrage zu entfernen, außer einigen wenigen. Mit der Absicht, die zurückgesendete Datenmenge zu reduzieren.
– niesz
17. Oktober 2014 um 8:51 Uhr
Sie haben 3 Rückgabeoptionen: „all ids, id=>parent“ Entwicklerdokumentation: developer.wordpress.org/reference/classes/wp_query/…
– gtamboro
5. Januar um 10:52