WordPress 플러그인을 EmDash로 이식하기
PHP 코드를 한 줄씩 번역하지 않고 플러그인의 사용자에게 보이는 동작과 데이터 모델을 유지하세요. WordPress와 EmDash는 책임을 다르게 분담하므로, 각 기능을 사이트 스키마, Astro 코드, 샌드박스 플러그인 또는 신뢰할 수 있는 네이티브 플러그인 중 어디에 포함할지 먼저 결정하세요.
플러그인 코드를 구현하기 전에 creating-plugins을 로드하세요. 이식 작업이 컬렉션, 시드, 쿼리 또는 프론트엔드 템플릿을 변경하는 경우 building-emdash-site을 로드하세요. 해당 스킬은 현재 API를 정의하고 있으며, 이 스킬은 마이그레이션 결정을 다룹니다.
소스 이해하기
플러그인 소스, 설치 동작, 데이터베이스 변경, 훅, REST 엔드포인트, 예약 작업, 관리 화면, 숏코드 또는 블록, 프론트엔드 출력, 권한 및 외부 서비스를 검사하세요. WordPress 특정 구현과 별개로 사용자가 실제로 의존하는 동작을 식별하세요.
기록:
- 필요한 콘텐츠 및 구성 데이터
- 데이터를 변경하거나 게시하는 작업
- 인증 및 신뢰 경계
- 백그라운드 또는 재시도 동작
- 프론트엔드 및 관리자 상호 작용
- 가져오기, 마이그레이션 및 롤백 요구 사항
- 복사된 자산 또는 코드에 대한 라이선스 의무
소스, 예상 동작 또는 대상 EmDash 환경이 누락된 경우, 동등한 기능을 임의로 만들지 말고 그 차이를 보고하세요.
각 책임 할당하기
| WordPress 책임 | EmDash 대상 |
|---|---|
| 커스텀 포스트 타입, 분류 체계 또는 메타데이터 | 사이트 스키마 또는 시드를 통해 생성된 컬렉션, 분류 체계 및 필드 |
| 사이트 전체 표시 설정 | Astro 템플릿이 읽는 사이트 설정 |
| 플러그인 소유 사용자 설정 | ctx.settings; 자격 증명은 암호화된 secret 필드로 선언 |
| 플러그인 소유 커서, 캐시 또는 내부 상태 | 플러그인 범위 ctx.kv |
| 플러그인 소유 쿼리 가능 레코드 | 선언된 ctx.storage.<collection> 저장소 |
| 콘텐츠 발견, 번역 또는 게시 | 기능 권한으로 제한된 ctx.content 및 ctx.schema; 정책 훅과 작업은 별도의 권한을 가짐 |
| 런타임 분류 체계 또는 리디렉션 관리 | 좁은 읽기/쓰기 기능을 가진 ctx.taxonomies 또는 ctx.redirects |
| 댓글 관리 | ctx.comments; 읽기는 개인 데이터를 노출하며, 중재는 예상 상태 사용 |
| WordPress REST 엔드포인트 | 명시적 메서드, 입력, 헤더 및 응답 모드를 가진 선언된 플러그인 라우트 |
| 예약 이벤트 | cron 훅 및 ctx.cron 스케줄링 |
| 관리 페이지 또는 양식 | 샌드박스 플러그인의 경우 Block Kit; 신뢰할 수 있는 네이티브 플러그인의 경우에만 React |
| 포스트 편집기 메타박스 또는 저장 항목 작업 | 비공개 경로의 admin.editorPanels 또는 admin.editorActions |
| 사용자 또는 작성자 조회 | users:read 권한이 있는 ctx.users |
| 외부 HTTP 요청 | network:request 및 allowedHosts 항목이 있는 ctx.http.fetch() |
| 미디어 작업 | 별도의 메타데이터, 바이트 읽기, 메타데이터 쓰기 및 업로드/삭제 권한 |
WP_Query 또는 템플릿 태그 | Astro 사이트 코드의 EmDash 콘텐츠 API |
| 숏코드 또는 편집기 블록 | 가능한 경우 기존 Portable Text 콘텐츠 사용; 커스텀 Portable Text 블록은 신뢰할 수 있는 네이티브 플러그인이 필요함 |
| 원시 head 마크업 또는 스크립트 | 신뢰할 수 있는 네이티브 page:fragments; 레지스트리 설치 플러그인은 검증된 page:metadata만 기여 가능 |
EmDash 시스템 테이블에 직접 접근하여 컬렉션이나 분류 체계를 생성하지 마세요. 공개 스키마, 시드, CLI 또는 관리자 경계를 사용하세요. 존재하지 않는 샌드박스 API를 흉내내기 위해 내부 REST 경로를 사용하지 마세요.
권한을 분리하세요: 미디어 메타데이터 읽기는 바이트 접근을 부여하지 않으며, 중재는 삭제를 부여하지 않으며, 게시 정책은 게시 작업을 부여하지 않으며, 콘텐츠 복원은 일반 콘텐츠 읽기를 부여하지 않습니다.
플러그인 형식 선택하기
기본적으로 샌드박스 플러그인을 사용하세요. 설치 시 신뢰 계약을 통해 이식 가능한 훅, 라우트, 선언된 저장소, 미디어, 네트워크 접근, MCP 도구 및 Block Kit 관리 UI를 지원합니다.
신뢰할 수 있는 네이티브 플러그인은 기능이 호스트 프로세스 접근, React 관리 코드, Astro 렌더링 구성 요소, 원시 페이지 조각 또는 커스텀 Portable Text 블록 정의를 필요로 하는 경우에만 사용하세요. 마이그레이션 계획에 추가 권한 및 배포 제한 사항을 명시하세요.
일부 WordPress 플러그인은 EmDash 플러그인이 필요하지 않습니다. 커스텀 포스트 타입과 프론트엔드 템플릿은 스키마, 시드 데이터 및 Astro 페이지만으로 충분할 수 있습니다. 정적 사이트 구조가 동작을 포함하는 경우 런타임 확장을 추가하지 마세요.
데이터 이동 계획하기
런타임 코드를 작성하기 전에 기존 WordPress 데이터가 어떻게 매핑되는지 설명하세요:
- 포스트 ID, 슬러그, 로캘, 작성자, 상태, 리비전 및 게시 날짜 매핑
- 포스트, 용어, 미디어 및 플러그인 소유 레코드 간의 관계 보존
- 일회성 가져오기와 계속 동기화해야 하는 데이터 구분
- 가져오기를 재시작 가능하게 만들고 중복 감지 방법 정의
- 조정 또는 리디렉션에 필요한 경우 소스 식별자 유지
- 제품 결정 없이 표현할 수 없는 콘텐츠 식별
새 사이트의 초기 스키마 및 샘플 콘텐츠에는 시드 데이터를 사용하세요. 기존 사이트의 프로덕션 데이터에는 가져오기 또는 마이그레이션 경로를 사용하세요. 시드는 백업 또는 지속적 동기화 메커니즘이 아닙니다.
동등한 동작 확인하기
사용자와 런타임이 사용하는 경계를 통해 테스트하세요:
- 콘텐츠 모델 변경에 대한 스키마 및 가져온 데이터 어설션
- 샌드박스 훅, 라우트, 저장소 및 권한에 대한 프로덕션 경계 플러그인 테스트
- 관리 및 프론트엔드 여정에 대한 브라우저 확인
- 소스 기능이 의존하는 경우 재시작, 중복 전달, 인증 및 실패 사례
내부 구조가 아닌 관찰 가능한 동작을 비교하세요. 의도적인 차이점과 지원되지 않는 WordPress 기능을 문서화하세요.
이식 결과물 제공하기
다음을 제공하세요:
- WordPress 동작 및 데이터의 간결한 인벤토리
- 책임 맵 및 샌드박스/네이티브 결정
- 데이터 마이그레이션 또는 시드 계획
- 플러그인 및 사이트 코드 전반의 구현
- 검증 증거 및 알려진 격차
- 재사용된 코드 또는 자산에 대한 저작자 표시 및 라이선스 고지