能否在WordPress中创建类Strapi Entries的自定义实体?已确认是Custom Post Type
解决方案指引
核心思路:自定义文章类型 + REST API 适配
你提到的Strapi里的Entries概念,对应WordPress里的自定义文章类型(Custom Post Type),完全可以实现你的需求,具体步骤如下:
1. 创建职位招聘的自定义文章类型
在WordPress主题的functions.php文件中添加代码,注册专属的自定义文章类型:
function create_job_post_type() { register_post_type( 'job', array( 'labels' => array( 'name' => __( '职位招聘' ), 'singular_name' => __( '职位' ) ), 'public' => true, 'has_archive' => true, 'supports' => array( 'title', 'editor' ), // 对应你需要的title和description字段 'show_in_rest' => true, // 关键配置:让该类型支持REST API 'rest_base' => 'jobs', // 自定义API端点名称,最终路径类似 /wp-json/wp/v2/jobs ) ); } add_action( 'init', 'create_job_post_type' );
执行这段代码后,WordPress后台会新增「职位招聘」的内容管理入口,同时自动生成对应的REST API端点。
2. 迁移现有职位数据
把原来嵌入在页面HTML块里的职位信息,逐个迁移到新建的「职位」自定义文章中:
- 文章标题栏填写职位名称(对应你需要的
title字段) - 编辑器中填写职位详细描述(对应你需要的
description字段)
3. 获取格式化的API数据
完成迁移后,直接访问/wp-json/wp/v2/jobs就能拿到符合需求的数据结构,返回的每条数据里:
title.rendered对应目标格式的title字符串content.rendered对应目标格式的description字符串
如果需要更精简的响应结构,可以通过钩子过滤API返回内容,示例代码:
function filter_job_rest_response( $response, $post, $request ) { $data = $response->get_data(); $simplified_data = array( 'title' => $data['title']['rendered'], 'description' => $data['content']['rendered'] ); $response->set_data( $simplified_data ); return $response; } add_filter( 'rest_prepare_job', 'filter_job_rest_response', 10, 3 );
替代方案:自定义REST端点(无需迁移数据)
如果暂时不想迁移现有页面的职位数据,可以直接创建自定义REST端点,提取页面中的HTML块内容:
function get_jobs_from_pages() { // 查询包含职位信息的目标页面(可通过页面ID、分类或自定义字段筛选) $pages = get_posts( array( 'post_type' => 'page', 'post__in' => array( 123, 456 ), // 替换为你的目标页面ID ) ); $jobs = array(); foreach ( $pages as $page ) { // 根据你页面中HTML块的实际结构,提取标题和描述 // 示例:假设职位标题是h2标签,描述是紧跟的div容器 $dom = new DOMDocument(); @$dom->loadHTML( $page->post_content ); $title = $dom->getElementsByTagName('h2')->item(0)->nodeValue; $description = $dom->getElementsByTagName('div')->item(0)->nodeValue; $jobs[] = array( 'title' => $title, 'description' => $description ); } return rest_ensure_response( $jobs ); } add_action( 'rest_api_init', function () { register_rest_route( 'custom/v1', '/jobs', array( 'methods' => 'GET', 'callback' => 'get_jobs_from_pages', ) ); } );
访问/wp-json/custom/v1/jobs即可获取提取后的职位数据,注意需要根据你页面的实际HTML结构调整提取逻辑。
内容的提问来源于stack exchange,提问作者Volubyl
相关产品推荐
相关产品推荐

