WordPress:按自定义文章分类切换模板布局求助
解决WordPress自定义文章类型按分类切换布局的问题
你的问题核心出在条件判断的位置和逻辑缺失上——原来的in_category('img-right')写在了循环外面,这时候还没遍历到具体文章,根本无法正确判断分类;同时你也没处理img-left分类的布局分支。下面是修正后的完整代码,我会一步步拆解说明:
修正后的可运行代码
<?php // 初始化WP_Query,获取自定义文章类型philosophy的文章 $args = array( 'post_type' => 'philosophy', 'posts_per_page' => 10 ); $loop = new WP_Query($args); // 检查是否存在文章 if ($loop->have_posts()) : // 遍历每一篇文章 while ($loop->have_posts()) : $loop->the_post(); // 针对当前文章判断分类,切换布局 if (has_category('img-right')) : // img-right布局:文本左,图片右 ?> <div class="col-md-12"> <h2><?php the_title(); ?></h2> </div> <div class="row content"> <div class="col-md-6"><?php the_content(); ?></div> <div class="col-md-5 offset-1"> <?php the_post_thumbnail(array(100, 100)); // 修正缩略图参数写法 ?> </div> </div> <?php elseif (has_category('img-left')) : // img-left布局:文本右,图片左 ?> <div class="col-md-12"> <h2><?php the_title(); ?></h2> </div> <div class="row content"> <div class="col-md-5"> <?php the_post_thumbnail(array(100, 100)); ?> </div> <div class="col-md-6 offset-1"><?php the_content(); ?></div> </div> <?php else : // 可选:处理不属于这两个分类的文章,用默认布局 ?> <div class="col-md-12"> <h2><?php the_title(); ?></h2> <?php the_content(); ?> <?php the_post_thumbnail(array(100, 100)); ?> </div> <?php endif; endwhile; // 重置文章数据,避免干扰后续全局查询 wp_reset_postdata(); else : // 无文章时的提示 echo '<p>No philosophy posts found.</p>'; endif; ?>
关键修正点解释
- 把分类判断移到循环内部:必须在
$loop->the_post()之后调用has_category(),此时才能获取当前遍历文章的分类信息,判断才会生效。 - 完善分支逻辑:新增
elseif处理img-left分类的布局,同时补充了默认分支,避免分类不匹配时无内容输出。 - 修正缩略图参数:你原来的
the_post_thumbnail('array(100,100)')写法错误,应该直接传递数组array(100,100),或者使用WordPress预设的缩略图尺寸名称(比如'thumbnail')。 - 添加
wp_reset_postdata():自定义查询遍历完成后必须重置文章数据,防止干扰全局的$post变量,避免后续功能出错。
这样修改后,每篇philosophy类型的文章都会根据自身所属的img-left/img-right分类自动加载对应的布局了。
内容的提问来源于stack exchange,提问作者Henry Wood
相关产品推荐
相关产品推荐

