Zurückgegebene WordPress-Felder von WP_Query- oder ‘get’-Funktionen einschränken

Lesezeit: 4 Minuten

Benutzer-Avatar
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.

    – 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

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:

$the_query = new WP_Query( array( 
                        'ignore_sticky_posts' => 1,
                        'posts_per_page'      => -1,
                        'cat'                 => '2,6,7' ,
                        'fields'              => 'ids',
                        'post_type'           => 'post',
                        'post_status'         => 'publish', 
                                ) 
                        );

Führen Sie get_posts für diese Abfrage aus:

$posts = $the_query->get_posts();

$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

Benutzer-Avatar
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


Benutzer-Avatar
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

https://yoursite.com/wp-json/wp/v2/posts?_fields=author,id,excerpt,title,link

Mehr Infos zur API hier: https://developer.wordpress.org/rest-api/

1371390cookie-checkZurückgegebene WordPress-Felder von WP_Query- oder ‘get’-Funktionen einschränken

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy