Нужна помощь в создании if-statement для настраиваемых мета-полей

Я использую WordPress. У меня есть сайт для просмотра фильмов под названием Filmblurb . Для моих сообщений в блоге я пытаюсь создать сообщения с разными категориями. В разделе «Отзывы» у меня есть поле «Подробности», которое служит метаинформацией для всех моих отзывов.

Проблема в том, что когда я пытаюсь создать сообщение, которое имеет категорию «Особенности» или что-то еще, этот блок «Подробности» все еще остается. В принципе, я хочу попытаться создать инструкцию PHP if, которая вернет только следующую последовательность кода, когда я напишу только сообщение «Reviews». Я использую get_post_meta(); "в WordPress, чтобы заполнить этот блок« Подробности »для каждого сообщения« Обзоры », которое я пишу. Здесь можно найти образец сообщения.

 <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> В <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> 

Дайте мне знать, если мне нужно больше объяснить.

Это задается очень часто, поэтому попробуйте и полностью объясните это.

Мы можем просто обернуть его в выражении if и повторить значение, например,

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

Но это уродливо, и почему есть 2 вопроса, когда вы можете сделать это? Поэтому мы ставим значение post_meta в переменную, например $film_genre = get_post_meta($post->ID, 'genre', true;

Это будет выглядеть так:

 $film_genre = get_post_meta($post->ID, 'genre', true); if ( $film_genre ) { echo 'something is here'; } else { echo 'nothing is here'; } 

Кроме того, я считаю, что функция немного неудобна с точки зрения проверки, является ли она пустой или нет, поэтому я добавляю дополнительную проверку только для того, чтобы убедиться, что она используется !empty (это проверяет, не имеет ли значение метаданных НЕ пусто).

Это выглядит так:

  $film_genre = get_post_meta($post->ID, 'genre', true); if (!empty($film_genre)) { echo $film_genre; } 

Но это не так! Так как ваш пример использует 7 мета-полей, позвольте просто использовать одну функцию запроса, чтобы захватить их все, используя get_post_custom . http://codex.wordpress.org/Function_Reference/get_post_custom

Это будет выглядеть примерно так:

 $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']; } 

Теперь это намного лучше, но это может показаться глупым, эхо-тонны вещей подряд, но это всего лишь пример, обычно добавляя некоторую разметку вокруг значений или, возможно, дополнительный код, важная часть заключается в том, что вы используете только одну функцию , и он чист и легко читается / понимается и выводится.

пс. Также обратите внимание, что третий параметр get_post_meta установленный в «true», не означает, что значение интуитивно верно, а скорее задает результат одному значению и ничего не возвращает, если пусто.