├── .editorconfig ├── .gitattributes ├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── meta.js ├── package.json ├── sao.js ├── template ├── .babelrc ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitattributes ├── .gitignore ├── 404.php ├── LICENSE ├── README.md ├── archive.php ├── assets │ └── css │ │ ├── font-awesome.scss │ │ └── main.scss ├── build │ ├── dev-server.js │ ├── localhost.cert │ ├── localhost.key │ ├── webpack.base.conf.js │ ├── webpack.dev.conf.js │ └── webpack.prod.conf.js ├── config.json ├── front-page.php ├── functions.php ├── index.html ├── index.php ├── lib │ ├── config.php │ ├── menu-walker.php │ ├── plugins.php │ ├── scripts.php │ ├── snippets │ │ ├── facebook-init.php │ │ ├── fonts.php │ │ └── ga.php │ └── widgets.php ├── package.json ├── page.php ├── screenshot.png ├── single.php ├── style.css └── templates │ ├── archives │ └── archive.php │ ├── footers │ └── footer.php │ ├── headers │ └── header.php │ ├── modules │ └── social.php │ ├── pages │ └── page.php │ └── singles │ └── single.php └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | 11 | [*.md] 12 | trim_trailing_whitespace = false 13 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | *.log 4 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | language: node_js 3 | 4 | branches: 5 | only: 6 | - master 7 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) ilanco (github.com/ilanco) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # template-wp-vue-webpack 2 | 3 | > A modern starter theme for Wordpress which uses Vue 2, Vuex, Vue-router and Webpack 2 4 | 5 | ## Features 6 | 7 | - Webpack 2 8 | - Vue 2 / Vue-router / Vuex 9 | - Hot reloading for single-file components 10 | - Split vendor code from your app 11 | - ESLint 12 | - Babel 6 13 | - SASS 14 | - A boilerplate which is small and focuses on wordpress theme development 15 | 16 | ## Get Started 17 | 18 | Make sure to install `node >=4` and `npm >=3`. 19 | 20 | ### For Windows users 21 | 22 | Install `git with unix tools` before getting started. 23 | 24 | ## Usage 25 | 26 | Install [SAO](https://github.com/egoist/sao) first. 27 | 28 | Installing with yarn yields an error when running sao, so using npm for now. 29 | 30 | ```bash 31 | $ sudo npm i -g sao 32 | ``` 33 | 34 | ### From git 35 | 36 | ```bash 37 | # will install the theme in the current directory 38 | $ sao ilanco/template-wp-vue-webpack 39 | 40 | # specify the target folder instead of using ./ 41 | $ sao ilanco/template-wp-vue-webpack new-theme 42 | ``` 43 | 44 | ### From npm 45 | 46 | ```bash 47 | # will install the theme in the current directory 48 | $ sao wp-vue-webpack 49 | 50 | # specify the target folder instead of using ./ 51 | $ sao wp-vue-webpack new-theme 52 | ``` 53 | 54 | ## Development server 55 | 56 | Before running the dev server, we need to run `npm install` (or `yarn install`) 57 | in the theme root folder. 58 | 59 | ```bash 60 | # will install the necessary node modules 61 | $ npm instal 62 | ``` 63 | 64 | When all node modules are installed we can run the development server. 65 | 66 | ```bash 67 | $ npm run dev 68 | ``` 69 | if you get a node-scss error run `npm rebuild node-sass` 70 | 71 | The assets will be available from your chosen url at port 3000. The scheme is 72 | https, and the certificate needs to be added to the list of exceptions. 73 | Navigate with your browser to [https://website.local:3000](https://website.local:3000) 74 | where website.local is the url to your local vm or localhost. Accept the 75 | certificate and navigate to your wordpress setup. The assets will be loaded 76 | from the dev server with hot module reloading enabled. 77 | 78 | ## Compile for production 79 | 80 | ```bash 81 | # will compile all assets for production 82 | $ npm run build:production 83 | ``` 84 | 85 | ## Folder Structure 86 | 87 | The destination folder is `./dist`. 88 | 89 | ```bash 90 | ├── assets # theme assets 91 | ├── build # webpack config and build scripts 92 | ├── dist # bundled files and index.html 93 | │ ├── index.html 94 | │ └── [...other bundled files] 95 | ├── lib # wordpress specific functions 96 | ├── templates # wordpress template files 97 | ├── tests # tests 98 | ├── node_modules # dependencies 99 | ├── config.json # theme configuration 100 | ├── package.json # package info 101 | └── style.css # wordpress style.css 102 | ``` 103 | 104 | ## License 105 | 106 | MIT © [ilanco](https://github.com/ilanco) 107 | 108 | ## Credits 109 | 110 | Made possible by [Orthodox Union](https://ou.org). 111 | -------------------------------------------------------------------------------- /meta.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | helpers: { 3 | if_or: function (v1, v2, options) { 4 | if (v1 || v2) { 5 | return options.fn(this) 6 | } 7 | return options.inverse(this) 8 | } 9 | }, 10 | prompts: { 11 | name: { 12 | type: "string", 13 | required: true, 14 | message: "What is the name of the new theme?" 15 | }, 16 | description: { 17 | type: "string", 18 | required: false, 19 | message: "How would you describe the new theme?", 20 | default: "My superb Wordpress theme" 21 | }, 22 | title: { 23 | message: 'The title of your website?', 24 | default: 'Orthodox Union' 25 | }, 26 | website: { 27 | message: 'The URL of your production website (no trailing slash)?', 28 | default: 'https://www.ou.org' 29 | }, 30 | dev_website: { 31 | message: 'The URL of your local development website (no trailing slash)?', 32 | default({website}) { 33 | var url = website.split("/") 34 | 35 | return `${url[0]}//local.${url[2]}` 36 | }, 37 | store: true 38 | }, 39 | text_domain: { 40 | message: 'Domain to retrieve the translated text?', 41 | default({name}) { 42 | return `${name}` 43 | } 44 | }, 45 | username: { 46 | type: "string", 47 | message: "What is your GitHub username" 48 | }, 49 | email: { 50 | type: "string", 51 | message: "What is your GitHub email" 52 | }, 53 | eslint: { 54 | type: "confirm", 55 | message: "Use ESLint to lint your code?" 56 | }, 57 | }, 58 | completeMessage: 'To get started:\n\n cd {{destDirName}}\n yarn\n yarn dev\n' 59 | } 60 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "template-wp-vue-webpack", 3 | "version": "0.0.0", 4 | "description": "A modern starter theme for Wordpress which uses Vue 2, Vuex, Vue-router and Webpack 2", 5 | "repository": { 6 | "url": "ilanco/template-wp-vue-webpack", 7 | "type": "git" 8 | }, 9 | "author": "ilanco (github.com/ilanco)", 10 | "contributors": [ 11 | { 12 | "name": "Ilan Cohen", 13 | "email": "ilanco@gmail.com", 14 | "url": "github.com/ilanco" 15 | } 16 | ], 17 | "license": "MIT", 18 | "files": [ 19 | "sao.js", 20 | "template" 21 | ], 22 | "dependencies": { 23 | "superb": "^1.3.0" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /sao.js: -------------------------------------------------------------------------------- 1 | const superb = require('superb') 2 | 3 | module.exports = { 4 | template: 'handlebars', 5 | templateOptions: { 6 | helpers: { 7 | if_or(v1, v2, options) { 8 | if (v1 || v2) { 9 | return options.fn(this) 10 | } 11 | return options.inverse(this) 12 | } 13 | } 14 | }, 15 | prompts: { 16 | name: { 17 | required: true, 18 | message: 'What is the name of the new theme?', 19 | role: 'folder:name' 20 | }, 21 | description: { 22 | required: false, 23 | message: 'How would you describe the new theme?', 24 | default: `my ${superb()} theme` 25 | }, 26 | title: { 27 | message: 'The title of your website?', 28 | default: 'Orthodox Union', 29 | store: true 30 | }, 31 | website: { 32 | message: 'The URL of your production website (no trailing slash)?', 33 | default: 'https://www.ou.org', 34 | store: true 35 | }, 36 | dev_website: { 37 | message: 'The URL of your local development website (no trailing slash)?', 38 | default({website}) { 39 | var url = website.split("/") 40 | 41 | return `${url[0]}//local.${url[2]}` 42 | }, 43 | store: true 44 | }, 45 | text_domain: { 46 | message: 'Domain to retrieve the translated text?', 47 | default({name}) { 48 | return `${name}` 49 | }, 50 | store: true 51 | }, 52 | username: { 53 | message: 'What is your GitHub username?', 54 | role: 'git:username', 55 | store: true 56 | }, 57 | email: { 58 | message: 'What is your GitHub email?', 59 | role: 'git:email', 60 | store: true 61 | }, 62 | eslint: { 63 | type: 'confirm', 64 | message: "Use ESLint to lint your code?" 65 | } 66 | }, 67 | filters: { 68 | '.eslintrc': 'eslint' 69 | }, 70 | post({log, chalk, isNewFolder, folderName}) { 71 | log.success('Done!') 72 | if (isNewFolder) { 73 | log.info(`cd ${chalk.yellow(folderName)} to get started!`) 74 | } 75 | 76 | console.log(' yarn install') 77 | console.log(' yarn dev') 78 | 79 | console.log(chalk.green('\n To build for production:\n')) 80 | console.log(' yarn build\n') 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /template/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015", "stage-2"], 3 | "plugins": ["transform-runtime"], 4 | "comments": false, 5 | "env": { 6 | "test": { 7 | "presets": ["latest", "stage-2"], 8 | "plugins": ["istanbul"] 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /template/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | 11 | [*.md] 12 | trim_trailing_whitespace = false 13 | 14 | [*.php] 15 | indent_size = 4 16 | -------------------------------------------------------------------------------- /template/.eslintignore: -------------------------------------------------------------------------------- 1 | build/*.js 2 | config/*.js 3 | -------------------------------------------------------------------------------- /template/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | parser: 'babel-eslint', 4 | parserOptions: { 5 | sourceType: 'module' 6 | }, 7 | // https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style 8 | extends: 'standard', 9 | // required to lint *.vue files 10 | plugins: [ 11 | 'html' 12 | ], 13 | // add your custom rules here 14 | 'rules': { 15 | // allow paren-less arrow functions 16 | 'arrow-parens': 0, 17 | // allow async-await 18 | 'generator-star-spacing': 0, 19 | // allow debugger during development 20 | 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /template/.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | -------------------------------------------------------------------------------- /template/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | dist/ 4 | npm-debug.log 5 | {{#unit}} 6 | test/unit/coverage 7 | {{/unit}} 8 | {{#e2e}} 9 | test/e2e/reports 10 | selenium-debug.log 11 | {{/e2e}} 12 | !.gitkeep 13 | -------------------------------------------------------------------------------- /template/404.php: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 |
6 |

Page Not Found

7 |
8 | 9 |
10 |
11 |

Code error 404

12 |

We could not find the page you are looking for...

13 |

You may have typed the address incorrectly, or you may have used an outdated link.

14 |
15 |
16 | 17 |
18 | 19 | 20 | -------------------------------------------------------------------------------- /template/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) {{ username }} <{{ email }}> ({{ website }}) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /template/README.md: -------------------------------------------------------------------------------- 1 | # {{ name }} 2 | 3 | > {{ description }} 4 | 5 | ## Build Setup 6 | 7 | ``` bash 8 | # install dependencies 9 | npm install 10 | 11 | # serve with hot reload at localhost:3000 12 | npm run dev 13 | 14 | # build for production 15 | npm run build 16 | 17 | # build for production with minification 18 | npm run build:production 19 | {{#unit}} 20 | 21 | # run unit tests 22 | npm run unit 23 | {{/unit}} 24 | {{#e2e}} 25 | 26 | # run e2e tests 27 | npm run e2e 28 | {{/e2e}} 29 | {{#if_or unit e2e}} 30 | 31 | # run all tests 32 | npm test 33 | {{/if_or}} 34 | ``` 35 | 36 | For detailed explanation on how things work, checkout the [guide](http://vuejs-templates.github.io/webpack/) 37 | and [docs for vue-loader](http://vuejs.github.io/vue-loader). 38 | -------------------------------------------------------------------------------- /template/archive.php: -------------------------------------------------------------------------------- 1 | post_type) ? $post->post_type : ''; 3 | ?> 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /template/assets/css/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /* variables */ 2 | $fa-font-path: '~font-awesome/fonts'; 3 | $base-size: 16px; 4 | $sans-serif: 'helvetica','arial','sans-serif'; 5 | $serif: 'georgia', 'serif'; 6 | 7 | // Import font awesome 8 | @import "~font-awesome/scss/font-awesome"; 9 | -------------------------------------------------------------------------------- /template/assets/css/main.scss: -------------------------------------------------------------------------------- 1 | // Import font awesome 2 | @import "font-awesome.scss"; 3 | -------------------------------------------------------------------------------- /template/build/dev-server.js: -------------------------------------------------------------------------------- 1 | const express = require('express') 2 | const fs = require('fs') 3 | const https = require('https') 4 | const path = require('path') 5 | const webpack = require('webpack') 6 | 7 | const config = require('../config') 8 | const webpackConfig = require('./webpack.dev.conf') 9 | 10 | var projectRoot = path.resolve(__dirname, '../') 11 | 12 | // default port where dev server listens for incoming traffic 13 | var port = process.env.PORT || config.devPort 14 | 15 | // add hot-reload related code to entry chunks 16 | Object.keys(webpackConfig.entry).forEach(function (name) { 17 | var hmrPath = config.devUrl + ':' + port + '/__webpack_hmr' 18 | webpackConfig.entry[name] = [ 19 | 'eventsource-polyfill', 20 | 'webpack-hot-middleware/client?reload=true&path=' + hmrPath 21 | ].concat(webpackConfig.entry[name]) 22 | }) 23 | 24 | var app = express() 25 | var compiler = webpack(webpackConfig) 26 | 27 | var devMiddleware = require('webpack-dev-middleware')(compiler, { 28 | publicPath: webpackConfig.output.publicPath, 29 | stats: { 30 | colors: true, 31 | chunks: false 32 | }, 33 | watchOptions: { 34 | poll: 1000, 35 | aggregateTimeout: 300 36 | } 37 | }) 38 | 39 | var hotMiddleware = require('webpack-hot-middleware')(compiler, { 40 | log: console.log 41 | }) 42 | 43 | // force page reload when html-webpack-plugin template changes 44 | compiler.plugin('compilation', function (compilation) { 45 | compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) { 46 | hotMiddleware.publish({ action: 'reload' }) 47 | cb() 48 | }) 49 | }) 50 | 51 | // handle fallback for HTML5 history API 52 | app.use(require('connect-history-api-fallback')()) 53 | 54 | // serve webpack bundle output 55 | app.use(devMiddleware) 56 | 57 | // enable hot-reload and state-preserving 58 | app.use(hotMiddleware) 59 | 60 | var key = fs.readFileSync(path.join(projectRoot, 'build', 'localhost.key'), 'utf8') 61 | var cert = fs.readFileSync(path.join(projectRoot, 'build', 'localhost.cert'), 'utf8') 62 | var httpsServer = https.createServer({key: key, cert: cert}, app) 63 | 64 | module.exports = httpsServer.listen(port, '0.0.0.0', function onStart(err) { 65 | if (err) { 66 | console.log(err) 67 | return 68 | } 69 | 70 | var uri = config.devUrl + ':' + port 71 | console.info('==> Listening on port %s. Open up %s in your browser.', port, uri) 72 | }) 73 | -------------------------------------------------------------------------------- /template/build/localhost.cert: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIC+zCCAeOgAwIBAgIJAKiv/dfIjT7IMA0GCSqGSIb3DQEBBQUAMBQxEjAQBgNV 3 | BAMMCWxvY2FsaG9zdDAeFw0xNjEyMTIxNjUzNTRaFw0yNjEyMTAxNjUzNTRaMBQx 4 | EjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC 5 | ggEBAMeL4f0CxIkJpP7/GfpTy+riXq6CPUzBcypJDloE2r5gDgd2qpUr1Jyh+ZGG 6 | 5rcf6lkSPQc5CErCjoAz78i8nAYy4khtN5WlGNWiQenAMfpxJwZHJO/2rBWP5GOk 7 | Tyr77E7nmsG7uDb0R7VDUCa+6jm7kzo5iVGfanyHg19FenwttHtvI7w2Mla9zXvU 8 | t3C9YbtnWnyo+nqwWz6WrvmefRby72br+T12N+VCbEGXrw1nD3cGjNvlFIQZq2aI 9 | SXcZRPaAJWX2qPFvGwa4Gyueag+HG6fkhfxO3TiucpBeMjkB12qqgb3QffsmeTc6 10 | 3Rkhf81JC8iU+pGbmK8sA/YpE8sCAwEAAaNQME4wHQYDVR0OBBYEFBtv1XZuj8Se 11 | XAr6PslRHK1ztsI0MB8GA1UdIwQYMBaAFBtv1XZuj8SeXAr6PslRHK1ztsI0MAwG 12 | A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAElLYGR9/qQpJczkJrGofrai 13 | fhkUlfejQ0dCAZ0otzS0fWyECWBhbmu8f9YHqWfb5UC3HrXxqpyiwcyMCwOnNNxa 14 | HxQPCF8FVC3r4C9p07zxBoZFEEcX12c1/GQqbe+cvGmSAeTrENXrBhfubZCUSZ6B 15 | nIzpjI6/xaqDGcbbb8K+eCy+s4tTgGNY4IZv2n0TtDXeizT5jb6OF5BEN1nmJNct 16 | FNcc7yc/ZMVZyWvgmwVFhu2RQY4osnkbrTw0/6TgZ3i0GWqCKe9VElCI5hJgXFlu 17 | qDwmqZt2LRl8URMIWXpeaVlq9ySpEniUJ6dJTsNOwLzXvCPFyp59ozZ3K6eRuN8= 18 | -----END CERTIFICATE----- 19 | -------------------------------------------------------------------------------- /template/build/localhost.key: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIIEowIBAAKCAQEAx4vh/QLEiQmk/v8Z+lPL6uJeroI9TMFzKkkOWgTavmAOB3aq 3 | lSvUnKH5kYbmtx/qWRI9BzkISsKOgDPvyLycBjLiSG03laUY1aJB6cAx+nEnBkck 4 | 7/asFY/kY6RPKvvsTueawbu4NvRHtUNQJr7qObuTOjmJUZ9qfIeDX0V6fC20e28j 5 | vDYyVr3Ne9S3cL1hu2dafKj6erBbPpau+Z59FvLvZuv5PXY35UJsQZevDWcPdwaM 6 | 2+UUhBmrZohJdxlE9oAlZfao8W8bBrgbK55qD4cbp+SF/E7dOK5ykF4yOQHXaqqB 7 | vdB9+yZ5NzrdGSF/zUkLyJT6kZuYrywD9ikTywIDAQABAoIBAEbUuXgU5mx6Vu4I 8 | 4VDBM+4BQniRVG8Nb/K/ke+UL41KDVDK54whzct3l13306eHFaleVvlcXjwjSW/q 9 | f5/yizOMFlR9KDDfNKyIdvshNNxgE+kfkdX36meQ9xIDffKVD/GGNqG0H5SqK1YF 10 | Ocs3E29AzObrC3pEqwjfFVvZDrxK32OeLYFqyhl7sx7hEhdVeGiaSujVrR9JgexC 11 | oZYJyKSXFw/Z5/yxq3bHa8HRBv2M8KOw7rYEsbXmateER3n/btK+5TRriZ6KYsfK 12 | yaZSO03RcoIkO3jDwmzOq/bSyRZNQLMnlULokWNTZ4//RaaHFDfKf+GzOioSs4WL 13 | W0HKsPkCgYEA/myt0JFHNK4ovZVUM1iOL1pif3J75iQGDvW7qiSAcOGSV3McfNhj 14 | 1lTGYSRejN7mqYix7JLxUqQhIY6WytrA05fQ7QCUpWZAci/DbbnTmNs3JYZpROQp 15 | M32KRJglyPyTL/ydBztbPQIULe8V0pSY/75jWstQdMrqV9iltoCF5c0CgYEAyMg1 16 | nsBzJoEtUKrHJ6PvxOS23EKGMfacMuN2zTrZz8oE9kujeCPzSpfFVtK8RDZnU92Q 17 | dCVkULrlG29jJnBWzh1abi7boA+tdkWGE5Dkfrw+cEOs9I6vpcj+u8IoUsZTv20r 18 | TrS095hubQGpfD3PQznoBFYB72rAHStcRGaux/cCgYEAlREb7b2Q2L7Jw/pAMS1L 19 | cVclqsJq8XZdzloPsCpezsR7N52MLWGjbSqSaMwkUakvwFkE1jVqCx97AexHUWdF 20 | 3zNuB851SUtVqxFtEVb1MPQPpX7RIroDodWGM5ZpXQ8PNehuIJSYanBTXm5cfNrv 21 | obftAn9pDmTtVLbssLcwvGkCgYAUSAUCkDYRgaLuLxIG8wxZOzEtdprPmTWV/lwV 22 | xwgRcTqnFmTg0eDVfBc2+fqCeWxekFbzJIPJk9dougut6lMaZuSnlJwiwvKmq8cr 23 | Wst58dHszSk/WtprSK5SkP45vkbfY0uom6BcEk21PSG9pxC0nbjOF1ICuSnGyIZ9 24 | clHdaQKBgE/cOod78YKAi1CsIN+CpER+Mau3awQpuUqDn5e/hUJSuG0jJhX3H+B5 25 | ba6DdjZ6ALi1JeRZjrhuIAQk43LNHWsCm26YqtkZ1pDLlF9xOBx4EHn248rkZoN2 26 | zwcqriekcg6opC5IjDGdJJ2dTNCJ05UMHFdBq8b0Ss2ftsncF/mg 27 | -----END RSA PRIVATE KEY----- 28 | -------------------------------------------------------------------------------- /template/build/webpack.base.conf.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | const webpack = require('webpack') 3 | 4 | var config = require('../config') 5 | var projectRoot = path.resolve(__dirname, '../') 6 | 7 | var env = process.env.NODE_ENV 8 | 9 | module.exports = { 10 | node: { 11 | fs: 'empty' 12 | }, 13 | entry: config.entry, 14 | output: { 15 | path: path.resolve(projectRoot, 'dist') 16 | }, 17 | resolve: { 18 | extensions: ['.js', '.vue', '.json'], 19 | alias: { 20 | 'vue$': 'vue/dist/vue.common.js' 21 | } 22 | }, 23 | module: { 24 | rules: [ 25 | {{#eslint}} 26 | { 27 | enforce: 'pre', 28 | test: /\.vue$/, 29 | loader: 'eslint-loader', 30 | include: [ 31 | path.join(projectRoot, 'src') 32 | ], 33 | exclude: /node_modules/ 34 | }, 35 | { 36 | enforce: 'pre', 37 | test: /\.js$/, 38 | loader: 'eslint-loader', 39 | include: [ 40 | path.join(projectRoot, 'src') 41 | ], 42 | exclude: /node_modules/ 43 | }, 44 | {{/eslint}} 45 | { 46 | test: /\.vue$/, 47 | loader: 'vue-loader', 48 | include: [ 49 | path.join(projectRoot, 'src') 50 | ], 51 | exclude: /node_modules/ 52 | }, 53 | { 54 | test: /\.js$/, 55 | loader: 'babel-loader', 56 | include: [ 57 | path.join(projectRoot, 'src') 58 | ], 59 | exclude: /node_modules/ 60 | }, 61 | { 62 | test: /\.json$/, 63 | loader: 'json-loader' 64 | } 65 | ] 66 | }, 67 | devServer: { 68 | contentBase: path.resolve(__dirname, '../src'), 69 | https: true, 70 | hot: true, 71 | inline: true, 72 | watchOptions: { 73 | aggregateTimeout: 300, 74 | poll: 1000 75 | }, 76 | publicPath: "/assets/", 77 | stats: { colors: true } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /template/build/webpack.dev.conf.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | const merge = require('webpack-merge') 3 | const webpack = require('webpack') 4 | const ExtractTextPlugin = require('extract-text-webpack-plugin') 5 | const FriendlyErrors = require('friendly-errors-webpack-plugin') 6 | 7 | var baseWebpackConfig = require('./webpack.base.conf') 8 | var config = require('../config') 9 | 10 | module.exports = merge(baseWebpackConfig, { 11 | context: path.resolve(__dirname, '..'), 12 | output: { 13 | path: path.resolve(__dirname, '../dist'), 14 | filename: '[name].js', 15 | publicPath: config.devUrl + ':' + config.devPort + '/assets/' 16 | }, 17 | module: { 18 | rules: [ 19 | { 20 | test: /\.css$/, 21 | loaders: ['vue-style-loader', 'css-loader?sourceMap'] 22 | }, 23 | { 24 | test: /\.(sass|scss)$/, 25 | loaders: ['vue-style-loader', 'css-loader?sourceMap', 'sass-loader?sourceMap'] 26 | }, 27 | { 28 | test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, 29 | use: "url-loader?limit=10000&minetype=application/font-woff" 30 | }, 31 | { 32 | test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/, 33 | use: "file-loader" 34 | } 35 | ] 36 | }, 37 | plugins: [ 38 | new webpack.HotModuleReplacementPlugin(), 39 | new webpack.NoEmitOnErrorsPlugin(), 40 | new FriendlyErrors() 41 | ] 42 | }) 43 | -------------------------------------------------------------------------------- /template/build/webpack.prod.conf.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | const merge = require('webpack-merge') 3 | const webpack = require('webpack') 4 | const AssetsPlugin = require('assets-webpack-plugin') 5 | const CleanPlugin = require('clean-webpack-plugin') 6 | const ExtractTextPlugin = require('extract-text-webpack-plugin'); 7 | 8 | var baseWebpackConfig = require('./webpack.base.conf') 9 | var config = require('../config') 10 | 11 | module.exports = merge(baseWebpackConfig, { 12 | context: path.resolve(__dirname, '..'), 13 | output: { 14 | path: path.resolve(__dirname, '../dist'), 15 | filename: '[name]_[hash:8].js', 16 | publicPath: config.publicPath 17 | }, 18 | module: { 19 | rules: [ 20 | { 21 | test: /\.css$/, 22 | loader: ExtractTextPlugin.extract({ 23 | fallback: 'vue-style-loader', 24 | use: [ 25 | { 26 | loader: 'css-loader', 27 | query: { 28 | modules: true, 29 | sourceMap: false, 30 | localIdentName: '[hash:base64:5]', 31 | }, 32 | } 33 | ], 34 | }) 35 | }, 36 | { 37 | test: /\.scss$/, 38 | loader: ExtractTextPlugin.extract({ 39 | fallback: 'style-loader', 40 | use: [ 41 | 'css-loader', 42 | { 43 | loader: 'sass-loader', 44 | query: { 45 | sourceMap: false, 46 | } 47 | } 48 | ], 49 | }) 50 | }, 51 | { 52 | test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, 53 | use: "url-loader?limit=10000&minetype=application/font-woff" 54 | }, 55 | { 56 | test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/, 57 | use: "file-loader" 58 | } 59 | ] 60 | }, 61 | plugins: [ 62 | new CleanPlugin(['dist'], { 63 | root: path.resolve(__dirname, '..') 64 | }), 65 | new ExtractTextPlugin({ 66 | filename: '[name]_[hash:8].css', 67 | allChunks: false 68 | }), 69 | new webpack.optimize.CommonsChunkPlugin({ 70 | name: 'scripts/vendor', 71 | minChunks: function (module, count) { 72 | return ( 73 | module.resource && 74 | /\.js$/.test(module.resource) && 75 | module.resource.indexOf( 76 | path.join(__dirname, '../node_modules') 77 | ) === 0 78 | ) 79 | } 80 | }), 81 | new AssetsPlugin({ 82 | path: path.resolve(__dirname, '../dist'), 83 | filename: 'assets.json', 84 | fullPath: false 85 | }) 86 | ] 87 | }) 88 | -------------------------------------------------------------------------------- /template/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "{{ name }}", 3 | "entry": { 4 | "styles/main": [ 5 | "./assets/css/main.scss" 6 | ] 7 | }, 8 | "watch": [ 9 | ], 10 | "devUrl": "{{ dev_website }}", 11 | "devPort": 3000, 12 | "publicPath": "/content/themes/{{ name }}/dist/", 13 | "cacheBusting": "[name]_[hash:8]", 14 | "env": { 15 | "production": { 16 | }, 17 | "development": { 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /template/front-page.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /template/functions.php: -------------------------------------------------------------------------------- 1 | __('Primary Navigation') 15 | ]); 16 | 17 | /** 18 | * Asset discovery 19 | * 20 | * @param $filename 21 | * @return string 22 | */ 23 | function asset_path($file) 24 | { 25 | static $manifest; 26 | 27 | $manifestPath = get_template_directory() . '/dist/assets.json'; 28 | 29 | if (!$manifest) { 30 | $manifest = file_exists($manifestPath) ? json_decode(file_get_contents($manifestPath), true) : []; 31 | } 32 | 33 | $filePathInfo = pathinfo($file); 34 | $fileExtention = $filePathInfo['extension']; 35 | $filePath = $filePathInfo['dirname'] . '/' . $filePathInfo['filename']; 36 | 37 | if (isset($manifest[$filePath][$fileExtention])) { 38 | $file = $manifest[$filePath][$fileExtention]; 39 | 40 | $uri = get_template_directory_uri() . "/dist/$file"; 41 | } else { 42 | $uri = WEBPACK_DEV_URL . "/assets/$file"; 43 | } 44 | 45 | return (string) $uri; 46 | } 47 | 48 | /** 49 | * Text manipulation 50 | */ 51 | function excerpt($limit) 52 | { 53 | $excerpt = explode(' ', strip_images(get_the_content()), $limit); 54 | if (count($excerpt)>=$limit) { 55 | array_pop($excerpt); 56 | $excerpt = implode(" ",$excerpt).'...'; 57 | } else { 58 | $excerpt = implode(" ",$excerpt); 59 | } 60 | $excerpt = preg_replace('`\[[^\]]*\]`','',$excerpt); 61 | echo $excerpt; 62 | } 63 | 64 | function truncate($text, $limit) 65 | { 66 | $newtext = explode(' ',$text, $limit); 67 | if (count($newtext)>=$limit) { 68 | array_pop($newtext); 69 | $newtext = implode(" ",$newtext).'...'; 70 | } else { 71 | $newtext = implode(" ",$newtext); 72 | } 73 | $newtext = preg_replace('`\[[^\]]*\]`','',$newtext); 74 | echo $newtext; 75 | } 76 | 77 | function strip_images($content) 78 | { 79 | return preg_replace('/]+./','',$content); 80 | } 81 | 82 | /** 83 | * Remove menu items 84 | */ 85 | function my_remove_menu_pages() 86 | { 87 | remove_menu_page('link-manager.php'); 88 | remove_menu_page('edit-comments.php'); 89 | 90 | if (!current_user_can('administrator')) { 91 | remove_menu_page('edit.php?post_type=acf'); 92 | remove_menu_page('tools.php'); 93 | } 94 | } 95 | add_action('admin_menu', 'my_remove_menu_pages'); 96 | 97 | /** 98 | * Remove Dashboard Widgets 99 | */ 100 | function remove_dashboard_widgets() 101 | { 102 | global $wp_meta_boxes; 103 | 104 | unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_quick_press']); 105 | unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_incoming_links']); 106 | unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_right_now']); 107 | unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins']); 108 | unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_recent_drafts']); 109 | unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_recent_comments']); 110 | unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary']); 111 | unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary']); 112 | } 113 | add_action('wp_dashboard_setup', 'remove_dashboard_widgets'); 114 | 115 | /** 116 | * Remove WP SEO Colums 117 | */ 118 | add_filter('wpseo_use_page_analysis', '__return_false'); 119 | 120 | /** 121 | * Remove wpseo from slideshow 100% 122 | */ 123 | function template_wp_vue_webpack_remove_metabox() 124 | { 125 | remove_meta_box('wpseo_meta', 'slideshow', 'normal'); 126 | } 127 | add_action('add_meta_boxes', 'template_wp_vue_webpack_remove_metabox', 11); 128 | 129 | /** 130 | * Remove Commenst from tables 131 | */ 132 | function remove_pages_count_columns($defaults) 133 | { 134 | unset($defaults['comments']); 135 | return $defaults; 136 | } 137 | add_filter('manage_pages_columns', 'remove_pages_count_columns'); 138 | 139 | function remove_posts_count_columns($defaults) 140 | { 141 | unset($defaults['comments']); 142 | return $defaults; 143 | } 144 | add_filter('manage_posts_columns', 'remove_posts_count_columns'); 145 | 146 | // Remove the REST API endpoint. 147 | remove_action('rest_api_init', 'wp_oembed_register_route'); 148 | 149 | // Turn off oEmbed auto discovery. 150 | add_filter('embed_oembed_discover', '__return_false'); 151 | 152 | // Don't filter oEmbed results. 153 | remove_filter('oembed_dataparse', 'wp_filter_oembed_result', 10); 154 | 155 | // Remove oEmbed discovery links. 156 | remove_action('wp_head', 'wp_oembed_add_discovery_links'); 157 | 158 | // Remove oEmbed-specific JavaScript from the front-end and back-end. 159 | remove_action('wp_head', 'wp_oembed_add_host_js'); 160 | remove_action('wp_head', 'print_emoji_detection_script', 7); 161 | remove_action('wp_print_styles', 'print_emoji_styles'); 162 | 163 | // Remove all embeds rewrite rules. 164 | add_filter('xmlrpc_enabled', '__return_false'); 165 | add_filter('xmlrpc_methods', 'remove_xmlrpc_pingback_ping'); 166 | 167 | remove_action('wp_head', 'rsd_link'); 168 | remove_action('wp_head', 'wp_generator'); 169 | remove_action('wp_head', 'feed_links', 2); 170 | remove_action('wp_head', 'index_rel_link'); 171 | remove_action('wp_head', 'wlwmanifest_link'); 172 | remove_action('wp_head', 'feed_links_extra', 3); 173 | remove_action('wp_head', 'start_post_rel_link', 10, 0); 174 | remove_action('wp_head', 'parent_post_rel_link', 10, 0); 175 | remove_action('wp_head', 'adjacent_posts_rel_link', 10, 0); 176 | remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0); 177 | remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0); 178 | 179 | function stop_loading_wp_embed_and_jquery() 180 | { 181 | if (!is_admin()) { 182 | wp_deregister_script('wp-embed'); 183 | wp_deregister_script('jquery'); 184 | } 185 | } 186 | add_action('admin_enqueue_scripts', 'stop_loading_wp_embed_and_jquery'); 187 | 188 | function remove_xmlrpc_pingback_ping($methods) 189 | { 190 | unset($methods['pingback.ping']); 191 | return $methods; 192 | } 193 | -------------------------------------------------------------------------------- /template/lib/menu-walker.php: -------------------------------------------------------------------------------- 1 | classes)) { 8 | $output .= sprintf( "\n
  • %s\n", (array_search('current-menu-item', $item->classes)) ? ' class="active"' : '', $item->url, $item->title); 11 | } 12 | } 13 | 14 | function start_lvl(&$output, $depth=2,$args = []) 15 | { 16 | $indent = str_repeat("\t", $depth); 17 | $output .= "\n$indent
      \n"; 18 | } 19 | } 20 | 21 | class Top_Walker_Nav_Menu extends Walker_Nav_Menu 22 | { 23 | function start_el(&$output, $item, $depth = 2, $args = [], $id = 0) 24 | { 25 | if (array_search('menu-item-has-children', $item->classes)) { 26 | $output .= sprintf("\n
    • %s\n", (array_search('current-menu-item', $item->classes)) ? ' class="active"' : '', $item->url, $item->title); 29 | } 30 | } 31 | 32 | function start_lvl(&$output, $depth=2,$args = []) 33 | { 34 | $indent = str_repeat("\t", $depth); 35 | $output .= "\n$indent
        \n"; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /template/lib/plugins.php: -------------------------------------------------------------------------------- 1 | 2 | 9 | -------------------------------------------------------------------------------- /template/lib/snippets/fonts.php: -------------------------------------------------------------------------------- 1 | 2 | 12 | -------------------------------------------------------------------------------- /template/lib/snippets/ga.php: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /template/lib/widgets.php: -------------------------------------------------------------------------------- 1 | 'single_sidebar', 8 | 'name' => __('Single page Sidebar', '{{ text_domain }}'), 9 | 'description' => __('Single page Sidebar', '{{ text_domain }}'), 10 | 'class' => 'widget', 11 | 'before_title' => '

        ', 12 | 'after_title' => '

        ', 13 | 'before_widget' => '', 15 | ); 16 | register_sidebar($args); 17 | } 18 | 19 | // Hook into the 'widgets_init' action 20 | add_action('widgets_init', 'single_sidebar'); 21 | -------------------------------------------------------------------------------- /template/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "{{ name }}", 3 | "version": "0.1.0", 4 | "description": "{{ description }}", 5 | "scripts": { 6 | "build": "webpack --progress --config build/webpack.prod.conf.js", 7 | "build:production": "NODE_ENV=production npm run build -s -- -p", 8 | "dev": "node build/dev-server.js" 9 | }, 10 | "author": "{{ author }}", 11 | "license": "MIT", 12 | "dependencies": { 13 | "babel-runtime": "^6.18.0", 14 | "font-awesome": "^4.7.0", 15 | "promise-polyfill": "^6.0.2", 16 | "vue": "^2.1.0", 17 | "vue-router": "^2.0.0", 18 | "vuex": "^2.0.0", 19 | "vuex-router-sync": "^3.0.0" 20 | }, 21 | "devDependencies": { 22 | "assets-webpack-plugin": "^3.5.0", 23 | "autoprefixer": "^6.4.0", 24 | "babel-core": "^6.16.0", 25 | {{#eslint}} 26 | "babel-eslint": "^7.1.1", 27 | {{/eslint}} 28 | "babel-loader": "^6.2.4", 29 | "babel-helper-vue-jsx-merge-props": "^2.0.1", 30 | "babel-plugin-istanbul": "^3.0.0", 31 | "babel-plugin-syntax-jsx": "^6.13.0", 32 | "babel-plugin-transform-vue-jsx": "^3.1.0", 33 | "babel-plugin-transform-runtime": "^6.15.0", 34 | "babel-preset-es2015": "^6.14.0", 35 | "babel-preset-latest": "^6.22.0", 36 | "babel-preset-stage-1": "^6.13.0", 37 | "babel-preset-stage-2": "^6.22.0", 38 | "babel-register": "^6.22.0", 39 | "chalk": "^1.1.3", 40 | "clean-webpack-plugin": "^0.1.15", 41 | "connect-history-api-fallback": "^1.3.0", 42 | "copy-webpack-plugin": "^4.0.1", 43 | "css-loader": "^0.23.1", 44 | "cross-env": "^2.0.0", 45 | {{#eslint}} 46 | "eslint": "^3.14.0", 47 | "eslint-config-standard": "^6.2.1", 48 | "eslint-config-vue": "latest", 49 | "eslint-friendly-formatter": "^2.0.7", 50 | "eslint-import-resolver-webpack": "^0.8.1", 51 | "eslint-loader": "^1.6.1", 52 | "eslint-plugin-html": "^1.7.0", 53 | "eslint-plugin-import": "^2.2.0", 54 | "eslint-plugin-promise": "^3.4.0", 55 | "eslint-plugin-standard": "^2.0.1", 56 | "eslint-plugin-vue": "latest", 57 | {{/eslint}} 58 | "eventsource-polyfill": "^0.9.6", 59 | "express": "^4.14.0", 60 | "extract-text-webpack-plugin": "^2.0.0", 61 | "file-loader": "^0.9.0", 62 | "friendly-errors-webpack-plugin": "^1.1.2", 63 | "html-webpack-plugin": "^2.22.0", 64 | "json-loader": "^0.5.4", 65 | "node-sass": "^4.3.0", 66 | "raw-loader": "^0.5.1", 67 | "sass-loader": "^4.1.1", 68 | "style-loader": "^0.13.1", 69 | "url-loader": "^0.5.7", 70 | "vue-loader": "^10.0.2", 71 | "vue-style-loader": "^1.0.0", 72 | "vue-template-compiler": "^2.1.3", 73 | "webpack": "beta", 74 | "webpack-dev-middleware": "^1.8.1", 75 | "webpack-hot-middleware": "^2.12.2", 76 | "webpack-merge": "^2.4.0" 77 | }, 78 | "engines": { 79 | "node": ">= 4.0.0", 80 | "npm": ">= 3.0.0" 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /template/page.php: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | post_name); ?> 8 | 9 | 10 | -------------------------------------------------------------------------------- /template/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilanco/template-wp-vue-webpack/ba5bc0be4f7524551b4ddbce1e6de8f0d072c423/template/screenshot.png -------------------------------------------------------------------------------- /template/single.php: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | post_type); ?> 8 | 9 | 10 | -------------------------------------------------------------------------------- /template/style.css: -------------------------------------------------------------------------------- 1 | /* 2 | Theme Name: {{ name }} 3 | Theme URI: {{ website }} 4 | Author: {{ author }} 5 | Description: {{ description }} 6 | Version: 1.0 7 | License: The Unlicense 8 | License URI: http://unlicense.org/ 9 | */ 10 | -------------------------------------------------------------------------------- /template/templates/archives/archive.php: -------------------------------------------------------------------------------- 1 |
        2 |
        3 |

        Articles

        4 |
        5 | 6 |
        7 | 8 |
        9 |

        10 |
        11 |
        12 | 13 | 14 | max_num_pages > 1): ?> 15 | 19 | 20 |
        21 |
        22 | -------------------------------------------------------------------------------- /template/templates/footers/footer.php: -------------------------------------------------------------------------------- 1 |
        2 |
        3 | 4 |
        5 |
        6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /template/templates/headers/header.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | <?php wp_title(''); ?> 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 49 | 50 | 65 | -------------------------------------------------------------------------------- /template/templates/modules/social.php: -------------------------------------------------------------------------------- 1 | 41 | 52 | -------------------------------------------------------------------------------- /template/templates/pages/page.php: -------------------------------------------------------------------------------- 1 |
        2 | 3 | 4 | ID), 'full-size'); 7 | $img = $src[0]; 8 | } else { 9 | $img = "http://lorempixel.com/g/800/400/abstract/Post%20thumbnail%20placeholder/"; 10 | }; 11 | ?> 12 |
        13 |

        14 |
        15 | 16 |
        17 |
        18 | 19 | 20 | 21 |
        22 |
        23 | 24 | 25 |
        26 | -------------------------------------------------------------------------------- /template/templates/singles/single.php: -------------------------------------------------------------------------------- 1 |
        2 | 3 | 4 | ID), 'full-size'); 7 | $img = $src[0]; 8 | } else { 9 | $img = "http://lorempixel.com/g/800/400/abstract/Post%20thumbnail%20placeholder/"; 10 | }; 11 | ?> 12 |
        13 |

        14 |
        15 | 16 |
        17 |
        18 | 19 | 20 | 21 |
        22 |
        23 | 24 | 25 |
        26 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | array-find-index@^1.0.1: 6 | version "1.0.2" 7 | resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" 8 | 9 | builtin-modules@^1.0.0: 10 | version "1.1.1" 11 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 12 | 13 | camelcase-keys@^2.0.0: 14 | version "2.1.0" 15 | resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" 16 | dependencies: 17 | camelcase "^2.0.0" 18 | map-obj "^1.0.0" 19 | 20 | camelcase@^2.0.0: 21 | version "2.1.1" 22 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" 23 | 24 | currently-unhandled@^0.4.1: 25 | version "0.4.1" 26 | resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" 27 | dependencies: 28 | array-find-index "^1.0.1" 29 | 30 | decamelize@^1.1.2: 31 | version "1.2.0" 32 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 33 | 34 | error-ex@^1.2.0: 35 | version "1.3.0" 36 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9" 37 | dependencies: 38 | is-arrayish "^0.2.1" 39 | 40 | find-up@^1.0.0: 41 | version "1.1.2" 42 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" 43 | dependencies: 44 | path-exists "^2.0.0" 45 | pinkie-promise "^2.0.0" 46 | 47 | get-stdin@^4.0.1: 48 | version "4.0.1" 49 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" 50 | 51 | graceful-fs@^4.1.2: 52 | version "4.1.11" 53 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 54 | 55 | hosted-git-info@^2.1.4: 56 | version "2.1.5" 57 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b" 58 | 59 | indent-string@^2.1.0: 60 | version "2.1.0" 61 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" 62 | dependencies: 63 | repeating "^2.0.0" 64 | 65 | is-arrayish@^0.2.1: 66 | version "0.2.1" 67 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 68 | 69 | is-builtin-module@^1.0.0: 70 | version "1.0.0" 71 | resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" 72 | dependencies: 73 | builtin-modules "^1.0.0" 74 | 75 | is-finite@^1.0.0: 76 | version "1.0.2" 77 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 78 | dependencies: 79 | number-is-nan "^1.0.0" 80 | 81 | is-utf8@^0.2.0: 82 | version "0.2.1" 83 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" 84 | 85 | load-json-file@^1.0.0: 86 | version "1.1.0" 87 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" 88 | dependencies: 89 | graceful-fs "^4.1.2" 90 | parse-json "^2.2.0" 91 | pify "^2.0.0" 92 | pinkie-promise "^2.0.0" 93 | strip-bom "^2.0.0" 94 | 95 | loud-rejection@^1.0.0: 96 | version "1.6.0" 97 | resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" 98 | dependencies: 99 | currently-unhandled "^0.4.1" 100 | signal-exit "^3.0.0" 101 | 102 | map-obj@^1.0.0, map-obj@^1.0.1: 103 | version "1.0.1" 104 | resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" 105 | 106 | meow@^3.4.0: 107 | version "3.7.0" 108 | resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" 109 | dependencies: 110 | camelcase-keys "^2.0.0" 111 | decamelize "^1.1.2" 112 | loud-rejection "^1.0.0" 113 | map-obj "^1.0.1" 114 | minimist "^1.1.3" 115 | normalize-package-data "^2.3.4" 116 | object-assign "^4.0.1" 117 | read-pkg-up "^1.0.1" 118 | redent "^1.0.0" 119 | trim-newlines "^1.0.0" 120 | 121 | minimist@^1.1.3: 122 | version "1.2.0" 123 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 124 | 125 | normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: 126 | version "2.3.5" 127 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df" 128 | dependencies: 129 | hosted-git-info "^2.1.4" 130 | is-builtin-module "^1.0.0" 131 | semver "2 || 3 || 4 || 5" 132 | validate-npm-package-license "^3.0.1" 133 | 134 | number-is-nan@^1.0.0: 135 | version "1.0.1" 136 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 137 | 138 | object-assign@^4.0.1: 139 | version "4.1.1" 140 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 141 | 142 | parse-json@^2.2.0: 143 | version "2.2.0" 144 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 145 | dependencies: 146 | error-ex "^1.2.0" 147 | 148 | path-exists@^2.0.0: 149 | version "2.1.0" 150 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" 151 | dependencies: 152 | pinkie-promise "^2.0.0" 153 | 154 | path-type@^1.0.0: 155 | version "1.1.0" 156 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" 157 | dependencies: 158 | graceful-fs "^4.1.2" 159 | pify "^2.0.0" 160 | pinkie-promise "^2.0.0" 161 | 162 | pify@^2.0.0: 163 | version "2.3.0" 164 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 165 | 166 | pinkie-promise@^2.0.0: 167 | version "2.0.1" 168 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 169 | dependencies: 170 | pinkie "^2.0.0" 171 | 172 | pinkie@^2.0.0: 173 | version "2.0.4" 174 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 175 | 176 | read-pkg-up@^1.0.1: 177 | version "1.0.1" 178 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" 179 | dependencies: 180 | find-up "^1.0.0" 181 | read-pkg "^1.0.0" 182 | 183 | read-pkg@^1.0.0: 184 | version "1.1.0" 185 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" 186 | dependencies: 187 | load-json-file "^1.0.0" 188 | normalize-package-data "^2.3.2" 189 | path-type "^1.0.0" 190 | 191 | redent@^1.0.0: 192 | version "1.0.0" 193 | resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" 194 | dependencies: 195 | indent-string "^2.1.0" 196 | strip-indent "^1.0.1" 197 | 198 | repeating@^2.0.0: 199 | version "2.0.1" 200 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" 201 | dependencies: 202 | is-finite "^1.0.0" 203 | 204 | "semver@2 || 3 || 4 || 5": 205 | version "5.3.0" 206 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" 207 | 208 | signal-exit@^3.0.0: 209 | version "3.0.2" 210 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 211 | 212 | spdx-correct@~1.0.0: 213 | version "1.0.2" 214 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" 215 | dependencies: 216 | spdx-license-ids "^1.0.2" 217 | 218 | spdx-expression-parse@~1.0.0: 219 | version "1.0.4" 220 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" 221 | 222 | spdx-license-ids@^1.0.2: 223 | version "1.2.2" 224 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" 225 | 226 | strip-bom@^2.0.0: 227 | version "2.0.0" 228 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" 229 | dependencies: 230 | is-utf8 "^0.2.0" 231 | 232 | strip-indent@^1.0.1: 233 | version "1.0.1" 234 | resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" 235 | dependencies: 236 | get-stdin "^4.0.1" 237 | 238 | superb@^1.3.0: 239 | version "1.3.0" 240 | resolved "https://registry.yarnpkg.com/superb/-/superb-1.3.0.tgz#55072fa521220d14876b4630e0822024353106ba" 241 | dependencies: 242 | meow "^3.4.0" 243 | unique-random-array "^1.0.0" 244 | 245 | trim-newlines@^1.0.0: 246 | version "1.0.0" 247 | resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" 248 | 249 | unique-random-array@^1.0.0: 250 | version "1.0.0" 251 | resolved "https://registry.yarnpkg.com/unique-random-array/-/unique-random-array-1.0.0.tgz#42b3721c579388d8b667c93c2dbde3d5d81a9136" 252 | dependencies: 253 | unique-random "^1.0.0" 254 | 255 | unique-random@^1.0.0: 256 | version "1.0.0" 257 | resolved "https://registry.yarnpkg.com/unique-random/-/unique-random-1.0.0.tgz#ce3e224c8242cd33a0e77b0d7180d77e6b62d0c4" 258 | 259 | validate-npm-package-license@^3.0.1: 260 | version "3.0.1" 261 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" 262 | dependencies: 263 | spdx-correct "~1.0.0" 264 | spdx-expression-parse "~1.0.0" 265 | --------------------------------------------------------------------------------