Итак, я столкнулся с проблемой использования оперативной памяти WP и ищу решение.
Единственное место, где у меня действительно возникает эта проблема на моем сайте, - это страница карты сайта, которую я пытаюсь заполнить, но решение этой проблемы может быть применено повсеместно и сэкономить на использовании оперативной памяти всего сайта.
По сути, эта страница «Карта сайта» у меня есть список всего posts
и pages
на моем сайте. Единственные элементы переменной $ post, к которым мне нужен доступ на этой странице, - это заголовок и постоянная ссылка. К сожалению, используемый мной запрос возвращает все сообщения со всей информацией в каждой из переменных $ post.
Ниже приведен пример запроса, который я использую на этой странице карты сайта для одного custom-post-type
имени «продукты» с пользовательской таксономией «дополнения» и термина «все дополнения». Страница моей карты сайта содержит несколько таких запросов, но для пояснения я включаю только код для этого отдельного запроса.
$varArray= array(
'post_type' => 'products',
'post_status' => 'publish',
'supplements' => 'all-supplements',
'posts_per_page' => -1,
'orderby' => 'title',
'order' => 'ASC'
);
$myProducts= new WP_Query($varArray);
Подавляющее большинство информации, сохраненной в переменной $ post (для моего сайта, и я предполагаю, что эта тенденция прослеживается для общего использования), находится в «контенте». Типичное использование ОЗУ для моей страницы карты сайта составляет ~ 140 МБ. (сообщает Debug Bar), в то время как использование для любой другой типичной страницы на моем сайте составляет 50-60 МБ. Большая разница. Вчера страница Карта сайта перестала работать (WSOD), и для ее исправления мне пришлось увеличить максимальный объем оперативной памяти, который может использовать WP. Поэтому я увеличиваю общие необходимые системные ресурсы из-за одной страницы.
Итак, я подхожу к своему вопросу.
Есть ли где-то в Wordpress путь / опция, которую я пропускаю, которая будет извлекать posts
/ pages
как обычный запрос, но НЕ получать содержимое для извлеченных постов?
Или, в качестве альтернативы, есть ли какой-нибудь более простой способ для меня получить только определенные элементы в данном запросе (Title / Permaklink / Slug / etc ...) вместо получения всей переменной $ post переменной shebang?
Мне кажется, что для многих приложений WP единственное место, где обычно требуется «контент» поста / страницы, - это страница page
или post
страница (очевидно, здесь есть исключения), и что доступ к полному контенту для постов / Страницы, полученные по запросу на других страницах, просто излишни. Если есть способ избежать загрузки всего контента для страниц списка сообщений, то можно сэкономить значительное количество оперативной памяти.
Любая помощь будет оценена.
источник
Вы можете попробовать добавить это в ваш массив:
Это кажется довольно очевидным, но по сути вы не запрашиваете все переменные записи и просто то, что вам нужно.
источник
Программист Дэн, мужик!
Давайте начнем с пользовательских
SELECT
запросов, используя$wpdb
глобальные. В Кодексе есть отличная статья об отображении сообщений с помощью пользовательского запроса выбора . Если вы используете его,setup_postdata()
вы можете просмотреть результаты, как если бы вы сидели в стандартном цикле Wordpress:Этот запрос извлекает только идентификаторы сообщений, заголовки и идентификаторы GUID (используемые для определения постоянной ссылки), при этом абсолютно игнорируя все остальное. Кроме того , он упорядочивает результаты сначала
post_type
тоpost_title
, что Вы можете использовать несколько запросов , чтобы отделить типы почтовых (теоретически при небольшой потери производительности).Очевидно, что вы можете отказаться от использования
setup_postdata()
и просто выполнить цикл$sitemap_nodes
или выполнить запрос, чтобы получить результаты, которые вам нужны.Если вы делаете вызов
setup_postdata()
и активируете режим отладки, вызовы, скорее всего, будут выплевывать уведомления слева и справа относительно (намеренно) недостающей информации. Возможно, вы захотите бросить@
перед вызовом функции, чтобы подавить их после того, как подтвердите, что ваш пользовательский запрос работает правильно.Но это должно помочь вам начать! Вы можете обратиться к следующей диаграмме базы данных (со страницы « Описание базы данных» в Кодексе), чтобы найти поля, которые нужно запросить:
источник
WP_Query имеет параметр «возврат полей», который выглядит следующим образом:
При использовании этого способа WP_Query возвращает только идентификаторы сообщений, а не весь объект сообщений. Тогда вы можете просто использовать
get_permalink()
,get_the_title()
и другие функции сортировали WordPress , чтобы получить контент на основе почтового идентификатора.источник
get_post()
на нем для получения полных данных и, таким образом, полностью исключают цель получения идентификаторов в одиночку.