Donc, j'ai rencontré ce qui ressemble à un problème d'utilisation de WP RAM et je cherche une solution.
Le seul endroit où j'ai vraiment ce problème sur mon site est avec une page Plan du site que j'essaie de remplir, mais une solution à ce problème pourrait être universellement appliquée et économiser sur l'utilisation de la RAM sur un site entier.
Essentiellement, cette page Plan du site que j'ai est une liste de tous posts
et pages
sur mon site. Les seuls éléments de la variable $ post auxquels j'ai besoin d'accéder sur cette page sont le titre et le permalien. Malheureusement, la requête que j'utilise renvoie tous les messages avec toutes les informations dans chacune de leurs variables $ post.
Voici un exemple de requête que j'utilise sur cette page Plan du site pour un seul custom-post-type
"produit" nommé avec une taxonomie personnalisée de "suppléments" et le terme "tous-suppléments". Ma page Plan du site contient plusieurs requêtes de ce type, mais à des fins explicatives, j'inclus uniquement le code de cette seule requête.
$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 grande majorité des informations enregistrées dans la variable $ post (pour mon site, et je suppose que cette tendance est observée pour une utilisation générale) se trouve dans "le contenu". L'utilisation typique de la RAM pour ma page Plan du site est ~ 140 Mo (rapporté par la barre de débogage), alors que l'utilisation de toute autre page typique sur mon site est de 50 à 60 Mo. Grande différence. Hier, la page Plan du site a cessé de fonctionner (WSOD), et pour y remédier, j'ai dû augmenter la quantité maximale de RAM que WP peut utiliser. J'augmente donc globalement les ressources système nécessaires en raison d'une seule page.
J'en viens donc à ma question.
Y a-t-il un chemin / une option quelque part dans Wordpress qui me manque qui irait chercher posts
/ pages
comme une requête normale, mais PAS obtenir le contenu des messages récupérés?
Ou bien, existe-t-il un moyen plus simple pour moi de ne saisir que des éléments particuliers dans une requête donnée (Titre / Permaklink / Slug / etc ...) au lieu d'obtenir l'intégralité de la variable $ post shebang?
Il me semble que pour de nombreuses applications WP, le seul endroit où "le contenu" d'une publication / page serait généralement nécessaire est sur cette page
ou cette post
page (il y a évidemment des exceptions ici), et que l'accès au contenu complet des publications / pages récupérées par requête sur d'autres pages est une simple exagération. S'il existe un moyen d'éviter de charger le contenu complet des pages de la liste des publications, une quantité importante d'utilisation de la RAM pourrait être économisée.
Toute aide serait appréciée.
la source
Vous pouvez essayer d'ajouter ceci à votre tableau:
Cela semble assez explicite, mais essentiellement vous n'interrogez pas toutes les variables de publication et juste ce dont vous avez besoin.
la source
Programmeur Dan, mah man!
Commençons par des
SELECT
requêtes personnalisées à l'aide du$wpdb
global. Le Codex a une excellente entrée sur l' affichage des messages à l'aide d'une requête de sélection personnalisée . Si vous utilisez,setup_postdata()
vous pouvez parcourir les résultats comme si vous étiez assis dans la boucle Wordpress standard:Cette requête extrait uniquement les ID, titres et GUID des publications (utilisés pour déterminer le permalien d'une publication) tout en ignorant absolument tout le reste. Il ordonne en outre les résultats d'abord d'ici
post_type
làpost_title
, bien que vous souhaitiez peut-être utiliser plusieurs requêtes pour séparer vos types de publication (théoriquement à un faible niveau de performances).De toute évidence, vous souhaiterez peut-être ignorer l'utilisation
setup_postdata()
et simplement parcourir$sitemap_nodes
, ou jouer avec la requête pour obtenir les résultats dont vous avez besoin.Si vous appelez
setup_postdata()
et que le mode de débogage est activé, les appels cracheront probablement des avis de gauche et de droite concernant (délibérément) les informations manquantes. Vous souhaiterez peut-être lancer un@
avant l'appel de fonction pour les supprimer après avoir confirmé que votre requête personnalisée fonctionne correctement.Mais cela devrait vous aider à démarrer! Vous pouvez vous référer au diagramme de base de données suivant (à partir de la page Description de la base de données sur le Codex) pour localiser les champs que vous devez interroger:
la source
WP_Query a un paramètre "champs de retour" qui ressemble à ceci:
Lorsqu'il est utilisé de cette façon, WP_Query renvoie uniquement les ID de publication, pas l'intégralité de l'objet de publication. Ensuite, vous pouvez simplement utiliser le
get_permalink()
,get_the_title()
et d'autres fonctions WordPress assorties pour récupérer votre contenu en fonction de l'ID de la publication.la source
get_post()
sur celui-ci pour récupérer toutes les données et ainsi complètement annuler l'objectif de récupérer les ID seuls.