Natknąłem się więc na problem z używaniem WP RAM i szukam rozwiązania.
Jedynym miejscem, w którym naprawdę mam ten problem na mojej stronie, jest strona mapy witryny, którą próbuję wypełnić, ale rozwiązaniem tego problemu może być uniwersalne zastosowanie i oszczędność pamięci RAM w całej witrynie.
Zasadniczo ta strona mapy witryny, którą mam, jest listą wszystkich posts
i pages
na mojej stronie. Jedynymi elementami zmiennej $ post, do których potrzebuję dostępu na tej stronie, są tytuł i bezpośredni link. Niestety zapytanie, którego używam, zwraca wszystkie posty ze wszystkimi informacjami w każdej z ich zmiennych $ post.
Poniżej znajduje się przykład zapytania, którego używam na tej stronie mapy witryny dla pojedynczego produktu o custom-post-type
nazwie „produkty” z niestandardową taksonomią „suplementów” i terminem „wszystkie suplementy”. Na mojej stronie mapy witryny jest wiele takich zapytań, ale w celach wyjaśniających podaję tylko kod dla tego pojedynczego zapytania.
$varArray= array(
'post_type' => 'products',
'post_status' => 'publish',
'supplements' => 'all-supplements',
'posts_per_page' => -1,
'orderby' => 'title',
'order' => 'ASC'
);
$myProducts= new WP_Query($varArray);
Zdecydowana większość informacji zapisanych w zmiennej $ post (dla mojej witryny i zgaduję, że ten trend jest widoczny dla ogólnego użytku) znajduje się w „treści”. Typowe użycie pamięci RAM dla mojej strony mapy witryny wynosi ~ 140 MB (zgłaszane przez pasek debugowania), podczas gdy użycie każdej innej typowej strony w mojej witrynie wynosi 50-60 MB. Duża różnica. Wczoraj strona Mapa witryny przestała działać (WSOD) i aby to naprawić musiałem zwiększyć maksymalną ilość pamięci RAM, którą WP może użyć. Zwiększam więc ogólne niezbędne zasoby systemowe z powodu jednej strony.
W ten sposób dochodzę do mojego pytania.
Czy jest gdzieś w Wordpressie ścieżka / opcja, której brakuje, która mogłaby pobrać posts
/ pages
jak normalne zapytanie, ale NIE pobierać treści dla pobranych postów?
Czy też jest jakiś łatwiejszy sposób, aby pobrać tylko określone elementy w ramach danego zapytania (Title / Permaklink / Slug / etc ...) zamiast uzyskać cały shebang zmiennej $ post?
Wydaje mi się, że dla wielu zastosowań WP, jedynym miejscem, że „content” z post / strona będzie zazwyczaj potrzebny jest na to page
czy post
strona (oczywiście są wyjątki tutaj), i że mając dostęp do pełnej treści dla stanowisk / strony pobrane przez zapytanie na innych stronach to zwykła nadmiar. Jeśli istnieje sposób na uniknięcie ładowania pełnej zawartości stron list wpisów, można zaoszczędzić znaczną ilość pamięci RAM.
Każda pomoc będzie mile widziana.
źródło
Możesz spróbować dodać to do tablicy:
Wydaje się to dość oczywiste, ale w gruncie rzeczy nie pytasz o wszystkie zmienne wpisu i tylko o to, czego potrzebujesz.
źródło
Programista Dan, mah!
Zacznijmy od niestandardowych
SELECT
zapytań za pomocą$wpdb
globalnego. Kodeks ma świetny wpis na temat wyświetlania postów za pomocą niestandardowego zapytania Select . Jeśli skorzystasz z niegosetup_postdata()
, możesz przeglądać wyniki tak, jakbyś siedział w standardowej pętli Wordpress:To zapytanie pobiera tylko identyfikatory postów, tytuły i identyfikatory GUID (używane do określenia bezpośredniego łącza do postu), absolutnie ignorując wszystko inne. Jest ponadto zlecenia przez pierwsze rezultaty
post_type
wtedypost_title
, choć może chcesz korzystać z wielu pytań, aby oddzielić swoje typy post (teoretycznie przy małym spadku wydajności).Oczywiście możesz zrezygnować z używania
setup_postdata()
i po prostu zapętlić$sitemap_nodes
lub przeszukać zapytanie, aby uzyskać potrzebne wyniki.Jeśli wykonasz połączenie
setup_postdata()
i włączysz tryb debugowania, połączenia prawdopodobnie będą wyrzucać powiadomienia w lewo i w prawo dotyczące (celowo) brakujących informacji. Możesz rzucić@
przed wywołaniem funkcji, aby je ukryć po potwierdzeniu, że niestandardowe zapytanie działa poprawnie.Ale to powinno wystartować! Możesz odnieść się do następującego diagramu bazy danych (ze strony Opis bazy danych w Kodeksie), aby zlokalizować pola, które należy wysłać:
źródło
WP_Query ma parametr „pola zwrotne”, który wygląda następująco:
Przy takim użyciu WP_Query zwraca tylko identyfikatory postów, a nie cały obiekt postu. Następnie można po prostu użyć
get_permalink()
,get_the_title()
i inne funkcje dobrane WordPress odzyskać swoją treść na podstawie postu ID.źródło
get_post()
na nim uruchamiają , aby odzyskać pełne dane, a zatem całkowicie eliminują cel polegający na pobieraniu samych identyfikatorów.