J'ai une pièce d'identité: Je veux vérifier l'existence comme ceci: p> mais dans les forums wp semble toujours préférer Demandez à dB: p> alors quelle est la meilleure méthode? En effet, je préfère la facilité du premier. P> p>
7 Réponses :
Je pense que s'ils vous donnent une fonction à un appel, vous l'appelez; Utilisez la base de données pour des choses qui ne sont pas fournies par une fonction. P>
+1 Oui, je pense que la même chose, mais la recherche de WordPress vérifie si la poste existe code> et apparaît beaucoup de solutions telles que la seconde dans le
http://wordpress.org/support code >
Je sens que vos instincts sont corrects et je ne peux pas expliquer pourquoi quelqu'un recommanderait l'inverse. Seul moyen de savoir serait de demander à quelqu'un qui le recommande. Je serais curieux de connaître la réponse, si vous en entendez jamais.
Ok mon ami le faisons de la bonne manière, en utilisant l'API. @Pekka pense aussi la même chose (pourquoi il a supprimé sa réponse?). À votre santé!
Je préférerais interroger la base de données sur l'appel GET_POST. P>
Le contenu post peut être de grande taille. Interrogation et poussant tout le contenu du post dans une chaîne juste pour vérifier si elle existe d'incroyablement gaspillé et inefficace. P>
Si vous ne souhaitez pas interroger la base de données directement, peut-être utiliser get_post_field pour tirer l'un des plus petits champs serait aussi efficace, mais moins gaspillé. P>
Je ne pense pas que dans le monde du PHP, nous devrions trop nous soucier des utilisations des ressources. Laisser cela pour les programmeurs C. PHP et MySQL sont assez intelligents pour la gérer par eux-mêmes. Il existe d'autres considérations comme sèches et le nettoyage du code. THX
Ce n'est pas une question de PHP et de MySQL Gestion des ressources. C'est une question du programmeur impérieusement consommer des ressources inutiles. C'est comme en utilisant Select * partout. Il suffit de saisir tout ce que tout l'attitude vous brisera sur tout ce que de petits sites idiotty bitty, surtout si votre base de données et vos serveurs HTTP sont sur différents hôtes.
Je pense que le meilleur est d'interroger la base de données directement aussi aussi possible que possible
Vous pouvez utiliser la fonction get_post_status (). p>
Il retourne faux si le message n'existe pas P> ou, pour être sûr que le message est publié p> http://codex.wordpress.org/funt_reference/get_post_status p> p>
J'ai vérifié la source de get_post_status code> et il utilise
get_post code>. Pourquoi ne pas simplement utiliser directement
null! == get_post ($ post_id) code>?
@Michelle je pensais la même chose, mais cela retourne un tas de données supplémentaires. Ne serait-il pas aussi propre pour faire ce que le CSAG a suggéré? De toute façon est propre et utilise WordPress et non le WPDB. :)
J'ai presque toujours d'accord avec le sentiment que vous devriez éviter une requête DB directe lorsque cela est possible. Mais dans ce cas, je pense que cela vaut la peine d'écrire une fonction personnalisée qui sera plus efficace que get_post code>. La fonction principale
post_exists code> appelle directement la base de données directe, alors je pense que nous devrions faire la même chose pour vérifier si une carte d'identité existe. Stackoverflow.com/a/69328684/947370
Je sais que c'est très ancien post, mais toujours ... Si vous souhaitez vérifier si la poste avec certains identifiaires existe, vous pouvez également utiliser get_permalink WordPress Fonction.
Exemple: P>
if( get_permalink( $post_id ) ): echo "does exist"; else: echo "does not exist"; endif;
Vaut à noter que get_permalink () appelle get_post. Donc, si vous le faites pour des raisons de performance, cela fait toujours que le même appelez_post () appelez de toute façon.
if( is_null(get_post($id))){ echo "post $id does not exists or was deleted"; }else{ echo "post $id already exists"; }
Bien que cela puisse répondre à la question, il est préférable d'ajouter une description sur la manière dont cette réponse peut aider à résoudre le problème. Veuillez lire Comment puis-je écrire une bonne réponse pour en savoir plus.
Sachez que, avec cette approche, les messages dans la corbeille sont toujours considérés comme existants.
Utilisez le wp_query classe pour une solution efficace et sans SQL: < Pré> xxx pré>
Notez que get_post_status et get_permalink chargez des données extrêmes. P> P>
Ceci est moins efficace l'appelant directement la base de données, mais c'est une bonne pratique pour utiliser WP_Query dans la mesure du possible. Vous pouvez améliorer légèrement l'efficacité en ajoutant un paramètre 'champs' => 'IDS'.
J'ai décidé de regarder le code de base existant pour inspiration ici. Il existe déjà une fonction pour post_existes mais il vérifie que les titres, le contenu, le statut, etc. Vous pouvez Voir le Source complète ici .
Notez que, dans le but de simplement vérifier si quelque chose existe, le code dans le noyau interrogeait en effet directement la base de données et tirez uniquement l'identifiant - pas toutes les données de l'ensemble de l'article. C'est La réponse acceptée dit "Requête le DB directement le moins possible". Dans de larges traits pour les nouveaux développeurs de WordPress, c'est un bon conseil. Mais je pense que le meilleur conseil est d'éviter de disperser un tas d'appels de base de données directs répétitifs dans votre code personnalisé et d'éviter les appels de base de données directs lorsqu'il y a une fonction existante qui fait déjà exactement ce que vous recherchez. Dans ce cas, nous avons trouvé une instance d'une fonction que nous souhaitons peut-être être dans le noyau, mais il n'y a pas de moyen efficace de le faire avec des fonctions principales. Pour ce cas rare, nous devrions écrire une fonction qui interroge la base de données et utilise le code principal comme modèle pour savoir comment le faire efficacement et sécurisé. P> get_post code>,
GET_PERMALINK CODE> et d'autres fonctions recommandées ici ont tous des objectifs spécifiques qui seront bien moins efficaces que la fonction intégrée à usage avec une requête conçue pour être aussi vite que possible. Et comme les autres commentateurs notés - certaines autres suggestions telles que
get_post_status code> appellent effectivement
get_post code> à l'intérieur d'eux, c'est donc encore moins efficace. P> P>
Je crois qu'il est très irresponsable de ne pas examiner l'efficacité des appels comme ils sont traités sur le serveur. Les implémentations génériques C / C ++ ne sont généralement pas optimisées pour tout et l'évolutivité des appels doit être prise en compte. Il existe un équilibre entre l'optimisation et la maintenabilité, mais pour faire une déclaration ouverte que le monde PHP ne devrait pas se soucier de la consommation de ressources est naïf et finalement paresseux. Vous pouvez prendre votre argumentation à un extrême et disposer d'une équipe de programmeurs de PHP. Remettez le code indésirable et reposer sur l'assurance que les bibliothèques du système d'exploitation sous-jacentes vont