You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;
?>

关键修正点解释

  1. 把分类判断移到循环内部:必须在$loop->the_post()之后调用has_category(),此时才能获取当前遍历文章的分类信息,判断才会生效。
  2. 完善分支逻辑:新增elseif处理img-left分类的布局,同时补充了默认分支,避免分类不匹配时无内容输出。
  3. 修正缩略图参数:你原来的the_post_thumbnail('array(100,100)')写法错误,应该直接传递数组array(100,100),或者使用WordPress预设的缩略图尺寸名称(比如'thumbnail')。
  4. 添加wp_reset_postdata():自定义查询遍历完成后必须重置文章数据,防止干扰全局的$post变量,避免后续功能出错。

这样修改后,每篇philosophy类型的文章都会根据自身所属的img-left/img-right分类自动加载对应的布局了。

内容的提问来源于stack exchange,提问作者Henry Wood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:39:42