概要
serialize_block
フィルタは、ブロック情報をシリアライズする際に使用されます。このフィルタは、ブロックをデータベースに保存する前に、そのデータを変更したり、拡張したりするために活用されます。また、フォームやAPIレスポンスとしてブロックデータを出力する際にも利用されることが一般的です。
このフィルタは以下のような機能を実装する際に特によく使われます:
- カスタムデータの追加
- フィールドのプレフィックスやサフィックスの追加
- シリアライズされたデータのフォーマット変更
- 特定の条件に基づくブロックのフィルタリング
- ブロックのデータ型の変換
- 開発者が定義したカスタムブロックのデータ整形
- データベースに保存する前のデータ検証
- 外部APIとの連携やデータの交換
フィルタの構文は以下の通りです:
apply_filters( 'serialize_block', $block );
パラメータ
- $block: シリアライズされるブロックの情報(配列)。
戻り値
- フィルタ処理されたブロックの情報(配列)。
関連する関数
バージョン情報
serialize_block
フィルタは、WordPress 5.0以降で使用可能です。
コアファイルのパス
wp-includes/blocks.php
この関数のアクションでの使用可能性
アクション | 使用例 |
---|---|
mu_plugin_loaded | |
registered_post_type | |
plugins_loaded | |
wp_roles_init | |
setup_theme | |
after_setup_theme | |
set_current_user | |
init | |
register_sidebar | |
wp_loaded | |
send_headers | |
parse_query | |
pre_get_posts | |
wp | |
template_redirect | |
get_header | |
wp_head |
サンプルコード
1. 基本的なシリアライズの変更
add_filter('serialize_block', function($block) {
// カスタムデータを追加
$block['attrs']['customAttribute'] = 'Custom Value';
return $block;
});
このサンプルコードは、シリアライズするブロックにカスタム属性を追加しています。これにより、ブロックがデータベースに保存される際に特定の値を持つカスタム属性が含まれるようになります。
2. シリアライズされたデータのフォーマットを変更
add_filter('serialize_block', function($block) {
// シリアライズされたフォーマットを変更
$block['innerHTML'] = '<div class="custom-format">' . $block['innerHTML'] . '</div>';
return $block;
});
このコードは、シリアライズされたブロックの内部HTMLをラップしてカスタムフォーマットを適用します。
3. 特定条件下でのデータのフィルタリング
add_filter('serialize_block', function($block) {
// 特定のブロックタイプの場合のみ
if ($block['blockName'] === 'core/heading') {
unset($block['attrs']['className']); // 不要なクラスを削除
}
return $block;
});
ここでは、特定のブロックタイプ(見出しブロック)に対して属性をフィルタリングしています。
4. データベース保存前の検証
add_filter('serialize_block', function($block) {
// 特定の条件に基づいてエラーチェック
if (empty($block['attrs']['title'])) {
wp_die('タイトルは必須です。');
}
return $block;
});
このサンプルでは、タイトルが空の場合にエラーメッセージを表示して、データベースへの保存を防ぎます。
5. 外部APIとの連携
add_filter('serialize_block', function($block) {
// 外部APIにデータを送信
$response = wp_remote_post('https://example.com/api', [
'body' => json_encode($block),
]);
return $block; // 変更はないため元のブロックを返す
});
このコードでは、シリアライズされたブロック情報を外部APIに送信しています。くれぐれもAPIからの応答を確認するためのエラーチェックを追加することが推奨されます。