Community생산성 & 협업github.com

워드프레스/wp-블록-개발

워드프레스(구텐베르크) 블록 개발 시 사용: block.json 메타데이터, register_block_type(_from_metadata), 속성/직렬화, supports, 동적 렌더링(render.php/render_callback), 폐기/마이그레이션, viewScript와 viewScriptModule 비교, @wordpress/scripts/@wordpress/create-block 빌드 및 테스트 워크플로우를 다룹니다.

wp-블록-개발란 무엇인가요?

이 스킬은 워드프레스 구텐베르크 블록 개발을 위한 포괄적인 가이드입니다. 개발자는 block.json 메타데이터 정의, register_block_type 및 register_block_type_from_metadata를 사용한 블록 등록, 속성(attributes)과 직렬화(serialization), supports 설정, 동적 렌더링을 위한 render.php 또는 render_callback 활용, 블록 폐기(deprecations) 및 마이그레이션(migrations), viewScript와 viewScriptModule의 차이점을 학습할 수 있습니다. 또한 @wordpress/scripts 및 @wordpress/create-block 도구를 사용한 표준 빌드 및 테스트 워크플로우를 지원합니다. 이 스킬은 CLI 명령어, 코드 예제, 설정 파일 경로 등 원본 기술 용어를 그대로 유지하면서 한국어로 설명하여 워드프레스 블록 개발자에게 실질적인 도움을 제공합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/wordpress/agent-skills/tree/main/skills/wp-block-development

Installed? Explore more 생산성 & 협업 skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

wp-블록-개발은(는) 무엇을 하나요?

워드프레스(구텐베르크) 블록 개발 시 사용: block.json 메타데이터, register_block_type(_from_metadata), 속성/직렬화, supports, 동적 렌더링(render.php/render_callback), 폐기/마이그레이션, viewScript와 viewScriptModule 비교, @wordpress/scripts/@wordpress/create-block 빌드 및 테스트 워크플로우를 다룹니다.

주요 개념

block.json 메타데이터

  • $schema, apiVersion, name, title, category, icon, description, keywords, textdomain 필드를 정의합니다.
  • attributes: 블록 속성과 해당 직렬화 설정을 지정합니다.
  • supports: 블록이 지원하는 기능(예: align, anchor, className, customClassName, html, inserter, multiple, reusable)을 설정합니다.
  • usesContext와 providesContext: 블록 간 컨텍스트 전달을 관리합니다.
  • viewScript, viewScriptModule, editorScript, style, editorStyle, render: 프론트엔드/에디터별 스크립트와 스타일을 지정합니다.

블록 등록

  • register_block_type( __DIR__ . '/build' ): block.json을 기반으로 블록을 등록합니다.
  • register_block_type_from_metadata(): 동일한 기능을 수행하는 대체 함수입니다.
  • 동적 블록은 render_callback 또는 render.php를 통해 PHP로 렌더링합니다.

속성과 직렬화

  • type: string, number, boolean, object, array 등.
  • default: 기본값.
  • source: attribute, html, text, children, query.
  • selector: 속성을 추출할 DOM 선택자.
  • meta: (메타 블록에서) 글 메타 필드와 연결.

supports

  • align: 정렬 옵션.
  • anchor: 앵커 ID.
  • className: 사용자 정의 클래스.
  • customClassName: 사용자 정의 클래스 활성화.
  • html: HTML 편집 허용.
  • inserter: 삽입기 표시.
  • multiple: 여러 번 사용 가능.
  • reusable: 재사용 가능.
  • color, typography, spacing 등: 블록 에디터 UI 제어.

동적 렌더링

  • render.php: 블록의 PHP 렌더링 템플릿.
  • render_callback: register_block_type에 전달되는 콜백 함수. $attributes, $content, $block 인자를 받습니다.

폐기 및 마이그레이션

  • deprecated: 이전 버전의 블록 속성 및 동작을 정의하여 하위 호환성을 유지합니다.
  • 각 폐기 항목은 attributes, supports, save, migrate 속성을 포함합니다.
  • migrate 함수는 이전 속성을 새 속성으로 변환합니다.

viewScript vs viewScriptModule

  • viewScript: 프론트엔드에서 실행되는 표준 JavaScript 파일.
  • viewScriptModule: 프론트엔드에서 실행되는 ES 모듈 형태의 JavaScript 파일.
    • 모듈을 지원하는 브라우저에서 사용됩니다.
    • 필요에 따라 하나 또는 둘 다 사용할 수 있습니다.

빌드 및 테스트 워크플로우

@wordpress/scripts

  • npm run build: 블록을 프로덕션용으로 빌드합니다.
  • npm run start: 개발 모드에서 빌드하고 파일 변경을 감시합니다.
  • npm run format: 코드 포맷을 정리합니다.
  • npm run lint:css: CSS 린트를 실행합니다.
  • npm run lint:js: JavaScript 린트를 실행합니다.
  • npm run packages-update: 워드프레스 패키지를 업데이트합니다.
  • npm run plugin-zip: 플러그인 ZIP 파일을 생성합니다.

@wordpress/create-block

  • npx @wordpress/create-block my-block: 새 블록 플러그인을 생성합니다.
  • npx @wordpress/create-block my-block --namespace my-namespace: 네임스페이스를 지정합니다.
  • npx @wordpress/create-block my-block --template my-template: 사용자 정의 템플릿을 사용합니다.
  • 생성된 구조: src/, build/, block.json, package.json, webpack.config.js 등.

예제

기본 block.json

{
  "$schema": "https://schemas.wp.org/trunk/block.json",
  "apiVersion": 3,
  "name": "my-plugin/my-block",
  "title": "내 블록",
  "category": "widgets",
  "icon": "smiley",
  "description": "내 첫 번째 블록입니다.",
  "attributes": {
    "content": {
      "type": "string",
      "source": "html",
      "selector": "p"
    },
    "alignment": {
      "type": "string",
      "default": "none"
    }
  },
  "supports": {
    "align": true,
    "anchor": true,
    "className": true,
    "color": {
      "background": true,
      "text": true
    }
  },
  "editorScript": "file:./index.js",
  "script": "file:./script.js",
  "viewScript": "file:./view.js",
  "style": "file:./style-index.css",
  "render": "file:./render.php"
}

PHP 등록 (plugin.php)

function my_plugin_register_blocks() {
    register_block_type( __DIR__ . '/build/my-block' );
}
add_action( 'init', 'my_plugin_register_blocks' );

render.php

<?php
$content = $attributes['content'] ?? '';
$alignment = $attributes['alignment'] ?? 'none';
$class_name = 'wp-block-my-plugin-my-block';
if ( $alignment !== 'none' ) {
    $class_name .= ' has-text-align-' . $alignment;
}
?>
<p class="<?php echo esc_attr( $class_name ); ?>">
    <?php echo wp_kses_post( $content ); ?>
</p>

추가 참고

  • 항상 wp_kses_post 또는 esc_* 함수를 사용하여 동적 콘텐츠를 안전하게 출력하세요.
  • 블록의 viewScript는 실제 사용자가 페이지를 볼 때만 로드됩니다.
  • render_callback 또는 render.php를 사용하는 동적 블록은 save 함수가 필요 없으며, 대신 서버 측에서 HTML을 생성합니다.

Individual skills in this repo

This repo contains 13 individual skills — each has its own dedicated page.

wordpress/blueprint

Use when creating, editing, or reviewing WordPress Playground blueprint JSON files. Triggers on mentions of blueprints, playground configuration, or requests to set up a WordPress demo environment.

wordpress/wordpress-router

Use when the user asks about WordPress codebases (plugins, themes, block themes, Gutenberg blocks, WP core checkouts) and you need to quickly classify the repo and route to the correct workflow/skill (blocks, theme.json, REST API, WP-CLI, performance, security, testing, release packaging).

wordpress/wp-abilities-api

Use when working with the WordPress Abilities API (wp_register_ability, wp_register_ability_category, /wp-json/wp-abilities/v1/*, @wordpress/abilities) including defining abilities, categories, meta, REST exposure, and permissions checks for clients.

wordpress/wp-block-themes

Use when developing WordPress block themes: theme.json (global settings/styles), templates and template parts, patterns, style variations, and Site Editor troubleshooting (style hierarchy, overrides, caching).

wordpress/wpds

Use when building UIs leveraging the WordPress Design System (WPDS) and its components, tokens, patterns, etc.

wordpress/wp-interactivity-api

Use when building or debugging WordPress Interactivity API features (data-wp-* directives, @wordpress/interactivity store/state/actions, block viewScriptModule integration, wp_interactivity_*()) including performance, hydration, and directive behavior.

wordpress/wp-performance

Use when investigating or improving WordPress performance (backend-only agent): profiling and measurement (WP-CLI profile/doctor, Server-Timing, Query Monitor via REST headers), database/query optimization, autoloaded options, object caching, cron, HTTP API calls, and safe verification.

wordpress/wp-phpstan

Use when configuring, running, or fixing PHPStan static analysis in WordPress projects (plugins/themes/sites): phpstan.neon setup, baselines, WordPress-specific typing, and handling third-party plugin classes.

wordpress/wp-playground

Use for WordPress Playground workflows: fast disposable WP instances in the browser or locally via @wp-playground/cli (server, run-blueprint, build-snapshot), auto-mounting plugins/themes, switching WP/PHP versions, blueprints, and debugging (Xdebug).

wordpress/wp-plugin-development

Use when developing WordPress plugins: architecture and hooks, activation/deactivation/uninstall, admin UI and Settings API, data storage, cron/tasks, security (nonces/capabilities/sanitization/escaping), and release packaging.

wordpress/wp-project-triage

Use when you need a deterministic inspection of a WordPress repository (plugin/theme/block theme/WP core/Gutenberg/full site) including tooling/tests/version hints, and a structured JSON report to guide workflows and guardrails.

wordpress/wp-rest-api

Use when building, extending, or debugging WordPress REST API endpoints/routes: register_rest_route, WP_REST_Controller/controller classes, schema/argument validation, permission_callback/authentication, response shaping, register_rest_field/register_meta, or exposing CPTs/taxonomies via show_in_rest.

wordpress/wp-wpcli-and-ops

Use when working with WP-CLI (wp) for WordPress operations: safe search-replace, db export/import, plugin/theme/user/content management, cron, cache flushing, multisite, and scripting/automation with wp-cli.yml.

관련 스킬