Coder Social home page Coder Social logo

medfreeman / wp-theme-starter Goto Github PK

View Code? Open in Web Editor NEW

This project forked from mozaikagency/wp-theme-starter

6.0 3.0 3.0 4.7 MB

WordPress theme starter-kit, build tools included :smile:

License: MIT License

JavaScript 36.65% CSS 13.92% PHP 49.43%

wp-theme-starter's Introduction

The Mozaik WordPress Theme Boilerplate

Travis Build Status

This is a WordPress theme starter-kit meant to offer a first-class developer experience.

Contents

Full Feature List

  • Separate development theme and auto-generated clutter-free production (built) theme
  • Easy enough to port already existing themes over to it
  • gulp build process
    • Dev Mode
      • Auto browser refresh/injection on save (even for php files!) powered by BrowserSync
      • JavaScript module bundling, chunking and sourcemaps powered by Webpack
      • JavaScript ES6+ support via Babel
      • JavaScript linting via eslint
      • SCSS/SASS compilation and sourcemaps powered by libsass
      • SCSS linting via scss-lint (waiting for first stable release of scss-lint)
      • CSS prefixing via autoprefixer
      • SVG sprite generation via svg-sprite
    • Production Mode
      • Minified CSS via cssmin
      • Uglify, dedupe JS via Webpack
      • Theme image optimization via imagemin
      • SVG optimization via svgmin
    • Build process easily extendable
  • NPM and Bower workflows supported
  • Theme Helpers Library (For more details check out the library's README)
    • Responsive images specification implementation
      • Helper function to print WordPress media by attachment id using responsive background images, the picture element or img-srcset-sizes
      • Responsive images polyfill via picturefill
      • Builtin lazyload helper supported by aFarkas/lazysizes
    • BEM Style simplified customizable/extendable nav-menu-walker
    • BEM Style simplified customizable/extendable pagination renderer that easily supports custom queries
    • BEM Style simplified customizable/extendable breadcrumbs renderer that is based on a given menu
    • Utility classes to make it easier working with SVGs and SVG Sprites
  • Battle tested. Used in a multitude of small and large scale projects!

Important Prerequisites

Dev Environment

  1. Have node and npm installed on your system ([email protected])
  2. Have gulp globally installed (gulp@^3.9.0)
  • You can use nvm to manage the node versions installed on your computer
  • You can use npm-check-updates to update the node modules in your theme (Note that updating may break things, so be careful)

Windows

On Windows you may need to do some of the following if you run into trouble when running npm install in this project:

  • Install Python - Install version 2.7 of Python and add it to your path or/and create a PYTHONPATH environment variable.
  • Install Visual Studio (Express Edition is fine) - We will need this for some of modules that are compiled when installing Theme Starter. Download VS Express, get one of the versions that has C++ - Express 2013 for Windows Desktop for example.
  • Set Visual Studio Version Flags - We need to tell node-gyp (something that is used for compiling addons) what version of Visual Studio we want to compile with. You can do this either through an environment variable GYP_MSVS_VERSION. If you are using Express, you have to say GYP_MSVS_VERSION=2013e.

Thanks to Ryanlanciaux

WordPress

  1. Read the WordPress theme development guidelines
  2. Understand the WordPress template hierarchy
  3. Understand the WordPress Loop
  4. Understand how WordPress helps with Data Validation/Sanitization
  5. Read up on the following WordPress core APIs:
  6. Understand when you should use a Custom Functionality Plugin instead of implementing functionality within a theme

JavaScript

  1. This project uses webpack to provide support for modular JS, read up on the functionality & tools it provides

CSS

  1. The boilerplate assumes you are using SCSS to write your styles and compiles to CSS using Libsass
  2. Autoprefixer is used for adding the correct vendor prefixes to the final generated CSS

Development Guidelines

  • Avoid committing the built theme to the project repository
  • Avoid committing the wp-uploads directory to the project repository
  • Avoid making changes directly to the built theme -- Always use the build process
  • In production avoid uploading the theme development directory to a public server
  • It is good practice to enable WP_DEBUG in your wp-config.php file, but only during development

Standard Theme Development Process

Setup

  1. Install WordPress and clear it of unnecessary default themes & plugins
  2. Clone/Download the contents of this repository into a directory in your WordPress wp-content/themes directory (eg: "my-theme_dev") this will be your "dev theme"
  3. Open the terminal and navigate to the dev theme, eg: cd wp-content/themes/<my-theme>_dev
  4. (Note: The next steps require nodejs @5.0.0 and gulpjs @^3.9.0)
  5. Run npm install to install all dev dependencies
  6. Change the project.config.js file with your new theme's configuration
  7. Run gulp build to generate the "built theme" for the first time
  8. Log in to the admin and enable the built theme (Note: The dev theme is not a valid theme, that's fine! Don't delete it or try to enable it!)
  9. Start Developing!

Development

  1. Run gulp to begin the dev build process that uses libsass, browser-sync and webpack
  2. Develop your theme in the /assets and /theme directories, the "built theme" will be generated by gulp
  3. Optional stuff:
    • use npm install --save <module(s)> or bower install --save <module(s)> to easily manage js dependencies, then use var <module> = require('<module>'); or import <module> from '<module>'; anywhere in your js files you want to use them
    • explore the /library directory in the dev theme for anything useful to your project.

Production

  1. Delete files you are not using from inside the /theme directory
  2. Add a screenshot.png
  3. Before deploying run gulp build to generate a production ready version of the built theme
  4. Deploy the built theme directory, not the dev directory

Reading Recommendations

  1. WordPress Developer Documentation
  2. We generally follow the WordPress PHP Coding Standards in our WP code
  3. The build process supports ES6+ JavaScript syntax by using babel.js to transpile ES6+ to ES5.

License

This Theme Boilerplate is licensed under the MIT license see license.txt.

FAQ

1. How do I use jQuery with wp-theme-starter ?

As mentioned above, wp-theme-starter uses webpack to handle concatenating, minifying and optimizing the javascript in the theme. Webpack, like Browserify and RequireJS, is a module loader for javascript and as such requires each module (file) to declare the dependencies it has within it. To use jQuery, or any other global library, in your webpack-ed js you have a couple of choices:

  • Use jQuery as an internal dependency of your bundle
    (this means jQuery will be included in the final JS bundle created)

    1. With the terminal open within the dev theme, type npm install jquery --save or bower install jquery --save to install jquery for the project

    2. In the ./gulp/config/scripts.js file add this line to the top of the file to expose webpack within this file:

       var webpack = require('webpack');
      
    3. Then within the file declare that any instance of $,jQuery or window.jQuery within the project refers to the jQuery package we downloaded earlier. We can achieve this by adding the following to the config object: (it is worth checking out the ./gulp/core/config/scripts.js file for the general structure of the config object)

       ...
       options: {
       	webpack: {
       		defaults: {
       			plugins: [
       				new webpack.ProvidePlugin({
       					'$': 'jquery',
       					'jQuery': 'jquery',
       					'window.jQuery': 'jquery'
       				})
       			]
       		}
       	}
       }
       ...
      
  • Use jQuery as an external package
    (this means jQuery will be requested as a separate resource from the rest of your bundle. Use this when you are working with WordPress plugins that include jquery dependant scripts on the front-end)

    1. Declare jQuery as an external dependency of your main.js in the theme_scripts function in your functions.php file. Something like this:

       wp_enqueue_script( 'main', "$theme_dir/assets/js/main.js", array( 'jquery' ), null, true );
      
    2. In the ./gulp/config/scripts.js file add this line to the top of the file to expose webpack within this file:

       var webpack = require('webpack');
      
    3. Declare jQuery as an external dependency in webpack. Add the following to ./gulp/config/scripts.js in the webpack section of the config:

       ...
       options: {
       	webpack: {
       		defaults: {
       			plugins: [
       				new webpack.ProvidePlugin({
       					'$': 'jquery'
       				})
       			],
       			externals: {
       				jquery: 'window.jQuery'
       			}
       		}
       	}
       }
       ...
      

wp-theme-starter's People

Contributors

apokyro avatar deviledgod avatar greenkeeperio-bot avatar maximilianos avatar medfreeman avatar rizopoulos avatar rogiervanstraten avatar savah avatar stelioschar avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

wp-theme-starter's Issues

security: remove author archive pages

/**
 * Redirect the user
 * 
 * This function is registerd to the template_redirect hook and checks
 * to redirect the user to the homepage
 * 
 */
function disable_author_pages() {
    global $post;

    $author_request = false;
    if ( is_404() ) {
        if ( ! get_query_var( 'author' ) && ! get_query_var( 'author_name' ) ) {
            return;
        }
        $author_request = true;
    }

    if ( is_author() || $author_request ) {
        wp_redirect( home_url(), '301' );
        exit;
    }
}

add_action( 'template_redirect', 'disable_author_pages' );

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.