@Alex-Broudy

Как скрыть DIV, содержащий цикл постов, если произвольное поле в цикле не заполнено?

Всем добра!

Подскажите, что делаю не так?

Есть DIV блок с классом "books", в котором находится цикл для вывода постов.

Я хочу сделать проверку, что если значение произвольного поля ('value' => ') в цикле не пустое и содержит слово 'Глянцевая', то блок с классом "books" показывается, а если не заполнено или заполнено, но не содержит слово 'Глянцевая', то не показываем.

в WP не силен, поэтому обратился за помощью..

Код ниже:

<? 
$book_id = get_field('book_id'); // по $book_id определяем ID поста из которого нужно вытянуть данные
$vid_oblojki = get_field('вид_обложки',$book_id);
?>

<? if (!empty($vid_oblojki['Глянцевая'])) : ?>
<div class="books">
	<?php 
	$posts = get_posts( array(
		'numberposts' => -1,
		'orderby'     => 'date',
		'order'       => 'DESC',
		'meta_query' => array(
			'relation' => 'AND', 
			array(
				'key'     => 'название_книги',
				'value'   => $book_name,
			),
			array(
				'key'     => 'вид_обложки',
				'value'   => 'Глянцевая',
				'compare' => '=',
			),
		),
		'post_type'   => 'books',
	) );
	foreach( $posts as $post ){
		setup_postdata($post);
	?>
	<a href="<?php echo $book_link; ?>"><?php the_field('название_книги'); ?></a>
	<?php 
		}
		wp_reset_postdata();
	?>
</div>
<?php else : ?>
	<!-- Ничего не показываем -->
<?php endif ?>
  • Вопрос задан
  • 23 просмотра
Решения вопроса 1
wppanda5
@wppanda5 Куратор тега WordPress
WordPress Mедведь
У вас страшная мешанина

1, НИКОДА НЕ НАЗЫВАЙТЕ ПРОИЗВОЛЬНЫЕ ПОЛЯ КИРРИЛИЦЕЙ!!!!! НИКОГДА.

2, не понятно, что же у вас храниться в поле 'вид_обложки', я все таки думаю, что строка, тогда условие будет выглядеть так

if(!empty($vid_oblojki) && mb_substr($vid_oblojki,'глянцевая')) :
// код
        endif;


если все таки там массив, то так

if ( ! empty( $vid_oblojki ) && mb_substr( implode( '', $vid_oblojki ), 'Глянцевая' ) ) :
	endif;


3. У вас в корне не верно организовано это поле.
Видов обложек, как я понимаю ограниченное и предустановленное количество, тогда надо это поле делать селектом с видами обложек, и числовыми значениями

<select name="cover_type" id="cover_type">
    <options value="">Выберите вид обложки</options>
    <options value="1">Мягкая</options>
    <options value="2">Глянцевая</options>
</select>

Тогда проверка будет выглядеть так
if(!empty($vid_oblojki) && 2 === (int)$vid_oblojki) :
// код
        endif;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы