Hozokit - Theme Building Framework for WordPress

Overview

Hozokit logo.

Hozokit - Theme Building Framework for WordPress

Hozokit gives you the power to create unique WordPress themes without the WordPress hassle.

By combining modern web technologies and a component based architecture, Hozokit is a theme building framework structured clearly for both, long-time WordPress developers and beginners.

The benefit of Hozokit is in the setup.

With Gulp built-in, theme development is streamlined from the off, freeing you from arduous project setup by handling configuration and automation tasks for you. Meaning you can dive straight in to your next project. Hozokit automatically bundles styles, transpiles scripts, watches for changes and handles component files. Meaning you can get right to coding.

Hozokit uses Timber which keeps your PHP theme code clean so you can focus on supplying the data and logic, while Twig is used for your HTML output. For styling, SCSS is used in favour of others.

The component based approach helps to streamline development with markup and styling mostly scoped to their own components. Components are scoped to their respective files and can be used on demand by higher order pages such as 'index', 'pages' and other.

Hozokit can also make use of Advanced Custom Fields if you choose. This combination enables the creation of custom Gutenberg blocks without the need to introduce React in the codebase, this can be useful if you would like to stick mostly with HTML, CSS, Javascript and PHP.

This is not a library but can rather be seen as an initial setup to jumpstart the development of custom themes for WordPress.

Documentation

Requirements

  • WordPress 5.0
  • MySQL 8.0.19
  • PHP 7.2.32
  • Node 14.15.1

Setup

Using the Hozokit Generator

One way to create a new project is to use the Hozokit Generator powered by Yeoman.

The generator creates a project folder with a Hozokit theme with the option to install WordPress as well.

Having a PHP server setup and a database to configure WordPress is still required.

npm install -g yo
npm install -g generator-hozokit

Then generate your new project:

yo hozokit

Twig components can also be generated by changing directory into the project:

yo hozokit:component

Further Steps

Once the generator has finished running, the following steps might be required if not done already:

  1. Setup a webserver capable of running PHP and create a mySQL database for WordPress. Read how to install WordPress to learn more.

  2. If dependencies fail to install: Manually install Hozokit Node dependencies for your theme.

    1. Change directory to your-project-name/wp-content/themes/your-project-name
    2. Check you are using Node version 14.15.1 by running node --version
    3. Run npm install to install dependencies
  3. To start development run npm start

Manual install

Download WordPress and copy the template folder to wp-content/themes folder. Rename the template folder to match your chosen theme name.

Create a database and either add the details to a wp-config.php file or setup using the WordPress onboarding.

A webserver with PHP and mySQL installed is required in order to follow these steps.

Navigate to the theme directory and set the Node version to the one available in .nvmrc. In this example the Node Version Manager is used, but other methods of setting the version can be used.

Given that nvm is installed:

# Please check the included .nvmrc to get the correct version number.
nvm install 14.15.1

# Will make use of .nvmrc to set the version.
# There might be a prompt to install the requested Node version if it's not present already.
nvm
Running npm scripts on WSL2 ⚠️

This is required for Windows users who have a WSL2 setup.

There is an issue (described here and here) where Windows Subsystem Linux 2 won't listen to any changes made via a text editor running on Windows.

If you're a WSL2 user, these are the steps we took to solve the issue temporarily until a patch is released:

  1. Install Node for Windows
  2. Install nvm for Windows
  3. Open a Powershell window as an Administrator
  4. On the Powershell, navigate to the theme directory. e.g wp-content/themes/hozokit
  5. Run nvm use 14.15.1 (in this case .nvmrc seems to be ignored so it needs to be specific)
  6. npm install (if not already done)
  7. npm start (to watch changes)

Any other tasks can still run on WSL2, however any Node tasks should be run from the Powershell to avoid issues.


Download and install dependencies (requires Node):

npm install

When changing scripts and styling run the following commands (might require gulp-cli installed globally):

npm start
# or
npm run watch

In order to build without watching for changes:

npm run build

See gulpfile.js for all tasks.

Optional Steps

Create an .env file in the theme folder directory. An .env.example file is provided as a starting point. See related documentation for details.

Hot Reloading can be enabled once the steps above have been followed.

Setup with Docker πŸ‹

  1. Make sure you have Docker installed and running on your machine.
  2. Using the terminal cd into the theme folder directory (e.g wp-content/themes/hozokit) where docker-compose.yml is located.
  3. Run docker compose up --detach in order to get the project running.
  4. Export the production database into an SQL dump with a method of your choice. (This requires access to the server and cPanel) (optional)
  5. Import database using a software of your choice (e.g MySQL Workbench or Table Plus), use the credentials below to connect to the database container. (optional)
  6. Once imported add any plugins to docker/volumes/wordpress/plugins. These can be downloaded from the cPanel file manager. (optional)
  7. Add the uploads folder to docker/volumes/wordpress/uploads. Can also be downloaded from the cPanel file manager. (optional)
  8. Access localhost:8080 via the browser and sign in with one of the users available in the production version of the site.
  9. Make changes in the files and develop your theme.

Database container credentials

IP: 127.0.0.1
PORT: 3307

DATABASE NAME: wordpress
USER: wordpress
PASSWORD: password
ROOT PASSWORD: password

⚠️ These credentials are generated when the container is created and are meant to be used in development only.

Using Docker day to day

  1. Run docker compose up --detach.
  2. Access the project in the browser via localhost:8080.
  3. Make any changes in the files.
  4. Run docker compose down to stop the containers.

Why don't I have to run npm run watch or install Node dependencies? That's because one of the Docker containers has taken care of that for you. See wp-content/themes/hozokit/docker/node.dockerfile to learn more.

Customizing the theme

A starting point is to set the theme name and other information at hozokit/styles/base.scss. A custom screenshot.png can also be added later on to better identify the theme.

Writing markup and setting up components

This implementation uses Timber and most of the markup will be written in Twig, a template engine for PHP that allows you to separate logic markup.

This means that the HTML can include values that come from PHP scrips. Using Timber also abstracts some of the WordPress API in order to make it friendlier to use.

A component will usually live in /templates/components unless it is a part of the WordPress' template page system. Each component is composed of a index.twig and a styles.scss.

For instance a navigation component could be created by adding the two files mentioned before to templates/components/navigation. Then it can be included in pages, become part of other components and be reused as needed.

Adding data to context

The idea behind this pattern is to separate markup from PHP logic. To achieve this we use $context, a PHP associative array that holds the data to be used in templates.

The data available to these templates can be scoped to a WordPress view (index.php, single.php, page.php and so on) or globaly meaning they can be accessed from any template at any time.

To define context for a specific view, we first get the current Timber context and add to it just like adding to any other associative array. Here's an index.php as an example:


   // Get Timber's context.
   $context = Timber::get_context();

   // Add new data to this specific view.
   // In this case the current instance of the post (userful to get the title of the page for example)
   // and an array with all posts
   $context['post'] = new Timber\Post();
   $context['posts'] = Timber::get_posts();

   // Then the Twig template that should be rendered is specified
   // and the $context with the new added values is passed to it. 
   Timber::render( 'index.twig', $context);
?>

Now all values currently present in $context are available to index.twig alongside the new post and posts values we've added in. Here's how to access these values in index.twig:

{{post.title}} {% endfor %} {% endblock %}">
  {% block content %}
    {# Using the post data added to context #}
    <h2>{{post.title}}h2>
    <p>{{post.content}}p>

    <h3>Posts:h3>
    <ol>
      {# Using the posts data added to context #}
      {% for post in posts %}
      <li><a href="{{post.link}}">{{post.title}}a>li>
      {% endfor %}
    ol>
  {% endblock %}

Now the values can be accessed through a variable using dot notation, nice!

However, post and posts won't be available outside index.twig. Sometimes it is useful to have values in $context that can be accessed in any template.

This is useful when, for example, it is needed to display dynamic information on a footer, or perhaps there's a menu that shows in all pages, or the user avatar.

To add data to $context that can be accessed in any template (globally) we need to make use of a filter. Here's an example in functions.php:

  // Adds additional data to the site context.
  // This makes it available in the templates.
  // The filter is required so the data is added at the correct stage.
  add_filter( 'timber/context', function( $context ) {
    # Add the new data here.
    $global_context = array(
      'example' => 'add new entries to this array to make them available anywhere in any Twig template.',
      'user_is_admin' => current_user_can('administrator')
    );
    
    # Merges your additions with the current context.
    $context = $context + $global_context;
    return $context;
  } );

To use it, we can reference it in our templates the same way as before. Here's an updated example of index.twig, notice how example is used but it was not added to context via index.php but via functions.php:

{{post.title}} {% endfor %} {# Added via functions.php and can be accessed in other templates #}
{{example}}
{% endblock %}">
  {% block content %}
    {# Added via index.php #}
    <h2>{{post.title}}h2>
    <p>{{post.content}}p>

    <h3>Posts:h3>
    <ol>
    {# Added via index.php #}
      {% for post in posts %}
      <li><a href="{{post.link}}">{{post.title}}a>li>
      {% endfor %}
    ol>

    {# Added via functions.php and can be accessed in other templates #}
    <blockquote>{{example}}blockquote>
  {% endblock %}

Styling the theme and components

Styles are written in SCSS files and are then merged and converted into a style.css for the browser to understand. There are two strands of files, base files that live in /styles such as base.scss or palette.scss which hold rules that multiple elements and components make use of.

Then there are more indivual files that define styling for a single component. Each component has a styles.scss file attached to it and styles from components can make use of what is defined in base.scss.

When styling components it is important that they have their own class in order to avoid unexpected results in styling as all the rules will be merged into a single file.

When styling components make sure to run npm run watch or npm start from the terminal in order to update styles.

To enable Hot Reloading follow this link for more information.

Creating scripts

Scripts should be imported into /scripts/index.js, ECMAScript 2015+ (ES6) is supported as similar to the styling, scripts are transpiled and then bundled into a single file at assets/scripts/bundle.js.

Scripts can be split into multiple files and imported as needed.

Supporting and maintaining the project

Please feel free to ask any questions, add suggestions or point out bugs by creating an issue. Pull requests are welcome as well! Thank you πŸ™‡πŸ»

Comments
  • SCSS '@import' discouraged in favour of '@use'

    SCSS '@import' discouraged in favour of '@use'

    SASS/SCSS are discouraging and phasing out support for @import rule in favour of the @use rule.

    This makes styling more readable, safer and reduces compile time.

    For more detail see '⚠Heads Up!' notice in the documentation here.

    Read @use rule docs here.

    enhancement invalid 
    opened by arrontp 7
  • Switch SASS to Dart SASS

    Switch SASS to Dart SASS

    Changes:

    • Updates Node dependencies.
    • Makes use of Dart Sass through gulp-sass
    • Converts all @import statements into @use or @forward as recommended in the Sass documentation.
    • Changes to how styles are organised, introducing an abstracts/ directory and a _components.scss and _blocks.scss to include component styles while keeping component folder structure.
    • Component styles no longer compile via concatenation which removes the requirement for a temp.scss to be created. Now they get forwarded from _components.scss.
    • Component and block style files are automatically managed on a watch task. As new style files are added, _components.scss and _blocks.scss will be automatically updated.
    • Removed unused Node packages.
    • Migrated all Gulp tasks to version 4 syntax.
    • Gulp tasks are now in a directory to allow task splitting.

    No longer required to manage font paths

    In previous version of Hozokit there was a dedicated set-font-path mixin to set the correct path for local hosted fonts both on the theme side and the admin side:

    /* A prior version of mixins.scss */
    
    // Sets paths for compiling for blocks or front end.
    $font-paths: (
        base: 'assets/fonts/',
        admin: '../fonts/'
    );
    
    /* Sets font declarations and the paths in which they are declared.
     * This helps setting paths for rendering fonts both on blocks and
     * the front end of the site.
    */
    @mixin set-font-path($path: map-get($font-paths, 'base')) {
      @if map-has-key($font-paths, $path) {
        $offside-path: map-get($font-paths, $path) + 'offside/' !global;
        $karla-path: map-get($font-paths, $path) + 'karla/' !global;
      }
    }
    

    This meant that changing or adding new fonts required the mixin to be updated. This was slightly simplified:

    /* Current version of _fonts.scss */
    $font-path: "assets/fonts/" !default;
    
    // Define the paths for your fonts here, one per variable:
    $offside-path: $font-path + "offside/";
    $karla-path: $font-path + "karla/";
    
    // @font-face rules here...
    

    The font path is now a variable with a default value, meaning it can be changed to a different path for the admin panel:

    @use "abstracts" as a with (
      $font-path: "../fonts/"
    );
    

    This simplifies the code behind setting up hosted fonts and what needs to be removed as well in cases where Adobe or Google Fonts are used via a URL instead.

    Changes in how styles are structured

    Sass version was changed to use Dart Sass which required all @import statements to be deprecated and replaced with either @use or @forward, depending on the use case. The @import functionality is being deprecated in future versions of Sass.

    In previous version styles and partials would be all directly stored in styles/ and components and block each could have their own style.scss which would then get merged during bundling to create a final style.scss:

    .
    β”œβ”€β”€ admin.scss
    β”œβ”€β”€ base.scss
    β”œβ”€β”€ fonts.scss
    β”œβ”€β”€ general.scss
    β”œβ”€β”€ media_queries.scss
    β”œβ”€β”€ mixins.scss
    └── palette.scss
    

    In the current version, variables, mixins, fonts and other utilities are now stored in abstracts/. A _components.scss and _blocks.scss was introduced too (more on this below) and the required comment that defines theme metadata has been moved to its own partial to make sure it prints at the top of the stylesheet:

    .
    β”œβ”€β”€ abstracts
    β”‚   β”œβ”€β”€ _fonts.scss
    β”‚   β”œβ”€β”€ _index.scss
    β”‚   β”œβ”€β”€ _media_queries.scss
    β”‚   β”œβ”€β”€ _mixins.scss
    β”‚   β”œβ”€β”€ _palette.scss
    β”‚   └── _variables.scss
    β”œβ”€β”€ _blocks.scss
    β”œβ”€β”€ _components.scss
    β”œβ”€β”€ admin.scss
    β”œβ”€β”€ base.scss
    β”œβ”€β”€ general.scss
    └── theme_meta.scss
    

    This organises files slightly differently but allow for flexibility when access abstracts:

    // All abstracts listed in /abstracts/_index.scss:
    @use "abstracts" as a;
    
    // Accessing mixins only:
    @use "abstracts/mixins" as m;
    

    Component and block list partials

    As a result of implementing the @use and @forward syntax, components now are forwarded to a _components.scss and blocks to _blocks.scss, respectively. This allows for the compile task to be simplified and not rely on the concatenation of all components to a _temp.scss:

    // Components (this file is self managed by a Gulp task)
    @forward "../templates/components/example/style";
    @forward "../templates/components/footer/style";
    @forward "../templates/components/header/style";
    

    I expect this file to (in most cases) be free from manual edits. As component style.scss are added, renamed and removed the componentForwarding task manages the file automatically. Same for any block specific styles as well.

    opened by csalmeida 6
  • Add Project License

    Add Project License

    Hi, cool project!

    I'd like to contribute, but the project needs a license file first.

    Do you have a license in mind for this project? https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/licensing-a-repository#choosing-the-right-license

    Thanks!

    documentation question 
    opened by zschuessler 1
  • Updates Node to v14.15.1

    Updates Node to v14.15.1

    Updates Node version from v13.0.1 tolts/fermium(version14.15.1`). This allows theme developers to use the current LTS version of Node in their projects.

    • Updates Node to v14.15.1
    • Updates .nvmrc to match current supported version.
    • Updates README where the version number is mentioned to keep it consistent and reduce opportunity for error.
    • Adds requirements list in order to make it clearer what software is needed to run the project.
    opened by csalmeida 1
  • Readme Updates - Notes on managing Node version

    Readme Updates - Notes on managing Node version

    • Notes that Hozokit uses a specific version of NodeJS
    • Gives example of how to set the Node version using nvm
    • Additional instructions for Windows users with a WSL2 setup.
    opened by csalmeida 1
  • V2.0.0

    V2.0.0

    A new release for Hozokit which brings a few changes:

    • Introduces Docker container configuration to allow containerized theme development.
    • Switches Sass to Dart Sass.
    • Introduces the _components.scss and a Gulp tasks which manages it automatically with the aim of improving DX.
    opened by csalmeida 0
  • Support for Docker setup πŸ‹

    Support for Docker setup πŸ‹

    • Adds support to spin up a development environment do develop a Hozokit theme with Docker

    This brings advantages such as:

    • No need to configure or install WordPress, MySQL or Node, this is now all automated.
    • npm install and npm run watch are ran automatically.

    For anyone using Docker you can try it by changing directory into the theme folder and running docker compose up. If environment variables are changed run docker compose restart. To shutdown the containers run docker compose down.

    At the moment the WordPress site can be accessed via localhost:8080 or localhost:2077 if hot reloading is setup.

    opened by csalmeida 0
  • Bump y18n from 3.2.1 to 3.2.2 in /wp-content/themes/hozokit

    Bump y18n from 3.2.1 to 3.2.2 in /wp-content/themes/hozokit

    Bumps y18n from 3.2.1 to 3.2.2.

    Commits
    Maintainer changes

    This version was pushed to npm by oss-bot, a new releaser for y18n since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Adds a license to the project

    Adds a license to the project

    This change adds a GPLv2 license just like Wordpress (addresses #13).

    Wordpress feels strongly that plugins and themes are derivative work and thus inherit the GPL license and Hozokit does fall under the category of a theme.

    Hope Hozokit helps more and more developers creating themes for Wordpress. 🀍

    Resources:

    • https://wordpress.org/about/license/
    • https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html
    • https://choosealicense.com/licenses/gpl-2.0/
    opened by csalmeida 0
  • Adds further steps sections to readme

    Adds further steps sections to readme

    Adds a further steps section to the README for users following the installation path using the generator. The same steps are displayed in the generator at the end of the install.

    opened by csalmeida 0
  • Bump ini from 1.3.5 to 1.3.8 in /wp-content/themes/hozokit

    Bump ini from 1.3.5 to 1.3.8 in /wp-content/themes/hozokit

    Bumps ini from 1.3.5 to 1.3.8.

    Commits
    • a2c5da8 1.3.8
    • af5c6bb Do not use Object.create(null)
    • 8b648a1 don't test where our devdeps don't even work
    • c74c8af 1.3.7
    • 024b8b5 update deps, add linting
    • 032fbaf Use Object.create(null) to avoid default object property hazards
    • 2da9039 1.3.6
    • cfea636 better git push script, before publish instead of after
    • 56d2805 do not allow invalid hazardous string as section name
    • See full diff in compare view
    Maintainer changes

    This version was pushed to npm by isaacs, a new releaser for ini since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Base.scss file not found

    Base.scss file not found

    Setup: Using Hozokit Generator.

    On npm run start the following error occurs at styles.

    Error: File not found with singular glob
    **AT**
    /styles/base.scss
    
    (if this was purposeful, use `allowEmpty` option)
    

    Gulp is looking for this file but doesn't exist from generator.

    Note: this is on main and not v2.0.0

    bug 
    opened by arrontp 1
  • Docker setup does not work out when new components are added

    Docker setup does not work out when new components are added

    When a new component is added or renamed whilst running Hozokit in a Docker container it creates the following issue:

    Warning: file_get_contents(/var/www/html/wp-content/themes/hozokit/templates/components/button/index.twig): failed to open stream: No such file or directory in /var/www/html/wp-content/themes/hozokit/vendor/twig/twig/src/Loader/FilesystemLoader.php on line 145 
    

    How to replicate:

    1. Run an instance of Hozokit in a Docker container.
    2. Render the home page.
    3. Add a new component with an index.twig file and some markup. e.g templates/components/button/index.twig
    4. Include the component in the templates/index.twig so that it tries to render in the homepage.
    5. You should get a failed to open stream warning and the button component won't render.

    Need to work this one out eventually but for now docker compose down && docker compose up -d solves it (document compose restart does not do the trick in this case).

    templates/components/button/index.twig:

    {% block button %}
      <button>Press me!</button>
    {% endblock %}
    

    templates/components/button/style.scss:

    // Empty but it does exist
    

    templates/index.twig:

    {% extends "base.twig" %}
    
    {% block content %}
      <h2>This is index.twig</h2>
      <p>This content block is rendered inside base.twig, which allows the header and footer to be included as well.</p>
    
      {% include "button/index.twig" %}
    
      <h3>Posts:</h3>
      <ol>
        {% for post in posts %}
        <li><a href="{{post.link}}">{{post.title}}</a></li>
        {% endfor %}
      </ol>
    {% endblock %}
    
    opened by csalmeida 0
Releases(v2.0.0)
  • v2.0.0(Feb 1, 2022)

    What's Changed

    • Adds further steps sections to readme by @csalmeida in https://github.com/csalmeida/hozokit/pull/12
    • Adds a license to the project by @csalmeida in https://github.com/csalmeida/hozokit/pull/14
    • Bump y18n from 3.2.1 to 3.2.2 in /wp-content/themes/hozokit by @dependabot in https://github.com/csalmeida/hozokit/pull/16
    • Support for Docker setup πŸ‹ by @csalmeida in https://github.com/csalmeida/hozokit/pull/19
    • Switch SASS to Dart SASS by @csalmeida in https://github.com/csalmeida/hozokit/pull/18

    Full Changelog: https://github.com/csalmeida/hozokit/compare/v1.4.0...v2.0.0

    Source code(tar.gz)
    Source code(zip)
  • v1.4.0(Dec 14, 2020)

    • Adds support for environment variables with a .env.
    • Hot reloading can be configured via .env and no longer requires edits to gulpfile.js.
    • Tidied up functions.php by moving Hozokit specific logic to other files to leave functions.php clear to be used by theme developers.
    • Abstracted Hozokit specific functionality into methods of the Hozokit class.
    • Various updates to readme and documentation.
    Source code(tar.gz)
    Source code(zip)
  • v1.2.0(Nov 30, 2020)

    • Specified Node version in .nvmrc for those who use the Node Version Manager.
    • Added hot reloading as an option when developing the project.
    • Added further setup instructions to README. πŸ“–
    Source code(tar.gz)
    Source code(zip)
  • v1.1.0(Apr 18, 2020)

  • v1.0.0(Jun 18, 2019)

    • Themes can be split into components.
    • Gulp tasks to compile SASS and transpile ES5.
    • Gutenberg blocks support with Timber, using ACF to register them.
    Source code(tar.gz)
    Source code(zip)
Owner
cristiano
Creative Technologist
cristiano
Wordless is a junction between a WordPress plugin and a theme boilerplate that dramatically speeds up and enhances your custom theme creation

Wordless is a junction between a WordPress plugin and a theme boilerplate that dramatically speeds up and enhances your custom theme creation. Some of

weLaika 1.4k Dec 9, 2022
A curated list of Awesome WordPress Theme, Plugins and Framework development Resources and WordPress Communities.

Awesome WordPress A curated list of Awesome WordPress Theme, Plugins and Framework development Resources and WordPress Communities. Inspired by bayand

Dropndot Limited 91 Dec 26, 2022
A custom WordPress nav walker class to fully implement the Twitter Bootstrap 4.0+ navigation style (v3-branch available for Bootstrap 3) in a custom theme using the WordPress built in menu manager.

WP Bootstrap Navwalker This code in the main repo branch is undergoing a big shakeup to bring it in line with recent standards and to merge and test t

WP Bootstrap 3.3k Jan 5, 2023
Twenty Twenty-Two, the default WordPress theme that will launch with WordPress 5.9.

Twenty Twenty-Two Welcome to the development repository for the default theme that will launch with WordPress 5.9. About Twenty Twenty-Two is designed

null 414 Nov 28, 2022
Classy is a framework for building WordPress themes, based on Blade template engine

Classy is a framework for building WordPress themes, based on Blade template engine. It's fast with beautiful architecture that allows you to write le

DigitalKwarts 75 Nov 23, 2022
Rabbit Framework - A modern way of building WordPress plugins

Rabbit Framework - A modern way of building WordPress plugins. About Rabbit Framework is a modern framework designed to be a solid foundation for your

VeronaLabs 8 Nov 20, 2022
WordPress Framework based on parent theme

Cherry Framework The most delicious WordPress framework Fully responsive design, easy install, steady updates, great number of shortcodes and widgets,

Cherry Framework 158 Nov 23, 2022
The WordPress theme powered by the Laravel Framework.

Laravel in WordPress Theme Laravel is a web application framework with expressive, elegant syntax. It's one of the most popular PHP frameworks today.

null 201 Dec 11, 2022
πŸ“¦ A zero-configuration #0CJS developer toolkit for building WordPress Gutenberg block plugins.

create-guten-block is zero configuration dev-toolkit (#0CJS) to develop WordPress Gutenberg blocks in a matter of minutes without configuring React, w

Ahmad Awais ⚑️ 3.1k Dec 23, 2022
A foundation for WordPress Plugin Development that aims to provide a clear and consistent guide for building your plugins.

WordPress Plugin Boilerplate A standardized, organized, object-oriented foundation for building high-quality WordPress Plugins. Contents The WordPress

Devin 7.2k Jan 4, 2023
A WordPress theme switcher for developers

WP Theme Switcher To help you build or preview a new theme directly on your site without affecting your visitors (they always see the default theme wh

WP Clevel 3 Oct 20, 2021
Custom WordPress theme for DotOrg

wd_s Debt Collective Theme Table of Contents Introduction Getting Started Prerequisites Quick Start Advanced Setup Development Contributing and Suppor

The Debt Collective 1 Oct 31, 2022
Sakura🌸: A Wonderful WordPress Theme

Sakura??: A Wonderful WordPress Theme

εΉΌη¨šι¬Όε‘€ 2 Dec 15, 2022
The most powerful all in one, SEO-friendly theme for WordPress.

Help us Become a backer via Patreon. Make one time donation with PayPal. About Seven SERP Theme Seven SERP Theme is an open source WordPress theme. Wi

Seven SERP 3 Nov 19, 2021
Création du thème "mytheme" WordPress from Scratch

<!DOCTYPE html> <html lang="fr"> <head> <meta name="viewport" content="width=device-width" /> <meta http-equiv="Content-Type" content="text/html;

Jules Eulalie 0 Dec 27, 2021
A WordPress theme I developed for metamaxlab.com website.

=== metamaxlab === A WordPress theme I developed for metamaxlab.com website. This theme has compatibility with Bootstrap 5.1, Font Awesome, and Jetp

Gregory Noguera 0 Jul 17, 2022
Advanced Import : One Click Import for WordPress or Theme Demo Data

Advanced Import is a very flexible plugin which convenient user to import site data( posts, page, media and even widget and customizer option ).

Santosh Kunwar 1 Jan 18, 2022
A one-page user-profile WordPress theme

X3P0 - Profile A one-page user-profile WordPress theme. Currently, it ships with a few patterns. More will be added. Credits patterns/artist.php - Pho

X3P0 25 Nov 4, 2022
A completely BLANK WordPress theme for using with Oxygen Builder.

A completely BLANK WordPress "theme" to use with Oxygen Builder. After installation and activation delete all other themes. This theme will never need to be updated.

WebSchematix 10 Aug 26, 2022