Entonces, me he encontrado con lo que parece un problema de uso de WP RAM y estoy buscando una solución.
El único lugar en el que realmente tengo este problema en mi sitio es con una página de Mapa del sitio que estoy tratando de llenar, pero una solución a este problema podría aplicarse universalmente y ahorrar en el uso de RAM en todo un sitio.
Esencialmente, esta página del Mapa del sitio que tengo es una lista de todos posts
y pages
en mi sitio. Los únicos elementos de la variable $ post a los que necesito acceder en esta página son el título y el enlace permanente. Desafortunadamente, la consulta que estoy usando devuelve todas las publicaciones con toda la información en cada una de sus variables $ post.
El siguiente es un ejemplo de una consulta que estoy usando en esta página del Mapa del sitio para un solo custom-post-type
"productos" con una taxonomía personalizada de "suplementos" y el término "todos los suplementos". La página Mi mapa del sitio tiene varias consultas de este tipo, pero con fines explicativos solo incluyo el código para esta consulta única.
$varArray= array(
'post_type' => 'products',
'post_status' => 'publish',
'supplements' => 'all-supplements',
'posts_per_page' => -1,
'orderby' => 'title',
'order' => 'ASC'
);
$myProducts= new WP_Query($varArray);
La gran mayoría de la información guardada dentro de la variable $ post (para mi sitio, y supongo que esta tendencia se ve para uso general) se encuentra dentro del "contenido". El uso típico de RAM para mi página de Mapa del sitio es de ~ 140 MB (informado por Debug Bar), mientras que el uso de cualquier otra página típica en mi sitio es de 50-60 MB. Gran diferencia. Ayer, la página del Mapa del sitio dejó de funcionar (WSOD), y para solucionarlo tuve que aumentar la cantidad máxima de RAM que WP puede usar. Por lo tanto, estoy aumentando los recursos del sistema necesarios en general debido a una sola página.
Por lo tanto, llego a mi pregunta.
¿Hay una vía / opción en algún lugar dentro de Wordpress que me falta que obtenga posts
/ pages
como una consulta normal, pero que NO obtenga el contenido de las publicaciones recuperadas?
O, alternativamente, ¿hay alguna manera más fácil para que yo solo tome elementos particulares dentro de una consulta dada (Título / Permaklink / Slug / etc ...) en lugar de obtener todo el shebang variable $ post?
Me parece que para muchas aplicaciones de WP, el único lugar donde normalmente se necesitaría "el contenido" de una publicación / página es en esa page
o en la post
página (obviamente, hay excepciones aquí), y que tener acceso al contenido completo para publicaciones / páginas recuperadas por consulta en otras páginas es simple exageración. Si hay una manera de evitar cargar el contenido completo de las páginas de la lista de publicaciones, se podría guardar una cantidad significativa de uso de RAM.
Cualquier ayuda sería apreciada.
fuente
Puede intentar agregar esto a su matriz:
Parece bastante explicativo, pero esencialmente no está consultando todas las variables de publicación y solo las cosas que necesita.
fuente
Programador Dan, hombre!
Comencemos con las
SELECT
consultas personalizadas utilizando el$wpdb
global. El Codex tiene una gran entrada en la visualización de publicaciones utilizando una consulta de selección personalizada . Si lo utilizasetup_postdata()
, puede recorrer los resultados como si estuviera sentado en el bucle estándar de Wordpress:Esta consulta solo extrae los ID, títulos y GUID de las publicaciones (utilizados para determinar el enlace permanente de una publicación) mientras ignora absolutamente todo lo demás. Además, ordena los resultados primero para
post_type
entoncespost_title
, aunque es posible que desee utilizar múltiples consultas para separar sus tipos de publicación (teóricamente con un pequeño impacto en el rendimiento).Obviamente, es posible que desee omitir el uso
setup_postdata()
y simplemente recorrer$sitemap_nodes
o jugar con la consulta para obtener los resultados que necesita.Si llama
setup_postdata()
y tiene activado el modo de depuración, es probable que las llamadas arrojen avisos de izquierda a derecha con respecto a la información (deliberadamente) faltante. Es posible que desee lanzar un@
antes de la llamada a la función para suprimirlos después de haber confirmado que su consulta personalizada funciona correctamente.¡Pero esto debería ayudarlo a comenzar! Puede consultar el siguiente diagrama de base de datos (desde la página Descripción de la base de datos en el Codex) para ubicar los campos que necesita consultar:
fuente
WP_Query tiene un parámetro de "campos de retorno" que se ve así:
Cuando se usa de esta manera, WP_Query solo devuelve las ID de publicación, no el objeto de publicación completo. A continuación, sólo puede utilizar los
get_permalink()
,get_the_title()
y otras funciones de WordPress variada para recuperar su contenido basado en el poste de identificación.fuente
get_post()
para recuperar datos completos y, por lo tanto, anulan por completo el propósito de recuperar las ID solo.