WordPress, изменить макет шаблона в зависимости от категории сообщения?

Я пытаюсь вывести все посты под пользовательским типом поста «философия» на странице в списке. Чередование категорий «img-left» и «img-right».

Я могу получить посты для отображения ВСЕХ «философских» постов, однако я хочу разместить посты в двух макетах в зависимости от их пользовательской категории.

Если категория «img-right», я хочу, чтобы сообщение отображалось с текстом слева и изображением справа, и наоборот для «img-left».

Я попробовал приведенный ниже код, который не работает вообще.

<?php
$args = array( 'post_type' => 'philosophy', 'posts_per_page' => 10 );
$loop = new WP_Query( $args );
if( in_category( 'img-right' ) ):
while ( $loop->have_posts() ) : $loop->the_post();
echo '<div class="col-md-12"><h2>';
the_title();
echo '</h2></div><div class="row content"><div class="col-md-6"';
the_content();
echo '</div><div class="col-md-5 offset-1 float-right">';
the_post_thumbnail('array(100,100)');
echo '</div></div>';endwhile;
endif;
?>

удалив «если» и «endif» у меня есть код, который перечисляет все сообщения в одном макете. Что мне нужно, так это условные выражения, которые могут выводить макеты «img-right» и «img-left» в зависимости от категории сообщения. Единственный макет, показанный в моем примере выше, это «img-right».

Любая помощь будет принята с благодарностью. Этот PHP заставляет мою голову вращаться!

1

Решение

Итак … со всей помощью ответивших парней я понял это с помощью подхода CSS, которого коснулся @Mohsin.

Вот мой код:

<div id="content" class="col-12" role="main">
<?php get_template_part('loops/page-content'); ?>
</div>

<div class="row">
<?php
$args = array( 'post_type' => 'philosophy', 'posts_per_page' => 10 );
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
echo '<div class="row content"><div class="col-md-12"><h2>';
the_title();
echo '</div><div class="col-md-6">';
the_content();
echo '</div><div class="col-md-6">';
the_post_thumbnail();
echo '</div></div>';endwhile;
?>

Затем я применил это:

.row.content:nth-child(even) {
flex-direction: row-reverse;
}

и мы золотые

Спасибо всем, кто помог.

2

Другие решения

Если я правильно понимаю:

<?php $args = array( 'post_type' => 'philosophy', 'posts_per_page' => 10 ); ?>
<?php $loop = new WP_Query( $args ); ?>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>

<div class="col-md-12"><h2>
<?php the_title(); ?>
</h2></div>
<div class="row content">

<?php if( in_category( 'img-left' ) ): ?>
<div class="col-md-5 offset-1 float-left">
<?php the_post_thumbnail('array(100,100)'); ?>
</div>
<?php endif; ?>

<div class="col-md-6">
<?php the_content(); ?>
</div>

<?php if( in_category( 'img-right' ) ): ?>
<div class="col-md-5 offset-1 float-right">
<?php the_post_thumbnail('array(100,100)'); ?>
</div>
<?php endif; ?>
</div>

<?php endwhile; ?>

Приведенный выше код выведет все сообщения с миниатюрой слева, если это категория img-left и уменьшенное изображение вправо, если в img-right (и вывод обоих, если они классифицированы как оба, и ни того, ни другого, если они не являются ни одной категорией. Вы можете хотеть различного поведения, но это должно быть просто настроить условные выражения).

Если ваш шаблон станет более сложным, я бы порекомендовал перенести разделы в разделы шаблона / использовать такие функции, как get_sidebar(),

0