WordPress
theme.json
A chi è rivolto
Chi si
Chi sviluppa temi
Chi ha sviluppato il proprio tema
A chi è rivolto
Chi si
Chi sviluppa temi
Chi ha sviluppato il proprio tema
Chi no
Chi ha installato un tema di terze parti
A chi è rivolto
Chi si
Chi sviluppa temi
Chi ha sviluppato il proprio tema
Chi no
Chi ha installato un tema di terze parti
A chi è rivolto
Chi si
Chi sviluppa temi
Chi ha sviluppato il proprio tema
Chi no
Chi ha installato un tema di terze parti
A chi è rivolto
Cos'è il formato JSON
{
"chiave": "valore",
"lista": [
"valore 1",
"valore 2",
{...}
]
}
Cos'è il formato JSON
{
"chiave": "valore",
"lista": [
"valore 1",
"valore 2",
{...}
]
}
Cos'è il formato JSON
Cos'è il file theme.json
{
"version": 1,
"settings": {...},
"styles": {...},
"templateParts": [{...}],
"customTemplates": [{...}]
}
Cos'è il file theme.json
theme.json
Cos'è il file theme.json
<?php
declare(strict_types=1);
namespace ItalyStrap\ExperimentalTheme;
function setup():void
load_theme_textdomain( 'textdomain', get_template_directory() . '/languages' );
add_theme_support( 'automatic-feed-links' );
add_theme_support( 'post-thumbnails' );
set_post_thumbnail_size( 1568, 9999 );
add_theme_support( 'wp-block-styles' );
add_theme_support( 'editor-styles' );
add_editor_style(
array(
'./assets/css/blocks.css',
'./assets/css/style-shared.css',
)
);
add_theme_support( 'responsive-embeds' );
}
add_action( 'after_setup_theme', __NAMESPACE__ . '\setup' );
functions.php
Cos'è il file theme.json
add_theme_support( 'editor-color-palette', array(
array(
'name' => esc_attr__( 'Text base color', 'themeLangDomain' ),
'slug' => 'text',
'color' => '#a156b4',
),
array(
'name' => esc_attr__( 'lBody background', 'themeLangDomain' ),
'slug' => 'background',
'color' => '#d0a5db',
),
array(
'name' => esc_attr__( 'Light color', 'themeLangDomain' ),
'slug' => 'light',
'color' => '#eee',
),
array(
'name' => esc_attr__( 'Dark color', 'themeLangDomain' ),
'slug' => 'dark',
'color' => '#444',
),
) );
functions.php
Cos'è il file theme.json
theme.json
{
"version": 1,
"settings": {
"color": {
"palette": [
{
"name": "Text base color",
"slug": "text",
"color": "#a156b4"
},
{
"name": "Body background",
"slug": "background",
"color": "#d0a5db"
},
{...}
]
}
}
}
Cos'è il Global Style
Globale
Per blocco
Dove posizionare il file
Dove posizionare il file
La root del tema
Il file theme.json
va messo qui
theme.json
settings & styles
Theme
add_theme_support() & other settings
Core
default settings & styles
Gerarchia
Global Style Editor
user level
blocks
settings & styles
theme.json
settings & styles
Gerarchia
Struttura del file theme.json
{
"version": 1,
"settings": {...},
"styles": {...},
"templateParts": [{...}],
"customTemplates": [{...}]
}
theme.json
theme.json
{
"version": 1
}
theme.json
Version
Settings
{
"settings": {}
}
theme.json
Custom color SI
Custom color NO
{
"version": 1,
"settings": {
"color": {
"custom": true
}
}
}
theme.json
{
"version": 1,
"settings": {
"color": {
"custom": false
}
}
}
theme.json
{
"version": 1,
"settings": {
"color": {
"custom": false
},
"blocks": {
"core/paragraph": {
"color": {
"custom": true
}
}
}
}
Custom color SI solo per il blocco paragrafo e NO per tutto il resto
theme.json
namespace/block_name
Ctrl+Shift+Alt+M
<!-- wp:paragraph --> === core/paragraph
<!-- wp:overblocks/container --> === overblocks/container
{
"version": 1,
"settings": {
"color": {
"custom": true,
"customDuotone": true,
"customGradient": true,
"duotone": [],
"gradients": [],
"link": false,
"palette": []
},
"custom": {},
"layout": {
"contentSize": "60vw",
"wideSize": "80vw"
},
"spacing": {
"customMargin": false,
"customPadding": false,
"units": [ "px", "em", "rem", "vh", "vw" ]
},
"typography": {
"customFontSize": true,
"customLineHeight": false,
"dropCap": true,
"fontSizes": []
},
"blocks": {
"core/paragraph": {
"color": {},
"custom": {},
"layout": {},
"spacing": {},
"typography": {}
},
"core/heading": {},
"etc": {}
}
}
}
theme.json
{
"version": 1,
"settings": {
"color": {
"duotone": [],
"gradients": [],
"palette": []
},
"typography": {
"fontFamilies": [],
"fontSizes": []
}
}
}
theme.json
- color.duotone: doesn’t generate classes or custom properties.
- color.gradients: generates a single class and custom property per preset value.
-
color.palette:
- generates 3 classes per preset value: color, background-color, and border-color.
- generates a single custom property per preset value
- typography.fontSizes: generates a single class and custom property per preset value.
- typography.fontFamilies: generates a single custom property per preset value
{
"version": 1,
"settings": {
"color": {
"palette": [
{
"name": "Text base color",
"slug": "text",
"color": "#000000"
},
{
"name": "Background",
"slug": "background",
"color": "#ffffff"
}
]
}
}
}
theme.json
body {
--wp--preset--color--text: #000000;
--wp--preset--color--background: #ffffff;
}
.has-text-color{color: var(--wp--preset--color--text) !important;}
.has-background-color{color: var(--wp--preset--color--background) !important;}
index.html
- Variabile CSS: --wp--preset--{preset-category}--{preset-slug} such as --wp--preset--color--text
--: definisce una variabile CSS
wp: namespace delle variabili CSS preset: per indicare che è parte dei preset
color: indica la categoria del preset
text: indica lo slug
Fra un elemento e l'altro si usa -- (doppio trattino medio) come separatore
- Classes: .has-{preset-slug}-{preset-category} such as .has-text-color.
has: è usato come prefisso text: indica lo slug color: indica la categoria del preset
Fra un elemento e l'altro si usa - (singolo trattino medio) come separatore
{
"version": 1,
"settings": {
"color": {
"palette": [
{
"name": "Text base color",
"slug": "text",
"color": "#000000"
},
{
"name": "Body Background",
"slug": "background",
"color": "#ffffff"
}
]
}
}
}
body {
--wp--preset--color--text: #000000;
--wp--preset--color--background: #ffffff;
}
.has-text-color{color: var(--wp--preset--color--text) !important;}
.has-background-color{color: var(--wp--preset--color--background) !important;}
theme.json
index.html
{
"version": 1,
"settings": {
"color": {
"palette": [
{
"name": "Text base color",
"slug": "text",
"color": "#000000"
},
{
"name": "Body background",
"slug": "background",
"color": "#ffffff"
}
]
},
"blocks": {
"core/paragraph": {
"color": {
"palette": [
{
"name": "Text base color",
"slug": "text",
"color": "#044c75"
},
]
}
}
}
}
}
theme.json
Globale
Paragrafo
body {
--wp--preset--color--text: #000000;
--wp--preset--color--background: #ffffff;
}
p {
--wp--preset--color--text: #044c75;
}
.has-text-color{color: var(--wp--preset--color--text) !important;}
.has-background-color{color: var(--wp--preset--color--background) !important;}
p.has-text-color{color: var(--wp--preset--color--text) !important;}
index.html
Globale
Paragrafo
{
"version": 1,
"settings": {
"custom": {...},
"blocks": {
"namespace/block_name": {
"custom": {...}
}
}
}
}
theme.json
body {
--wp--custom--font-size: "var(--wp--preset--font-size--normal)";
--wp--custom--line-height--small: 1.2;
--wp--custom--line-height--medium: 1.4;
--wp--custom--line-height--large: 1.8;
}
p {
--wp--custom--font-size: 2rem;
}
{
"version": 1,
"settings": {
"custom": {
"fontSize": "var(--wp--preset--font-size--normal)",
"lineHeight": {
"small": 1.2,
"medium": 1.4,
"large": 1.8
}
},
"blocks": {
"core/paragraph": {
"custom": {
"fontSize": "2rem"
}
}
}
}
}
theme.json
index.html
--wp--custom--{variable-name}[--{variable-name}]
custom.fontSize
--wp--custom--font-size
custom.lineHeight.small
--wp--custom--line-height--small
=> --wp--preset|custom--*
camelCase => kebab-case
--
Settings.Preset vs Settings.Custom
Why?
{
"version": 1,
"settings": {
"layout": {
"contentSize": "60vw",
"wideSize": "80vw"
}
}
}
theme.json
Content Size
Wide Size
Full Size
Styles
{
"styles": {}
}
theme.json
// ...
// ...
/**
* From theme.json
*/
.wp-core-group { background-color: red; }
// ...
// ...
/**
* From Global Styles UI
*/
.wp-core-group { background-color: blue; }
style.css
// ...
// ...
/**
* From Global Styles UI
* This will override the value from theme.json
*/
.wp-core-group { background-color: blue; }
style.css
/**
* Load style value from Global Styles
*/
const backgroundColor = useStyle( 'color.background' );
block.js
{
"version": 1,
"styles": {
"color": {
"text": "#000"
},
"blocks": {
"core/paragraph": {
"color": {
"text": "#999"
}
},
"core/group": {
"color": {
"text": "#666)"
}
}
}
}
}
theme.json
body {
color: #000;
}
p {
color: #999;
}
.wp-block-group {
color: #666;
}
style.css
{
"version": 1,
"styles": {
"color": {
"text": "#000"
},
"blocks": {
"core/paragraph": {
"color": {
"text": "#999"
}
},
"core/group": {
"color": {
"text": "#666)"
}
}
}
}
}
theme.json
body {
color: #000;
}
p {
color: #999;
}
.wp-block-group {
color: #666;
}
style.css
body
{
"version": 1,
"styles": {
"color": {
"text": "#000"
},
"blocks": {
"core/paragraph": {
"color": {
"text": "#999"
}
},
"core/group": {
"color": {
"text": "#666)"
}
}
}
}
}
theme.json
body {
color: #000;
}
p {
color: #999;
}
.wp-block-group {
color: #666;
}
style.css
body
blocks selector
{
"version": 1,
"styles": {
"color": {
"background": "value",
"gradient": "value",
"text": "value"
},
"spacing": {
"margin": {
"top": "value",
"right": "value",
"bottom": "value",
"left": "value"
},
"padding": {
"top": "value",
"right": "value",
"bottom": "value",
"left": "value"
}
},
"typography": {
"fontSize": "value",
"lineHeight": "value"
},
}
}
theme.json
{
"version": 1,
"styles": {
"color": {...},
"spacing": {...},
"typography": {...},
"elements": {
"link": {
"color": {...},
"spacing": {...},
"typography": {...}
},
"h1": {...},
"h2": {...},
"h3": {...},
"h4": {...},
"h5": {...},
"h6": {...}
},
"blocks": {
"core/group": {
"color": {...},
"spacing": {...},
"typography": {...},
"elements": {
"link": {...},
"h1": {...},
"h2": {...},
"h3": {...},
"h4": {...},
"h5": {...},
"h6": {...}
}
},
"etc": {}
}
}
}
theme.json
Pro vs Cons
Global Styles & settings interface
https://gutenberg-theme.xyz/
Gutenberg Theme.json Creator Experimental
https://bit.ly/3xl5Gsh
ItalyStrap Theme Json Generator
Grazie
Iscriviti
Theme.json WordPress
By overclokk
Theme.json WordPress
- 29