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

如何在单页与自定义文章类型中使用ACF Pro灵活内容?

解决ACF Pro灵活内容+自定义文章类型Projects的核心问题

先帮你理清两个关键问题:一是Projects自定义文章类型的跳转逻辑,二是如何在单页(比如Portfolio)的灵活内容里完美整合这些项目。

一、Projects自定义文章类型的跳转去向

当你点击用WP Query输出的Projects项目时,默认会跳转到这个自定义文章类型的单条项目详情页,URL格式一般是 你的域名/projects/项目-slug/。不过这个前提是你注册Projects自定义文章类型时,配置了正确的参数:

  • 确保注册代码里包含 'public' => true(让文章类型公开可访问)
  • 包含 'rewrite' => array('slug' => 'projects')(设置URL别名)
  • 最好加上 'has_archive' => true(开启项目列表归档页,比如你的域名/projects/)

如果你不想跳转到单独详情页,而是想在当前页面(比如Portfolio的灵活内容板块内)展示项目详情,可以这么做:

  • 给每个项目添加点击事件,用AJAX加载对应的ACF字段内容,在页面弹窗或指定区域展示
  • 或者在灵活内容里添加一个「项目详情」布局,通过URL参数判断要展示哪个项目,在page.php里处理逻辑

二、在单页(Portfolio)的灵活内容中使用ACF Pro展示Projects

既然你的Portfolio页面是用page.php里的灵活内容作为页面构建器,那可以给灵活内容添加一个专属的「项目列表」布局,然后在这个布局里调用Projects数据:

  1. 添加灵活内容布局
    在ACF后台创建灵活内容字段时,新增一个布局(比如命名为「项目展示行」),可以在这个布局里加一些配置字段:
  • 项目数量(数字字段,控制显示多少个项目)
  • 排序方式(下拉字段,比如按发布时间、标题排序)
  1. 在page.php中处理这个布局的输出
    找到你在page.php里循环输出灵活内容的代码块,添加针对「项目展示行」的逻辑:
<?php if( have_rows('flexible_content_field_name') ): ?>
    <?php while( have_rows('flexible_content_field_name') ): the_row(); ?>

        <!-- 其他布局的代码... -->

        <?php if( get_row_layout() == 'project_display_row' ): ?>
            <section class="project-section">
                <h2><?php the_sub_field('section_title'); ?></h2>
                <?php
                // 构建WP Query参数
                $args = array(
                    'post_type' => 'projects',
                    'posts_per_page' => get_sub_field('project_count'),
                    'orderby' => get_sub_field('sort_by'),
                    'order' => 'DESC'
                );
                $project_query = new WP_Query($args);
                
                if( $project_query->have_posts() ): ?>
                    <div class="project-grid">
                        <?php while( $project_query->have_posts() ): $project_query->the_post(); ?>
                            <a href="<?php the_permalink(); ?>" class="project-card">
                                <?php if( get_field('project_thumbnail') ): ?>
                                    <img src="<?php the_field('project_thumbnail'); ?>" alt="<?php the_title(); ?>">
                                <?php endif; ?>
                                <h3><?php the_title(); ?></h3>
                                <p><?php the_field('project_short_description'); ?></p>
                            </a>
                        <?php endwhile; ?>
                    </div>
                    <?php wp_reset_postdata(); // 重置查询,避免影响主循环 ?>
                <?php endif; ?>
            </section>
        <?php endif; ?>

    <?php endwhile; ?>
<?php endif; ?>

这段代码里:

  • flexible_content_field_name 替换成你实际的灵活内容字段名
  • project_display_row 替换成你创建的「项目展示行」布局的名称
  • 调用了Projects的ACF字段(比如project_thumbnail、project_short_description),你可以根据自己的字段名修改
  1. 自定义跳转行为(可选)
    如果不想跳转到详情页,把上面的<a href="<?php the_permalink(); ?>">改成<div class="project-card" data-project-id="<?php the_ID(); ?>">,然后用JavaScript监听点击事件,通过AJAX请求加载项目的ACF详情内容,在页面上展示(比如弹出模态框)。

额外提示

  • 如果你还没为Projects自定义文章类型创建单独的模板,可以新建single-projects.php文件,在这个文件里用ACF字段输出项目的详情内容,这样点击项目后跳转到的页面就会用这个模板渲染
  • 记得刷新WordPress的固定链接设置(设置→固定链接,直接保存即可),避免自定义文章类型的URL出现404错误

内容的提问来源于stack exchange,提问作者Aurelian Spodarec

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:20:37