Warum erzeugt `get_permalink ()` eine Addition? databaseanfrage ohne $ post-> filter?

Ich arbeite gerade an einer benutzerdefinierten Schleife / Abfrage, wo ich den Permalink eines Beitrags zu dem Array von Posts hinzufügen muss, die ich aus der database abrufe.

Leider erzeugt get_permalink() eine zusätzliche DB-Anfrage für jeden Anruf, was sehr intensiv werden kann, da ich alle Beiträge auf einer Seite aufliste.

Ich dachte zuerst, dass es Aufrufe an get_option( 'permalink_structure' ); oder get_option( 'default_category' ); sind keine automatisch geladenen Optionen, aber beide sind automatisch geladen. Beweis hier:

 function wpse_list_autoloaded_opts() { $results = $wpdb->get_results( " SELECT option_name, option_value FROM $wpdb->options WHERE autoload = 'yes' " ); echo '
'; foreach( $results as $result ) if ( 'permalink_structure' === $result->option_name OR 'default_category' === $result->option_name ) echo "Name: {$result->option_name}, Value: {$result->option_value}
"; echo '
'; } add_action( 'shutdown', 'wpse_list_autoloaded_opts' ); 

EDIT: Ok, ich habe es geschafft, es in die folgenden Zeilen innerhalb der function get_permalink() .

 if ( is_object($id) && isset($id->filter) && 'sample' == $id->filter ) { $post = $id; $sample = true; } else { $post = &get_post($id); $sample = false; } 

Also mein Q ist jetzt: Wie würde ich vermeiden, den else Teil get_post() , der get_post() und die zusätzliche Abfrage get_post() ?


EDIT 2: Jetzt herausgefunden, dass der docBlock von get_permalink() genauso falsch ist wie der Codex . Sie können auch das gesamte $post Objekt an die function übergeben. Dies triggers den if ( is_object($id) .

Immer noch offen: Woher zum Teufel würde ich $post->filter mit einem Wert von 'sample' abrufen?


EDIT 3: Hinzufügen von $post->filter = 'sample' zu jedem Post-Objekt triggers das Problem. Aber was bleibt, ist ein schlechtes Gefühl, dass ich etwas kaputt machen könnte. Das 'sample' in $id/$post->filter scheint ziemlich seltsam zu sein und ich kann nicht herausfinden, woher es kommt.

Solutions Collecting From Web of "Warum erzeugt `get_permalink ()` eine Addition? databaseanfrage ohne $ post-> filter?"