web-dev-qa-db-fra.com

Besoin d'aide pour créer une instruction If pour des champs méta personnalisés

J'utilise Wordpress. J'ai un site de critique de film appelé Filmblurb . Pour mes articles de blog, j'essaie de créer des articles avec différentes catégories. Dans la catégorie "Commentaires", j'ai une boîte "Détails" qui sert de méta-information pour tous mes commentaires.

Le problème est que lorsque j'essaie de créer un article qui a la catégorie "Fonctionnalités" ou autre chose, la case "Détails" reste toujours. En gros, je veux essayer de créer une instruction PHP if qui ne renverra que la séquence de code suivante lorsque je rédigerai uniquement un article "Reviews". J'utilise la balise "get_post_meta();" dans Wordpress pour renseigner cette zone "Détails" pour chaque message "Commentaires" que j'écris. Un exemple de message peut être trouvé ici .

<div class="box">
<div class="boxheader">Details</div>
<div class="text">
<h1>Genre</h1>
<p><?php echo get_post_meta($post->ID, 'genre', true); ?></p>
<h1>Rated</h1>
<p><?php echo get_post_meta($post->ID, 'rated', true); ?></p>
<h1>Release Date</h1>
<p><?php echo get_post_meta($post->ID, 'releasedate', true); ?></p>
<h1>Runtime</h1>
<p><?php echo get_post_meta($post->ID, 'runtime', true); ?></p>
<h1>Director</h1>
<p><?php echo get_post_meta($post->ID, 'director', true); ?></p>
<h1>Cast</h1>
<p><?php echo get_post_meta($post->ID, 'cast', true); ?></p>
<h1>Grade</h1>
<p><?php echo get_post_meta($post->ID, 'grade', true); ?></p>
</div>

Faites-moi savoir si j'ai besoin d'expliquer plus.

2
jtarr523

Ceci est très demandé, essayons donc de l'expliquer complètement.

Nous pouvons simplement l'envelopper dans une instruction if et renvoyer la valeur, par exemple,

   <?php if ( get_post_meta($post->ID, 'genre', true) ) : ?>
     <?php echo get_post_meta($post->ID, 'genre, true) ?> ?>
   <?php endif; ?>

Mais c’est moche, et pourquoi faire 2 requêtes quand on peut en faire une à la place? Nous allons donc mettre la valeur post_meta dans une variable, telle que $film_genre = get_post_meta($post->ID, 'genre', true;.

Cela ressemblerait à:

$film_genre = get_post_meta($post->ID, 'genre', true);

  if ( $film_genre ) {
    echo 'something is here';
  }
  else {
    echo 'nothing is here';
  }

De plus, je trouve la fonction un peu bizarre pour vérifier si elle est vide ou non, alors j’ajoute une vérification supplémentaire pour vérifier que !empty (vérifie si la valeur de la méta-case n’est PAS vide).

Cela ressemble à:

 $film_genre = get_post_meta($post->ID, 'genre', true);

  if (!empty($film_genre)) {
    echo $film_genre;
  }

Mais ce n'est pas ça! Étant donné que votre exemple utilise 7 boîtes à méta, utilisez simplement une fonction de requête pour toutes les récupérer à l'aide de get_post_custom. http://codex.wordpress.org/Function_Reference/get_post_custom

Cela ressemblerait à quelque chose comme:

$film_meta = get_post_custom( $post->ID );
if ( $film_meta ) 
{ 
    echo $film_meta['genre'];
    echo $film_meta['rated'];
    echo $film_meta['releasedate'];
    echo $film_meta['runtime'];
    echo $film_meta['director'];
    echo $film_meta['cast'];
    echo $film_meta['grade'];
}

Maintenant, c’est beaucoup mieux, cela peut sembler idiot d’entonner des tonnes de choses dans une rangée, mais ceci n’est qu’un exemple, généralement vous ajoutez du balisage autour des valeurs ou peut-être du code supplémentaire, l’important étant que vous n’utilisez qu’une seule fonction , et il est propre et facile à lire/à comprendre et à afficher.

ps. Notez également que le 3ème paramètre de get_post_meta défini sur "true" ne signifie pas que la valeur est intuitivement vraie, mais définit plutôt le résultat sur une valeur unique et ne renvoie rien s'il est vide.

7
Wyck