Folder structures

General rules

To make sure that it is made as easy as possible for other developers to understand the general flow of the folder structure, there are some general rules to follow:

  • A ‘master’ file at the root should exist for any file that has grown too large, and has needed to be divided in to multiple files/directories
  • Files that are not the ‘master’ should be sectioned in to purposefully named directories
  • If a file becomes difficult to scan consider breaking it in to multiple files and, potentially, it’s own directory with multiple files in.

Examples of good practice can be found below.

WordPress Themes

index.php
style.css
script.js
header.php
footer.php
functions.php (master file)

library (main WordPress specific functions for the theme)
    navigation.php
    theme-support.php
    enqueue-scripts.php
    widget-areas.php

partials (reused code used in multiple templates)
    sidebar_left.php
    slider-hero.php

WordPress Plugins

namespace>_main.php (master file)

admin (Backend directory)
    css
        admin-styles.css
    js
        admin-scripts.js
    partials
    class-<namespace>-admin.php (Back-end code)

public (Frontend directory)
    css
        public-styles.css
    js
        public-scripts.js
    partials
    class-<namespace>-public.php (Front-end code)

includes
    class-<namespace>.php (master file for this directory)
    class-<namespace>-activator.php (activation processes)
    class-<namespace>-deactivator.php (deactivation processes)

SCSS directories for child themes

style.scss (master file)

config (nothing in here should render in the .css file)
    _config.scss
    _globals.scss
    _accessibility.scss
    _functions.scss
    _mixins.scss

design (all of the generic theme styling)
    _content.scss
    _header.scss
    _footer.scss
    _menus.scss
    _widgets.scss

features (styles applied to a feature, unique to a page)
    _custom_widget.scss
    _sliding_banner.scss
    _hero_images.scss