Então, eu parei com o que parece ser um problema de uso da RAM do WP e estou procurando uma solução.
O único lugar em que realmente tenho esse problema no meu site é com uma página de Mapa do Site que estou tentando preencher, mas uma solução para esse problema pode ser aplicada universalmente e economizar no uso de RAM em todo o site.
Essencialmente, esta página do Mapa do site que tenho é uma lista de todos posts
e pages
no meu site. Os únicos elementos da variável $ post aos quais preciso acessar nesta página são o título e o link permanente. Infelizmente, a consulta que estou usando retorna todas as postagens com todas as informações em cada uma das suas variáveis $ post.
A seguir, é apresentado um exemplo de consulta que estou usando nesta página do Mapa do site para um único custom-post-type
"produtos" nomeados com uma taxonomia personalizada de "suplementos" e o termo "todos os suplementos". A página Meu mapa do site possui várias consultas, mas, para fins explicativos, incluí apenas o código dessa 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);
A grande maioria das informações salvas na variável $ post (para o meu site, e acho que essa tendência é vista para uso geral) é encontrada no "conteúdo" O uso típico de RAM na página Mapa do site é ~ 140 MB (relatado pela barra de depuração), enquanto o uso para qualquer outra página típica do meu site é de 50 a 60 MB. Grande diferença. Ontem a página Mapa do Site parou de funcionar (WSOD) e, para corrigi-la, tive que aumentar a quantidade máxima de RAM que o WP pode usar. Então, estou aumentando os recursos gerais necessários do sistema por causa de uma única página.
Assim, chego à minha pergunta.
Existe um caminho / opção em algum lugar do Wordpress que estou faltando que iria buscar posts
/ pages
como uma consulta normal, mas NÃO obter o conteúdo das postagens recuperadas?
Ou, como alternativa, existe alguma maneira mais fácil para eu pegar apenas elementos específicos em uma consulta (Title / Permaklink / Slug / etc ...) em vez de obter toda a variável $ post shebang?
Parece-me que, para muitos aplicativos WP, o único local em que "o conteúdo" de uma postagem / página normalmente seria necessário é nessa page
ou na post
página (obviamente há exceções aqui) e em ter acesso ao conteúdo completo das postagens / páginas recuperadas pela consulta em outras páginas é um exagero simples. Se houver uma maneira de evitar o carregamento do conteúdo completo para as páginas da lista de postagens, uma quantidade significativa de uso de RAM poderá ser salva.
Qualquer ajuda seria apreciada.
fonte
Você pode tentar adicionar isso ao seu array:
Parece bastante auto-explicativo, mas essencialmente você não está consultando todas as variáveis de postagem e apenas o que precisa.
fonte
Programador Dan, mah cara!
Vamos começar com
SELECT
consultas personalizadas usando o$wpdb
global. O Codex tem uma excelente entrada em Exibição de postagens usando uma consulta de seleção personalizada . Se você usar,setup_postdata()
poderá percorrer os resultados como se estivesse sentado no loop padrão do Wordpress:Essa consulta puxa apenas os IDs, títulos e GUIDs das postagens (usados para determinar o link permanente de uma postagem), ignorando absolutamente todo o resto. Além disso, ele ordena os resultados primeiro até
post_type
entãopost_title
, embora você queira usar várias consultas para separar seus tipos de postagem (teoricamente com um pequeno impacto no desempenho).Obviamente, você pode pular o uso
setup_postdata()
e simplesmente fazer um loop$sitemap_nodes
, ou mexer na consulta para obter os resultados necessários.Se você ligar
setup_postdata()
e o modo de depuração estiver ativado, as chamadas provavelmente estarão emitindo avisos à esquerda e à direita sobre (as deliberadamente) informações ausentes. Você pode querer lançar um@
antes da chamada de função para suprimi-los depois de confirmar que sua consulta personalizada está funcionando corretamente.Mas isso deve começar! Você pode consultar o seguinte diagrama do banco de dados (na página Descrição do Banco de Dados no Codex) para localizar os campos que você precisa consultar:
fonte
WP_Query possui um parâmetro de "campos de retorno" que se parece com isso:
Quando usado dessa maneira, o WP_Query retorna apenas os IDs da postagem, não o objeto inteiro da postagem. Então você pode apenas usar os
get_permalink()
,get_the_title()
e outras funções WordPress assorted para recuperar o seu conteúdo com base na identificação post.fonte
get_post()
para recuperar dados completos e, portanto, anulam completamente o objetivo de recuperar os IDs sozinho.