WordPress 6.1では、異なるデータレイヤーで提供されるtheme.jsonデータにフックするためのサーバーサイドフィルターがいくつか導入されました:

    • wp_theme_json_data_default:WordPressによって提供されるデフォルトデータにフックします
    • wp_theme_json_data_blocks:ブロックによって提供されるデータにフックします
    • wp_theme_json_data_theme:テーマによって提供されるデータにフックします
    • wp_theme_json_data_user:ユーザーによって提供されるデータにフックします

    各フィルターは、対応するレイヤーのデータを持つWP_Theme_JSON_Dataクラスのインスタンスを受け取ります。新しいデータを提供するには、フィルターコールバックがupdate_with( $new_data )メソッドを使用する必要があります。ここで、$new_dataは有効なtheme.json-のような構造です。すべてのtheme.jsonと同様に、新しいデータは、theme.jsonのどのversionを使用しているかを宣言する必要があります。そうすれば、異なる場合にはランタイムのものに正しく移行できます。

    例:

    テーマの新しいカラーパレットを渡し、テキストカラーUIを無効にする方法は次のとおりです:

    1. function wpdocs_filter_theme_json_theme( $theme_json ){
    2. $new_data = array(
    3. 'version' => 2,
    4. 'settings' => array(
    5. 'color' => array(
    6. 'text' => false,
    7. 'palette' => array( /* New palette */
    8. array(
    9. 'slug' => 'foreground',
    10. 'color' => 'black',
    11. 'name' => __( 'Foreground', 'theme-domain' ),
    12. ),
    13. array(
    14. 'slug' => 'background',
    15. 'color' => 'white',
    16. 'name' => __( 'Background', 'theme-domain' ),
    17. ),
    18. ),
    19. ),
    20. ),
    21. );
    22. return $theme_json->update_with( $new_data );
    23. }
    24. add_filter( 'wp_theme_json_data_theme', 'wpdocs_filter_theme_json_theme' );