Ich bin also auf ein Problem mit der WP-RAM-Nutzung gestoßen und suche nach einer Lösung.
Der einzige Ort, an dem ich dieses Problem wirklich auf meiner Site habe, ist eine Site Map-Seite, die ich zu füllen versuche. Eine Lösung für dieses Problem kann jedoch universell angewendet werden und die RAM-Nutzung auf einer gesamten Site einsparen.
Im Wesentlichen ist diese Site Map-Seite, die ich habe, eine Liste aller posts
und pages
auf meiner Site. Die einzigen Elemente der Variablen $ post, auf die ich auf dieser Seite zugreifen muss, sind der Titel und der Permalink. Leider gibt die von mir verwendete Abfrage alle Beiträge mit allen Informationen in jeder ihrer $ post-Variablen zurück.
Das folgende Beispiel zeigt eine Abfrage, die ich auf dieser Site Map-Seite für ein einzelnes custom-post-type
Produkt mit dem Namen "Produkte" mit einer benutzerdefinierten Taxonomie von "Ergänzungen" und dem Begriff "Alle Ergänzungen" verwende. Meine Site Map-Seite enthält mehrere solcher Abfragen, aber zu Erklärungszwecken füge ich nur den Code für diese einzelne Abfrage hinzu.
$varArray= array(
'post_type' => 'products',
'post_status' => 'publish',
'supplements' => 'all-supplements',
'posts_per_page' => -1,
'orderby' => 'title',
'order' => 'ASC'
);
$myProducts= new WP_Query($varArray);
Die große Mehrheit der Informationen, die in der Variablen $ post gespeichert sind (für meine Site, und ich vermute, dass dieser Trend für die allgemeine Verwendung gesehen wird), befindet sich im "Inhalt". Die typische RAM-Nutzung für meine Site Map-Seite beträgt ~ 140 MB (von Debug Bar gemeldet), während die Verwendung für jede andere typische Seite auf meiner Website 50-60 MB beträgt. Großer Unterschied. Gestern funktionierte die Site Map-Seite nicht mehr (WSOD), und um dies zu beheben, musste ich die maximale RAM-Größe erhöhen, die WP verwenden kann. Daher erhöhe ich die insgesamt erforderlichen Systemressourcen aufgrund einer einzelnen Seite.
So komme ich zu meiner Frage.
Gibt es irgendwo in Wordpress einen Pfad / eine Option, den ich vermisse, der eine normale Abfrage abruft posts
/ pages
mag, aber NICHT den Inhalt für abgerufene Beiträge erhält?
Oder gibt es alternativ eine einfachere Möglichkeit für mich, nur bestimmte Elemente innerhalb einer bestimmten Abfrage (Titel / Permaklink / Slug / etc ...) zu erfassen, anstatt die gesamte $ post-Variable shebang abzurufen?
Es scheint mir, dass für viele WP-Anwendungen der einzige Ort, an dem "der Inhalt" eines Posts / einer Seite normalerweise benötigt wird, auf dieser page
oder dieser post
Seite liegt (offensichtlich gibt es hier Ausnahmen) und dass der Zugriff auf den vollständigen Inhalt für Posts möglich ist / Seiten, die durch Abfrage auf anderen Seiten abgerufen werden, sind einfach übertrieben. Wenn es eine Möglichkeit gibt, das Laden des gesamten Inhalts für Postlistenseiten zu vermeiden, kann eine erhebliche Menge an RAM-Nutzung eingespart werden.
Jede Hilfe wäre dankbar.
quelle
Sie können versuchen, dies Ihrem Array hinzuzufügen:
Es scheint ziemlich selbsterklärend zu sein, aber im Grunde fragen Sie nicht alle Post-Variablen und nur das Zeug ab, das Sie brauchen.
quelle
Programmierer Dan, mah Mann!
Beginnen wir mit benutzerdefinierten
SELECT
Abfragen unter Verwendung der$wpdb
globalen. Der Codex bietet einen großartigen Eintrag zum Anzeigen von Posts mithilfe einer benutzerdefinierten Auswahlabfrage . Wenn Sie davon Gebrauch machensetup_postdata()
, können Sie die Ergebnisse so durchlaufen, als ob Sie in der Standard-Wordpress-Schleife sitzen:Diese Abfrage ruft nur die IDs, Titel und GUIDs der Posts ab (die zum Ermitteln des Permalinks eines Posts verwendet werden), während alles andere absolut ignoriert wird. Außerdem werden die Ergebnisse bis
post_type
dahin zuerst sortiertpost_title
, obwohl Sie möglicherweise mehrere Abfragen verwenden möchten, um Ihre Beitragstypen zu trennen (theoretisch bei einem kleinen Leistungstreffer).Natürlich möchten Sie möglicherweise auf die Verwendung verzichten
setup_postdata()
und diese einfach durchlaufen$sitemap_nodes
oder mit der Abfrage herumspielen, um die gewünschten Ergebnisse zu erhalten.Wenn Sie anrufen
setup_postdata()
und den Debug-Modus aktiviert haben, werden die Anrufe wahrscheinlich links und rechts Hinweise auf (absichtlich) fehlende Informationen ausspucken. Möglicherweise möchten Sie@
vor dem Funktionsaufruf ein auslösen, um sie zu unterdrücken, nachdem Sie bestätigt haben, dass Ihre benutzerdefinierte Abfrage ordnungsgemäß funktioniert.Aber das sollte Ihnen den Einstieg erleichtern! In dem folgenden Datenbankdiagramm (auf der Seite Datenbankbeschreibung im Codex) finden Sie die Felder, die Sie abfragen müssen:
quelle
WP_Query hat einen Parameter "Rückgabefelder", der folgendermaßen aussieht:
Auf diese Weise gibt WP_Query nur die Post-IDs zurück, nicht das gesamte Post-Objekt. Dann können Sie einfach verwenden Sie die
get_permalink()
,get_the_title()
und andere Funktionen sortiert Wordpress Ihre Inhalte auf der Basis der Post - ID abzurufen.quelle
get_post()
, um vollständige Daten abzurufen, und somit den Zweck des Abrufs von IDs allein vollständig zunichte machen.