• This repository has been archived on 24/Jan/2024
  • Stars
    star
    181
  • Rank 204,396 (Top 5 %)
  • Language
    PHP
  • Created 10 months ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Twenty Twenty-Four

Welcome to the development repository for the default theme that will launch with WordPress 6.4.

2023

Twenty Twenty-Four is built as a block theme. The theme aims to ship with as little CSS as possible: our goal is for all theme styles to be configured through theme.json and editable through Global Styles. The theme development team will work closely with Gutenberg contributors to build design tools in the block editor that enable this goal.

You can view a demo of this theme at 2024.wordpress.net, which is synced to trunk branch of this repository every 2 minutes.

Contributing

If you would like to contribute code, the list of open issues is a great place to start looking for tasks β€” but contributing is not just for developers. There are many opportunities to help with testing, triage, discussion, design, building patterns and templates, and more.

If you'd like to help with triage, let @luminuu and @MaggieCabrera know in WordPress.org's Slack instance. We'll help you get set up with the ability to add labels to issues and PRs.

Getting Started

Development

  1. Set up a WordPress instance, we recommend wp-env or Local as an alternative to docker. Alternatively you can use WordPress Playground to test the theme directly in the browser.
  2. Clone / download this repository into your /wp-content/themes/ directory.
  3. Install and activate the Gutenberg plugin.

Also, consider enabling development mode with define( 'WP_DEVELOPMENT_MODE', 'theme' ); in your wp-config.php. This will help minimize caching of theme.json while you're developing.

Design

The theme is designed in Figma. You can contribute by designing one of the patterns planned for Twenty Twenty-Four.

As a default WordPress theme, it is important to leverage the existing design system wherever possible. That is the font sizes, color palette choices, and spacing presets. All patterns and templates will leverage this systems extensively.

Token Cheat-sheet

Colors

Figma Token CSS Variable color name slug decorative visual of color
Base/One --wp--preset--color--base #f9f9f9 Base base
Base/Two --wp--preset--color--base-2 #ffffff Base / Two base-2
Base/Three --wp--preset--color--base-3 #00000025 Base / Three base-3
Contrast/One --wp--preset--color--contrast #111111 Contrast contrast
Contrast/Two --wp--preset--color--contrast-2 #636363 Contrast / Two contrast-2
Contrast/Three --wp--preset--color--contrast-3 #a4a4a4 Contrast / Three contrast-3
Accent/One --wp--preset--color--accent #cfcabe Accent accent
Accent/Two --wp--preset--color--accent-2 #c2a990 Accent / Two accent-2
Accent/Three --wp--preset--color--accent-3 #d8613c Accent / Three accent-3
Accent/Four --wp--preset--color--accent-4 #b1c5a4 Accent / Four accent-4
Accent/Five --wp--preset--color--accent-5 #b5bdbc Accent / Five accent-5

Layout presets

theme.json preset theme.json value
contentSize 620px
wideSize 1280px

Spacing presets

Figma Token CSS Variable theme.json value theme.json slug
Spacing/10 --wp--preset--spacing--10 min(1rem, 2vw) 10
Spacing/20 --wp--preset--spacing--20 min(1.5rem, 3vw) 20
Spacing/30 --wp--preset--spacing--30 min(2.5rem, 5vw) 30
Spacing/40 --wp--preset--spacing--40 min(4rem, 8vw) 40
Spacing/50 --wp--preset--spacing--50 min(6.5rem, 13vw) 50
Spacing/60 --wp--preset--spacing--60 min(10.5rem, 24vw) 60

Pattern creation guidelines

Reference guide for patterns in the handbook. A few things to have in mind when building patterns for the default theme:

  • Category selection

When creating WordPress block patterns, it's important to carefully choose the appropriate category for your pattern. WordPress provides a set of default categories, each serving a specific purpose. Let's stick to using the default categories. We can add multiple of them separating them by commas. The list of the slug is here.

  • Hiding patterns from the inserter

You can control the visibility of your block pattern in the inserter by adding the following line of code when registering the pattern:

We do this for patterns we don't want the user to access via the inserter or the pattern library. This is usually the case for utility patterns that we create for translation purposes such as the 404 pattern.

We do this by adding the following line:

* Inserter: no

Let's prefix hidden patterns using hidden- when we name the pattern file.

  • Different translation functions and when to use them

WordPress block patterns should be internationalized to make them accessible to a global audience.

esc_html_x(): Employ this function when you need to translate and escape text for display within HTML. It's useful for multilingual websites as it provides translation support while also ensuring HTML safety.

esc_html__(): Similar to esc_html_x(), use this function for translating and escaping HTML-embedded text. It's a simpler version when context-specific translations are not needed.

esc_attr__() and esc_attr_x(): Use this function to escape and sanitize text meant for HTML attributes, such as image source URLs or link targets. It helps prevent security vulnerabilities by ensuring that user inputs are safe for use in attributes.

esc_html_e: works just like esc_html__() but you don't need to use echo to output the string

When we have simple HTML tags in our translatable strings we would use echo wp_kses_post( __( 'Lorem ipsum <em>Hello</em> dolor sit amet.', 'texdomain' ) );. This syntax is clearer for translators than using sprintf() and it allows them to remove the markup if it doesn't work on their own language.

These functions enhance security and support localization efforts in WordPress block patterns, ensuring that text is safe and can be easily translated.

  • Patterns with images

To create dynamic image links in your block patterns, utilize the get_template_directory_uri() function. This function retrieves the URL of the current theme's directory, ensuring that the image links are relative to the theme and work correctly even if the website's directory structure changes or if we are using a child theme. This is essential for maintaining the stability and portability of your patterns.

Make sure to add alt text to your images and to make sure to remove the IDs from them. An example would be:

<!-- wp:image {"id":125,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image size-large"><img src="http://wp-stable.test/wp-content/themes/twentytwentyfour/assets/images/project.webp" alt="" class="wp-image-125"/></figure>
<!-- /wp:image -->

would turn into

<!-- wp:image {"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image size-large"><img src="<?php echo esc_url( get_template_directory_uri() ); ?>/assets/images/project.webp" alt="<?php echo esc_attr_x( 'Picture of a building', 'Alt text for project picture', 'twentytwentyfour' ); ?>"/></figure>
<!-- /wp:image -->
  • Use of Post Types, Block Types and Template Types

We use Block Types when the pattern uses custom markup for a specific block or one of the default template parts (footer and header). Using this will suggest the pattern when someone inserts said block or template part. This is commonly used for query, post-content block, template or footer.

Template Types is used when we want our pattern as a suggestion for a specific template. In this case we provide the template slug (404, home, single...)

Post Types is used to restrict the post type we want the pattern to be used for. commonly used for full page patterns.

  • Spacing, colors and font sizes

Using presets for spacing, font sizes, and colors in WordPress block patterns is preferred over hardcoded values for three key reasons:

Consistency: Presets ensure a uniform design across the theme, promoting a cohesive visual identity.

Scalability: They make global design changes easier during development, saving time and effort.

Accessibility: Presets facilitate adherence to accessibility standards, making your patterns more usable and readable for a wider audience.

  • Other tips

In the same way we remove IDs from image blocks, we need to remove queryId from query blocks too. Also, if any of our template parts have a theme attribute, that needs to remove too.

<!-- wp:query {"queryId":18,"query":{"perPage":8,"pages":0,"offset":0,"postType":"post","order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":true}} -->

turns into

<!-- wp:query {"query":{"perPage":8,"pages":0,"offset":0,"postType":"post","order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":true}} -->

and

<!-- wp:template-part {"slug":"header-portfolio","theme":"twentytwentyfour","area":"header","tagName":"header"} /-->

turns into

<!-- wp:template-part {"slug":"header-portfolio","area":"header","tagName":"header"} /-->

If we are constantly assigning properties to the same block over and over again (ie: border radius to images), consider moving those properties to the theme.json.

When building full page patterns, let's prefix them by using page-

One way to control the order in which patterns are displayed in the inserter is by changing the name of the file (they are sorted alphabetically)

Tips for Contributors

  • As stated above, a goal for the theme is to have as little CSS as possible. Much of the theme's visual treatments should be handled by the Block Editor and Global Styles. As a general rule, if multiple themes would benefit from the CSS you're considering adding, it might reasonably be provided by Gutenberg instead. Let's include clear code comments for any CSS we do include.
  • Similarly, let's refrain from building any custom-built PHP or JavaScript-based workarounds for functionality that might reasonably be provided by the Block Editor, let's keep the code simple to help with future maintenance.
  • In accordance to those last two bullets, this theme has no required build process.
  • If you've helped contribute to the theme in any way, you deserve credit! Folks will be updating CONTRIBUTORS.md periodically with names of contributors, but feel free to open a PR or issue if we leave someone out.

Requirements

  • Gutenberg plugin (latest)
  • WordPress 6.4+
  • PHP 7.0+
  • License: GPLv2 or later

Some theme features / PRs may require Gutenberg trunk and will be described or tagged accordingly.

Testing

Optionally, to run tests locally, you will also need:

  • Node.js
    • It's recommended that you install Node through nvm, since it's the tool used by the CLI to select the node version being used.
  • Composer

You can install the test-specific development dependencies by running npm i && composer install. The following test commands are then available:

  • npm run lint:css lints and autofixes where possible the CSS
  • composer run analyze [filename.php] statically analyzes PHP for bugs
  • composer run lint checks PHP for syntax errors
  • composer run standards:check checks PHP for standards errors according to WordPress coding standards
  • composer run standards:fix attemps to automatically fix errors

Resources

Timeline

The theme will be released with WordPress 6.4 and follow the key dates / milestones associated with its development schedule.

More Repositories

1

WordPress

WordPress, Git-ified. This repository is just a mirror of the WordPress subversion repository. Please do not send pull requests. Submit pull requests to https://github.com/WordPress/wordpress-develop and patches to https://core.trac.wordpress.org/ instead.
PHP
18,713
star
2

gutenberg

The Block Editor project for WordPress and beyond. Plugin is available from the official repository.
JavaScript
9,662
star
3

Requests

Requests for PHP is a humble HTTP request library. It simplifies how you interact with other sites and takes away all your worries.
PHP
3,557
star
4

WordPress-Coding-Standards

PHP_CodeSniffer rules (sniffs) to enforce WordPress coding conventions
PHP
2,383
star
5

wordpress-develop

WordPress Develop, Git-ified. Synced from git://develop.git.wordpress.org/, including branches and tags! This repository is just a mirror of the WordPress subversion repository. Please include a link to a pre-existing ticket on https://core.trac.wordpress.org/ with every pull request.
PHP
2,206
star
6

wordpress-playground

Run WordPress in the browser via WebAssembly PHP
JavaScript
1,522
star
7

gutenberg-examples

Examples for extending WordPress/Gutenberg with blocks.
JavaScript
1,182
star
8

two-factor

Two-Factor Authentication for WordPress.
PHP
684
star
9

gutenberg-starter-theme

A simple theme for testing Gutenberg.
PHP
675
star
10

dashicons

Dashicons, the WordPress admin icon font. For the official resource, please see the WordPress Developer Hub.
JavaScript
558
star
11

theme-experiments

Experimenting with themes made out of blocks.
CSS
542
star
12

book

Our book about WordPress. Version 1
512
star
13

twentytwentytwo

Twenty Twenty-Two, the default WordPress theme that will launch with WordPress 5.9.
PHP
409
star
14

twentysixteen

Twenty Sixteen is a theme now included in all WordPress installs. To report any issues please go here: https://core.trac.wordpress.org/newticket
CSS
326
star
15

twentynineteen

Twenty Nineteen is a theme now included in all WordPress installs. To report any issues please go here: https://core.trac.wordpress.org/newticket
CSS
324
star
16

theme-check

Theme Check plugin
PHP
321
star
17

performance

Performance plugin from the WordPress Performance Group, which is a collection of standalone performance modules.
PHP
310
star
18

twentytwenty

Twenty Twenty is included in Core as of WordPress 5.3 πŸŽ‰ To report any issues, please go here: https://core.trac.wordpress.org/newticket
CSS
300
star
19

create-block-theme

A WordPress plugin to create block themes
JavaScript
285
star
20

phpdoc-parser

Documentation parser powering developer.wordpress.org
PHP
232
star
21

Learn

WordPress.org Learn - The canonical source for the code and content behind https://learn.WordPress.org
PHP
218
star
22

meta-environment

A collection of scripts that provision the official WordPress.org websites into a Varying Vagrant Vagrants installation.
PHP
188
star
23

plugin-check

A repository for the new Plugin Check plugin from the WordPress Performance team
PHP
183
star
24

twentyseventeen

Twenty Seventeen is a theme now included in all WordPress installs. To report any issues please go here: https://core.trac.wordpress.org/newticket
CSS
182
star
25

application-passwords

PHP
182
star
26

wp-feature-notifications

WP Feature Notifications - a proposal to modernise the way in which WordPress handles emails, admin notices and user notifications
PHP
182
star
27

openverse

Openverse is a search engine for openly-licensed media. This monorepo includes all application code.
Python
179
star
28

twentytwentyone

Ongoing development of Twenty Twenty-One, the new default WordPress theme slated for 5.6.
PHP
178
star
29

health-check

Health Check is a WordPress plugin that will perform a number of checks on your WordPress install to detect common configuration errors and known issues.
PHP
168
star
30

sqlite-database-integration

Feature Plugin to add SQLite support to WordPress. Under Development.
PHP
163
star
31

classic-editor

A plugin to restore the Classic Editor in WordPress.
PHP
147
star
32

wp-movies-demo

Demo of the Interactivity API
PHP
144
star
33

secure-swfupload

A fork of the long-abandoned SWFUpload project, maintained by WordPress and others to ensure that a secure version of SWFUpload exists. Report security vulnerabilities to [email protected].
ActionScript
133
star
34

twentytwentythree

Twenty Twenty-Three, the default WordPress theme sporting many styles that will launch with WordPress 6.1.
HTML
125
star
35

wporg-plugin-guidelines

WordPress.org Plugin Directory Guidelines
121
star
36

pattern-directory

The WordPress Block Pattern Directory
PHP
115
star
37

block-interactivity-experiments

⚠️ WARNING: This repository is no longer active. The development and discussions have been moved to the Gutenberg repository.
PHP
110
star
38

wordcamp.org

WordCamps are casual, locally-organized conferences covering everything related to WordPress.
PHP
109
star
39

HelpHub

The WordPress user documentation portal
PHP
108
star
40

browsehappy

PHP
101
star
41

Security-White-Paper

The WordPress Security White Paper, available directly on the WordPress.org site at https://wordpress.org/about/security/
HTML
94
star
42

packages

Collection of JS modules and tools for WordPress development
JavaScript
87
star
43

playground-tools

TypeScript
86
star
44

wordpress.org

WordPress.org Meta, Git-ified. Synced from git://meta.git.wordpress.org/ This repository is just a mirror of the WordPress Meta subversion repository. Please include a link to a pre-existing ticket on https://meta.trac.wordpress.org/ with every pull request.
PHP
85
star
45

slides

Slides: Presentations with WordPress
JavaScript
82
star
46

servehappy-resources

Third-party articles and specific tutorials on PHP upgrades.
78
star
47

block-development-examples

Practical examples for building WordPress blocks and extending the Editor.
JavaScript
78
star
48

wordpress-importer

The WordPress Importer
PHP
76
star
49

Advanced-administration-handbook

WordPress Advanced Administration Handbook. This handbook will have the most technical, general, documentation about WordPress.
76
star
50

openverse-api

The Openverse API allows programmatic access to search for CC-licensed and public domain digital media.
Python
74
star
51

Documentation-Issue-Tracker

Issue Tracker for the WordPress Documentation team.
72
star
52

wpcs-docs

WordPress Coding Standards Docs
71
star
53

openverse-frontend

The gateway to the Openverse. Openverse is a search tool for CC-licensed and public domain content across the internet.
Vue
71
star
54

WP-Reasons

A public domain marketing flyer/brochure about the reasons to use WordPress, brought to you by some members of the WordPress community.
HTML
70
star
55

wp-lazy-loading

Feature plugin for testing and experimenting with the "loading" HTML attribute.
PHP
69
star
56

hosting-handbook

WordPress Hosting Team Handbook
PHP
67
star
57

revisions-extended

PHP
66
star
58

phpunit-test-runner

PHP
63
star
59

wp-plugin-dependencies

WordPress Feature Project: Plugin Dependencies
PHP
62
star
60

wporg-code-analysis

An experiment.
PHP
59
star
61

wpdev-docker-images

Docker images for use with the Core local development environment.
Dockerfile
57
star
62

wporg-main-2022

A block-based child theme for WordPress.org, plus local environment
PHP
57
star
63

openverse-catalog

Identifies and collects data on cc-licensed content across web crawl data and public apis.
Python
56
star
64

wp-autoupdates

Feature plugin building a UI for opting-in to plugin, theme, and core auto-updates.
PHP
56
star
65

servehappy

Information page about PHP versions and updates, to be used through the WordPress.org project.
53
star
66

community-themes

A collection of Block Themes built by the WordPress community.
HTML
53
star
67

wporg-developer

WordPress.org Developer theme
PHP
50
star
68

data-liberation

49
star
69

grunt-patch-wordpress

Patch Trac based projects
JavaScript
47
star
70

wporg-mu-plugins

Development of the Global Header and other mu-plugins used on WordPress.org.
PHP
47
star
71

WordPress-Documentation-Style-Guide

Style Guide for WordPress documentation.
46
star
72

press-this

Press This is a little tool that lets you grab bits of the web and create new posts with ease. It will even allow you to choose from images or videos included on the page and use them in your post. Use Press This as a quick and lightweight way to highlight another page on the web.
CSS
44
star
73

design-experiments

A simple plugin for WP-Admin design experiments. Brought to you by the WordPress Design Team.
CSS
44
star
74

wp20-book

Our book about WordPress. Version 2
42
star
75

plugin-check-legacy

Work in progress of a "Plugin Check" plugin, this is in development and is not final.
PHP
39
star
76

better-code-editing

[βœ… Merged into 4.9-alpha] Better Code Editing WordPress plugin
CSS
37
star
77

five-for-the-future

Plugins and themes for the Five for the Future subsite
PHP
35
star
78

css-audit

JavaScript
34
star
79

developer-blog-content

In this GitHub space, WordPress team coordinate content to be published on the Developer Blog. Discussion and montly meetings (first Thu) in WP Slack #core-dev-blog
33
star
80

rollback-update-failure

Feature plugin to test zip rollback of plugin/theme update failures.
PHP
31
star
81

meeting-calendar

The plugin powering https://make.wordpress.org/meetings/
PHP
30
star
82

theme-review-action

JavaScript
28
star
83

wporg-news-2021

The WordPress.org News Theme
SCSS
28
star
84

phpunit-test-reporter

PHP
27
star
85

block-theme-examples

A repository of feature examples for block themes.
PHP
27
star
86

block-directory

Block library: Timeline and plan: https://make.wordpress.org/design/2019/04/26/block-library-installing-blocks-from-within-gutenberg/
27
star
87

gutenberg.run

Gutenberg live branch preview provisioning service
JavaScript
25
star
88

wporg-two-factor

2FA for WordPress.org accounts
JavaScript
24
star
89

Marketing-Team

The central repository for the WordPress Marketing Team
22
star
90

contributor-day-handbook

21
star
91

openverse-browser-extension

A cross-browser extension that lets you search, filter, and use openly-licensed images.
JavaScript
21
star
92

blueprints-library

PHP
20
star
93

wporg-showcase-2022

The official theme of the WordPress.org showcase.
PHP
18
star
94

spain-handbook

Manuales de la Comunidad de WordPress EspaΓ±a (Handbook)
15
star
95

google-fonts-to-wordpress-collection

Gets the Google fonts collection and transform it to a WordPress font library collection, including SVG previews
JavaScript
15
star
96

wporg-documentation-2022

PHP
14
star
97

wporg-parent-2021

SCSS
14
star
98

block-course-theme

HTML
14
star
99

Community

WordPress Community Team Projects and Plans | https://make.wordpress.org/community/
14
star
100

classic-widgets

A plugin to restore the Classic Widgets in WordPress.
PHP
14
star