Skip to content
WordPress plugin allowing static site generation w/ security, performance and cost benefits
Branch: develop
Clone or download
leonstafford Merge pull request #444 from WP2Static/dev_staging_production_ui
adds TypeScript for safer refactoring, whilst adjusting UI and making Staging and Production 1st class concepts
Latest commit 4b29b3d Jun 27, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci
.github Update readme.fr.md Jun 27, 2019
admin fix ids for classes Jun 26, 2019
assets dev, staging, production workflow UI mock Jun 13, 2019
js tidy UI elements Jun 27, 2019
languages update pot May 21, 2019
src wip staging/production UI behaviour Jun 27, 2019
tests cover all of URLRewrite Jun 13, 2019
tools update build script Jun 23, 2019
views wip staging/production UI behaviour Jun 27, 2019
wpassets organize assets May 20, 2019
' tidy;use fileListCount Jun 27, 2019
.eslintrc.json lint admin JS Jun 1, 2019
.gitignore fix require;ignore built JS/map Jun 25, 2019
2q fix ids for classes Jun 26, 2019
LICENSE Revert "mv license file to github dir" Jan 28, 2019
composer.json fix types Jun 27, 2019
composer.lock update composer deps Jun 27, 2019
package-lock.json wip form processors;linting May 31, 2019
package.json wip jQuery -> VanillaJS Jun 26, 2019
phpstan.neon fork WP stubs to suppress conflict with sym73polyfill;use phpstan-strict Jun 1, 2019
phpunit.xml inject AssetDownloader dependency;allow WP mocks;update tests Jun 5, 2019
readme.txt min PHP version to 7.2 Jun 5, 2019
tsconfig.json test sharing instance; enable TS strict Jun 26, 2019
tslint.json dont enforce capital I prefix of Interface names Jun 25, 2019
webpack.config.js wip jQuery -> VanillaJS Jun 26, 2019
wp2static.php bump dev build number Jun 24, 2019

readme.md

WP2Static

CircleCI

WP2Static is a WordPress plugin to generate a static copy of your site and deploy to GitHub Pages, S3, Netlify etc. Increase security, pageload speed and hosting options. Connect WordPress into your CI/CD workflow.

English English | 日本語 日本語 | Français Français | 简体中文 Simplified Chinese | Indonesia Indonesia

Static Site Generator for WordPress

Watch Leon Stafford's talk from WordCamp Brisbane 2018

WordPress as a Static Site Generator

Table of contents

External resources

Opinionated software

  • speed over beautiful code code quality is now prioritized! Thanks @szepeviktor, @arswright!
  • human readable code over short variable names
  • own-code vs adding libraries
  • benchmarking over opinions (performance)
  • less clicks == better UX
  • user configurable options vs developer opinions

WP-CLI commands

  • wp wp2static options --help
NAME

  wp wp2static options

DESCRIPTION

  Read / write plugin options

SYNOPSIS

  wp wp2static options

OPTIONS

  <list> [--reveal-sensitive-values]

  Get all option names and values (explicitly reveal sensitive values)

  <get> <option-name>

  Get or set a specific option via name

  <set> <option-name> <value>

  Set a specific option via name


EXAMPLES

  List all options

    wp wp2static options list

  List all options (revealing sensitive values)

    wp wp2static options list --reveal_sensitive_values

  Get option

    wp wp2static options get selected_deployment_option

  Set option

    wp wp2static options set baseUrl 'https://mystaticsite.com'
  • wp wp2static generate
Generating static copy of WordPress site
Success: Generated static site archive in 00:00:04
  • wp wp2static deploy --test
  • wp wp2static deploy
  • wp wp2static generate
Generating static copy of WordPress site
Success: Generated static site archive in 00:00:04
  • wp wp2static deploy --test
  • wp wp2static deploy
Deploying static site via: zip
Success: Deployed to: zip in 00:00:01
Sending confirmation email...

Hooks

Modify the initial list of URLs to crawl

  • wp2static_modify_initial_crawl_list
  • Filter hook

signature

apply_filters(
    'wp2static_modify_initial_crawl_list',
    $url_queue
);

example usage

function add_additional_urls( $url_queue ) {
    $additional_urls = array(
        'http://mydomain.com/custom_link_1/',
        'http://mydomain.com/custom_link_2/',
    );

    $url_queue = array_merge(
        $url_queue,
        $additional_urls
    );

    return $url_queue;
}

add_filter( 'wp2static_modify_initial_crawl_list', 'add_additional_urls' );

Post-deployment hook

  • wp2static_post_deploy_trigger
  • Action hook

signature

do_action(
  'wp2static_post_deploy_trigger',
  $archive
);

example usage

function printArchiveInfo( $archive ) {
    error_log( print_r( $archive, true ) );
}

add_filter( 'wp2static_post_deploy_trigger', 'printArchiveInfo' );

example response

Archive Object
(
    [settings] => Array
        (
            [selected_deployment_option] => github
            [baseUrl] => https://leonstafford.github.io/demo-site-wordpress-static-html-output-plugin/
            [wp_site_url] => http://example.test/
            [wp_site_path] => /srv/www/example.com/current/web/wp/
            [wp_uploads_path] => /srv/www/example.com/current/web/app/uploads
            [wp_uploads_url] => http://example.test/app/uploads
            [wp_active_theme] => /wp/wp-content/themes/twentyseventeen
            [wp_themes] => /srv/www/example.com/current/web/app/themes
            [wp_uploads] => /srv/www/example.com/current/web/app/uploads
            [wp_plugins] => /srv/www/example.com/current/web/app/plugins
            [wp_content] => /srv/www/example.com/current/web/app
            [wp_inc] => /wp-includes
            [crawl_increment] => 1
        )

    [path] => /srv/www/example.com/current/web/app/uploads/wp-static-html-output-1547668758/
    [name] => wp-static-html-output-1547668758
    [crawl_list] => 
    [export_log] => 
)

Add deployment option to UI

  • wp2static_add_deployment_method_option_to_ui
  • Filter hook

signature

apply_filters(
    'wp2static_modify_initial_crawl_list',
    $options
);

example usage

function add_deployment_option_to_ui( $deploy_options ) {            
    $deploy_options['azure'] = array('Microsoft Azure');                    
                                                                            
    return $deploy_options;                                                 
}                                                                           
                                                                            
add_filter(                                                             
    'wp2static_add_deployment_method_option_to_ui',                     
    'add_deployment_option_to_ui'
);                                                                      

Load deployment option template

  • wp2static_load_deploy_option_template
  • Filter hook

signature

apply_filters(
    'wp2static_load_deploy_option_template',
    $options
);

example usage

function load_deployment_option_template( $templates ) {                                                                                 
    $templates[] =  '/path/to/deployment_settings_block.phtml';                                                                           
                                                                                                                                                
    return $templates;                                                                                                                          
}     
                                                                            
add_filter(                                                             
    'wp2static_load_deploy_option_template',
    'load_deployment_option_template'
);

Register new plugin option key

  • wp2static_add_option_keys
  • Filter hook

signature

apply_filters(
    'wp2static_add_option_keys',
    $options
);

example usage

function addWP2StaticOption( $options ) {
    $new_options = array(
        'baseUrl-azure',
        'azStorageAccountName',
        'azContainerName',
        'azAccessKey',
        'azPath',
    );

    $options = array_merge(
        $options,
        $new_options
    );

    return $options;
}     
                                                                            
add_filter(                                                             
    'wp2static_load_deploy_option_template',
    'addWP2StaticOption'
);

Whitelist plugin option keys

  • wp2static_whitelist_option_keys
  • Filter hook

signature

apply_filters(
    'wp2static_whitelist_option_keys',
    $options
);

example usage

function whitelistWP2StaticOption( $options ) {
    $whitelist_options = array(
      'baseUrl-azure',
    );

    $options = array_merge(
        $options,
        $whitelist_options
    );

    return $options;
}     
                                                                            
add_filter(                                                             
    'wp2static_load_deploy_option_template',
    'addWP2StaticOption'
);

Add deployment option for CLI usage

Every Add-on listens for this event, checks selected deployment method matches Add-on type and triggers the deployment actions specific to the Add-on.

  • wp2static_addon_trigger_deploy
  • Action hook

signature

do_action(
  'wp2static_addon_trigger_deploy',
  $method
);

example usage

function runBackendDeployment( $method ) {
    if ( $method !== 'bunnycdn' ) {
        return;
    }

    $bunnyCDN = new WP2Static\BunnyCDN();
    $bunnyCDN->bootstrap();
    $bunnyCDN->prepareDeploy( true );
    $bunnyCDN->bunnycdn_transfer_files();
    $bunnyCDN->bunnycdn_purge_cache();
}

add_filter( 'wp2static_addon_trigger_deploy', 'runBackendDeployment' );

Development

This repo contains the latest code, which you can clone/download to get the bleeding edge, else install via the official WordPress Plugin page

If you'd like to contribute, please follow the usual GitHub procedures (create an Issue, fork repo, submit PR). If you're unsure about any of that, contact me and I'll be happy to help.

In trying to make development/contributing easier, we'll keep requirements to a minimum. If you prefer Docker, Local by FlyWheel, Valet, Bedrock, Linux, BSD, Mac, they're all fine. This is a WordPress plugin, so anywhere you can run WordPress, you can do development on this :)

Installing from source

  • git clone -b git@github.com:WP2Static/wp2static.git static-html-output-plugin
  • cd static-html-output-plugin
  • npm i
  • composer install
  • composer buildjs

Running tests

  • composer test

Localisation / translations

Localisation has fallen behind on this project. I welcome anyone who can contribute some expertise in this area / help me get the project easier to translate.

Our official translation page on wordpress.org.

Support

Please raise an issue here on GitHub or on the plugin's support forum.

There is also a Slack group, for quick discussions among the user community.

Notes

When cloning the repo for direct use, clone it into a dir named after the official WP plugin's slug, static-html-output-plugin, this will make life easier.

Sponsorship / supporting open-source

I'm committed (git-pun) to keeping this software open-source and free from selling out user data to a 3rd party. As of version 6, we'll no longer be using Freemius for this reason. We'll accept payments with Snipcart + Stripe, but they will have no knowledge of your WordPress website or any info not required for a payment. The only thing that tracks you on our marketing website is a YouTube embed, which I'll soon switch to an image to avoid that. I rock OpenBSD on my workstation and increasingly on servers because they are an open source project done very well.

There is no big company behind this software, besides a sole proprietership in my name, in order to comply with taxation requirements for me as an Australian resident.

Help keep me doing what I love: building and supporting this software.

Leon

me@ljs.dev

You can’t perform that action at this time.