web-dev-qa-db-fra.com

Est-ce que WP Obtenez tous les post_meta sur POST page?

Si quelqu'un ouvre un poste au début du processus, combien de fois j'appelle la fonction get_post_meta? Je pensais que cela pourrait augmenter les performances si je n'appelais pas cette fonction 2-3 fois au lieu de 20 appels sur une seule page.

1
T.Todua

Un appel à get_post_meta() récupère toutes les clés et les valeurs de cette publication. Toutes ces valeurs sont ensuite stockées dans le cache. Le prochain appel récupérera simplement les données du cache. Vous pouvez donc appeler cette fonction plusieurs fois en toute sécurité.

En détails:

  1. get_post_meta() appelle get_metadata('post', $post_id, $key, $single);
  2. get_metadata() vérifie le cache et appelle update_meta_cache() s'il ne trouve pas de cache existant.
  3. update_meta_cache() récupère toutes les entrées avec:

    "SELECT $column, meta_key, meta_value 
     FROM $table 
     WHERE $column IN ($id_list) 
     ORDER BY $id_column ASC"
    

Il en va de même pour les méta-valeurs utilisateur.

3
fuxia

... je pensais que cela pourrait augmenter les performances si je n'appelais pas cette fonction 2-3 fois au lieu de 20 appels sur une seule page de publication

Avec l'excellente réponse de @toscho, je ne ferai qu'ajouter une chose, basée sur mes dernières fouilles .

Si vous ne le définissez pas autrement, les requêtes WordPress prélèveront les méta-valeurs des publications pour toutes les publications que la requête renvoie.

Cela signifie que même avant que vous appeliez get_post_meta();, les méta-valeurs sont déjà dans le cache WordPress.

Nacin, a expliqué ceci et vous pouvez vous référer à la diapositive 34 dans cette présentation .

enter image description here

Vous pouvez comprendre à partir de cette image que, généralement, WordPress prélève les informations pour les métadonnées ainsi que pour les termes.

La conclusion est la même que celle de @toscho. Vous pouvez appeler get_post_meta(); à tout moment.


Pour obtenir les détails de base sur l'apparence de la mise en cache, vous pouvez également vérifier ce message .

1
prosti