web-dev-qa-db-fra.com

Passer un identifiant de page/post codé en dur dans `get_post`

Je vois des gens l’utiliser pour extraire du contenu de page sur leurs pages d’accueil, supprimer des catégories spécifiques d’archives, etc., par exemple.

$post = get_post( 5 );

Quelqu'un a suggéré que c'était une mauvaise pratique. Pourquoi est-ce mauvais et que devraient faire les utilisateurs à la place?

5
Tom J Nowell

Pour commencer, explorons ce qui est vraiment 5. C'est l'identifiant de la poste. Mais quelle est l'identification à son tour? C'est la valeur de la ligne de la table MySQL qui identifie l'enregistrement de publication spécifique.

Problèmes d'utilisation des identifiants

Il y a donc tout d'abord des problèmes conceptuels. C'estpas content. Ce n'est pas quelque chose que l'utilisateur crée, manipule ou (le plus souvent) au courant. WP est (de par sa conception) assez sournois quant à la divulgation des identifiants aux utilisateurs et ne le fait presque jamais, créant plusieurs plugins juste à cette fin.

En tant que produit qui n'est pas contenu (ou valeursignificatifpour l'homme), ce n'est pas auto-documenté. Il n’ya aucun moyen de déduire ce que post 5 aurait pu être à partir de votre extrait de code.

Enfin, si ID identifie de manière unique la publication dansspecificdatabase, il est beaucoup moins certain de le faire dès que le contenu commence à se déplacer entre les bases de données et/ou même différents systèmes.

Alors, quelles sont les meilleures options?

J'ai observé deux raisons typiques de récupérer et d'utiliser une publication autonome.

Travailler avec un contenu spécifique sur le site

Le contenu persistant est généralement assez statique et, dans la plupart des cas, peut être identifié par un titre. Par exemple, dans votre extrait de code, l'identifiant faible 5 fait souvent référence à quelque chose comme la page "À propos de".

Pour récupérer ce contenu get_page_by_title() convient. Malgré le nom, il accepte $post_type en tant que troisième argument et ne fonctionnerait pas uniquement pour les pages.

Donc, en utilisant une meilleure identification (et en produisant un code auto-documenté), votre extrait se transforme en:

$about_page = get_page_by_title( 'About' );

Travailler avec un lieu spécifique sur le site

Un autre cas est lorsque la publication est utilisée comme siteplacein, plutôt que comme contenu spécifique. Par exemple, nous aimerions récupérer la FAQ du site, mais nous ne savons pas (ou ne nous en soucions pas) le nom exact et les détails du contenu.

Mais si nous savons où il se trouve dans la structure du site, nous pouvons utiliser get_page_by_path() function, très similaire au précédent:

$faq_page = get_page_by_path( 'about/faq' );

Autres cas

Dans les cas plus complexes, les fonctions ne sont pas toujours bien adaptées. Parfois, cela revient à utiliser get_posts() avec ses riches options de requête, même si ce n’est que pour un seul message.

7
Rarst

Cette question va donner des réponses basées sur des opinions, mais bon, je vais essayer.

Il y a plusieurs raisons pour lesquelles quelqu'un aurait pu vous dire cela, ce serait bien de connaître le contexte également.

  1. Jusqu'à la version 3.4 ou 3.5, cette fonction ne fonctionnait que lorsque le paramètre était une variable, ce peut être l'une des raisons pour lesquelles quelqu'un vous l'a dit.
  2. Moi-même, je ne considère pas cela comme une mauvaise pratique, mais je pense qu'il est préférable d'éviter de coder en dur les ID. J'essaie toujours d'utiliser l'API Options, car il est plus facile de modifier une telle valeur. Vous pouvez également utiliser l'API Theme Customization dans certains cas.
  3. Qui va gérer le site? Si vous êtes celui qui gère le site, il ne sera peut-être pas difficile de changer la valeur. Mais si vous vous attendez à ce que votre client soit celui qui modifie le code, il peut être préférable de créer un "panneau d'options" approprié.

J'ai construit quelque chose de similaire à cela il y a quelques semaines, j'ai écrit un plugin pour cela. Et dans le thème, je viens d'appeler la fonction du plugin. L'option pour changer l'ID était dans une metabox dans chaque publication, il suffisait à l'utilisateur de cocher une case pour sélectionner l'ID de la publication qu'il souhaitait afficher dans le site principal.

Comme vous pouvez le constater, la plupart des raisons sont liées à la modification de la valeur. Il est également utile de créer un "panneau d'options" approprié, car vous pouvez définir la validation correcte des données en cas d'erreur.

Si vous me donnez plus de contexte, je pourrais peut-être développer ma réponse, j'espère que vous la trouverez utile.

7
Tomás Cot