├── .changes ├── 12.10.0.md ├── 12.10.1.md ├── 12.10.2.md ├── 12.7.2.md ├── 12.7.3.md ├── 12.8.0.md ├── 12.8.1.md ├── 12.9.0.md ├── 12.9.1.md ├── 12.9.2.md ├── 12.9.3.md ├── 12.9.4.md ├── 12.9.5.md ├── 12.9.6.md ├── 12.9.7.md ├── header.tpl.md └── unreleased │ ├── .gitkeep │ └── Chores-20241011-005915.yaml ├── .changie.yml ├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── dependabot.yml └── workflows │ ├── lint.yaml │ ├── release.yaml │ └── test-e2e.yml ├── .gitignore ├── .kana.json ├── .npmrc ├── .nvmrc ├── .vscode ├── extensions.json ├── launch.json └── settings.json ├── .wp-env.json ├── CHANGELOG.md ├── Makefile ├── README.md ├── assets └── scss │ ├── components │ ├── block-image.scss │ ├── content.scss │ ├── editor.scss │ ├── global.scss │ ├── home.scss │ ├── max-710.scss │ ├── page-index.scss │ └── variables.scss │ ├── editor.scss │ └── main.scss ├── category.php ├── composer.json ├── composer.lock ├── footer.php ├── functions.php ├── header.php ├── home.php ├── includes └── post_columns │ ├── event.php │ ├── location.php │ └── talk.php ├── index.php ├── package-lock.json ├── package.json ├── page-blog.php ├── page-speaking.php ├── phpcs.xml ├── pods.json ├── screenshot.png ├── singular.php ├── style.css └── tests └── e2e ├── playwright.config.js └── specs └── homepage.spec.js /.changes/12.10.0.md: -------------------------------------------------------------------------------- 1 | ## 12.10.0 - 2024-05-24 2 | 3 | ### Features 4 | 5 | * Add Category filter to blog pages 6 | 7 | ### Chores 8 | 9 | * Update project dependencies 10 | -------------------------------------------------------------------------------- /.changes/12.10.1.md: -------------------------------------------------------------------------------- 1 | ## 12.10.1 - 2024-06-26 2 | 3 | ### Chores 4 | 5 | * Update project dependencies 6 | -------------------------------------------------------------------------------- /.changes/12.10.2.md: -------------------------------------------------------------------------------- 1 | ## 12.10.2 - 2024-08-29 2 | 3 | ### Chores 4 | 5 | * Update project dependencies 6 | -------------------------------------------------------------------------------- /.changes/12.7.2.md: -------------------------------------------------------------------------------- 1 | ## 12.7.2 2 | 3 | - Update project dependencies 4 | 5 | ## 12.7.1 6 | 7 | - Update project dependencies 8 | 9 | ## 12.7.0 10 | 11 | - Convert the homepage intro back to a widget. 12 | - Update project dependencies 13 | 14 | ## 12.6.2 15 | 16 | - Minor refactoring due to linting suggestions 17 | - Remove duplicate "alt" tag from header image 18 | - Added additional linting configuration 19 | 20 | ## 12.6.1 21 | 22 | - Update to WordPress Coding Standards 3.0.0 23 | - Update package dependencies 24 | - Fix homepage intro 25 | 26 | ## 12.6.0 27 | 28 | - Shrink the footer so it looks a bit better 29 | 30 | ## 12.5.0 31 | 32 | - Cleanup Yoast comments in the header 33 | - Update homepage intro 34 | - Minor CSS validation fixes 35 | - Update project dependencies 36 | 37 | ## 12.4.7 38 | 39 | - Update "Tested up to" version 40 | - Update project dependencies 41 | 42 | ## 12.4.6 43 | 44 | - Minor formatting fixes 45 | - Update project dependencies 46 | 47 | ## 12.4.5 48 | 49 | - Fixed call to `add_theme_support` to correctly handle the HTML5 param 50 | 51 | ## 12.4.4 52 | 53 | - Remove Pixelfed link from homepage 54 | 55 | ## 12.4.3 56 | 57 | - Update dependencies 58 | - Update style.css header 59 | 60 | ## 12.4.2 61 | 62 | - Remove extra CSS 63 | - Update dependencies 64 | 65 | ## 12.4.1 66 | 67 | - Fix copyright year 68 | 69 | ## 12.4.0 70 | 71 | - Cleanup html header from unwanted info 72 | - Update dependencies 73 | 74 | ## 12.3.0 75 | 76 | - Update homepage links to text links 77 | - Update dependencies 78 | 79 | ## 12.2.5 80 | 81 | - Move from Lando to Kana 82 | - Update dependencies 83 | 84 | ## 12.2.4 85 | 86 | - Remove Twitter link from homepage 87 | - Update dependencies 88 | 89 | ## 12.2.3 90 | 91 | - Reintroduce SASS watch script 92 | - Update dependencies 93 | 94 | ## 12.2.2 95 | 96 | - Switch the the still-supported Sass package 97 | 98 | ## 12.2.1 99 | 100 | - Remove unused phpunit support 101 | - Simplify make testing targets for linting only 102 | - Cleanup extra files in the repo 103 | 104 | ## 12.2.0 105 | 106 | - Update dependencies 107 | - Remove use of Gulp.js for processing SASS 108 | 109 | ## 12.1.2 110 | 111 | - Update dependencies 112 | - Switch to PHP 8.0 for project development 113 | - Fix link to full talks on speaker page 114 | 115 | ## 12.1.1 116 | 117 | - More CSS cleanup 118 | - Center main menu when needed 119 | 120 | ## 12.1.0 121 | 122 | - Update blog or speaking page time when related content is updated 123 | 124 | ## 12.0.4 125 | 126 | - Update dependencies 127 | - More cleanup of unused CSS 128 | - Fix image overflow on mobile 129 | 130 | ## 12.0.3 131 | 132 | - Update dependencies 133 | - Remove unneeded image sizes 134 | - Cleanup extra featured image CSS 135 | 136 | ## 12.0.2 137 | 138 | - Fix the homepage image 139 | - Remove unneeded files from the generated zip file 140 | - Update dependencies 141 | 142 | ## 12.0.1 143 | 144 | - Remove extra favicon tag 145 | - Update dependencies 146 | 147 | ## 12 148 | 149 | - Update dependencies 150 | - Add date to posts list where appropriate 151 | - Switch to Pods for tracking all my talks 152 | - Custom speaker page template based on pods data 153 | - Remove Gallery block CSS 154 | - Use a more appropriate image size for the homepage 155 | 156 | ## 11.1.1 157 | 158 | - Fix issue where the editor was broken due to being over-zealous in disable the REST api 159 | - Update dependencies 160 | 161 | ## 11.1.0 162 | 163 | - Improve comments removal 164 | - Fix post list count in admin. 165 | - Disable XMLRPC 166 | - Disable unneeded APIs 167 | 168 | ## 11.0.1 169 | 170 | - Fix featured images on page template 171 | - Updated dependencies 172 | 173 | ## 11.0.0 174 | 175 | - Completely new theme with dark styles inspired by [Tania Rascia](https://www.taniarascia.com) 176 | 177 | ## 10.0.0 178 | 179 | - Restructured plugin for easier development 180 | - Updated dependencies 181 | - Switched to WordPress Coding Standards 182 | - Numerous makefile and other improvements 183 | 184 | ## 9.7.4 185 | 186 | - Updated dependencies 187 | 188 | ## 9.7.3 189 | 190 | - Updated dependencies 191 | - Fixed editor.css 192 | 193 | ## 9.7.2 194 | 195 | - Moved my own site import to a separate Make target to make working with the theme easier for others 196 | 197 | ## 9.7.1 198 | 199 | - Don't set content policy in theme. Use a plugin to modify 200 | 201 | ## 9.7.0 202 | 203 | - Add security headers 204 | 205 | ## 9.6.1 206 | 207 | - Fix a CSS issue causing horizontal scroll on header (Thanks David Wolfpaw) 208 | 209 | ## 9.6.0 210 | 211 | - Added new 'avatar' media size to work better with the homepage widget 212 | - Add search bar to header 213 | - Introduce pagination on the homepage 214 | - Add excerpts to the search page 215 | - Fixed bug caused by improperly calling filter callback 216 | 217 | ## 9.5.3 218 | 219 | - Add testing via GitHub Actions 220 | - Update dependencies 221 | 222 | ## 9.5.2 223 | 224 | - Cleanup mobile styles 225 | - Remove redundant links from footer 226 | 227 | ## 9.5.1 228 | 229 | - Add styles for better display on mobile 230 | 231 | ## 9.5.0 232 | 233 | - Revert to white backgrou 234 | - Simplify CSS 235 | 236 | ## 9.4.0 237 | 238 | - Remove Journal 239 | 240 | ## 9.3.5 241 | 242 | - Update dependencies 243 | - Cleanup and maintenance of build tools 244 | 245 | ## 9.3.4 246 | 247 | - Update dependencies 248 | - Migrate unit testing to brain monkey 249 | 250 | ## 9.3.3 251 | 252 | - Remove support for comments 253 | 254 | ## 9.3.2 255 | 256 | - Improve editor styles 257 | 258 | ## 9.3.1 259 | 260 | - Remove unneeded header elements 261 | 262 | ## 9.3.0 263 | 264 | - Switch to a dark theme 265 | - Use cache busting when SCRIPT_DEBUG is true 266 | - Improve quotes and code blocks (inspiration from Victoria Drake) 267 | - Full width header and footer 268 | - Sticky header 269 | - Improve image captions and styling 270 | 271 | ## 9.2.0 272 | 273 | - Improved development workflow using data synced from prod. 274 | - Removed unused CSS 275 | - Added "journal" page to properly handle journal posts 276 | - Added header to category pages 277 | 278 | ## 9.1.1 279 | 280 | - Fix next/prev paging for journal posts 281 | 282 | ## 9.1.0 283 | 284 | - Removed comments feed from header 285 | - Removed "journal" category from homepage 286 | - Add basic navigation between posts 287 | - Add template for journal page 288 | 289 | ## 9.0.0 290 | 291 | - Initial re-release. 292 | -------------------------------------------------------------------------------- /.changes/12.7.3.md: -------------------------------------------------------------------------------- 1 | ## 12.7.3 - 2024-01-07 2 | 3 | ### Chores 4 | 5 | * Implement [Changie](https://changie.dev/) for better changelog management. 6 | * Refactor build to remove Docker dependencies 7 | * Automate release generation on tag push 8 | -------------------------------------------------------------------------------- /.changes/12.8.0.md: -------------------------------------------------------------------------------- 1 | ## 12.8.0 - 2024-01-07 2 | 3 | ### Chores 4 | 5 | * Update the readme for better explanation of the current methods of development. 6 | -------------------------------------------------------------------------------- /.changes/12.8.1.md: -------------------------------------------------------------------------------- 1 | ## 12.8.1 - 2024-01-21 2 | 3 | ### Chores 4 | 5 | * Update project dependencies. 6 | -------------------------------------------------------------------------------- /.changes/12.9.0.md: -------------------------------------------------------------------------------- 1 | ## 12.9.0 - 2024-02-07 2 | 3 | ### Features 4 | 5 | * Disable Yoast schema 6 | 7 | ### Chores 8 | 9 | * Update project dependencies 10 | -------------------------------------------------------------------------------- /.changes/12.9.1.md: -------------------------------------------------------------------------------- 1 | ## 12.9.1 - 2024-03-09 2 | 3 | ### Chores 4 | 5 | * Update project dependencies 6 | * Refactor namespace usage 7 | -------------------------------------------------------------------------------- /.changes/12.9.2.md: -------------------------------------------------------------------------------- 1 | ## 12.9.2 - 2024-03-19 2 | 3 | ### Bug Fixes 4 | 5 | * Fix the version number 6 | 7 | ### Chores 8 | 9 | * Update project dependencies 10 | * Update tested WordPress version to 6.5 11 | -------------------------------------------------------------------------------- /.changes/12.9.3.md: -------------------------------------------------------------------------------- 1 | ## 12.9.3 - 2024-04-03 2 | 3 | ### Features 4 | 5 | * Remove obsolete header items 6 | 7 | ### Chores 8 | 9 | * Update project dependencies 10 | -------------------------------------------------------------------------------- /.changes/12.9.4.md: -------------------------------------------------------------------------------- 1 | ## 12.9.4 - 2024-04-04 2 | 3 | ### Bug Fixes 4 | 5 | * Fix extra CSS from syntax highlighter plugin and WordPress 6.5 6 | -------------------------------------------------------------------------------- /.changes/12.9.5.md: -------------------------------------------------------------------------------- 1 | ## 12.9.5 - 2024-04-04 2 | 3 | ### Bug Fixes 4 | 5 | * Don't enqueue syntax highlighting styles on pages that couldn't possibly use them. 6 | -------------------------------------------------------------------------------- /.changes/12.9.6.md: -------------------------------------------------------------------------------- 1 | ## 12.9.6 - 2024-05-04 2 | 3 | ### Chores 4 | 5 | * Update project dependencies 6 | -------------------------------------------------------------------------------- /.changes/12.9.7.md: -------------------------------------------------------------------------------- 1 | ## 12.9.7 - 2024-05-15 2 | 3 | ### Chores 4 | 5 | * Update project dependencies 6 | * Add stub for Playwright E2E testing and 2 starter tests for the homepage. 7 | -------------------------------------------------------------------------------- /.changes/header.tpl.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | All notable changes to this project will be documented in this file. 3 | 4 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), 5 | adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html), 6 | and is generated by [Changie](https://github.com/miniscruff/changie). 7 | -------------------------------------------------------------------------------- /.changes/unreleased/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisWiegman/chriswiegman-theme/2f32d50f3c6ce5142eecb3073ebc5e4a51486975/.changes/unreleased/.gitkeep -------------------------------------------------------------------------------- /.changes/unreleased/Chores-20241011-005915.yaml: -------------------------------------------------------------------------------- 1 | kind: Chores 2 | body: Update project dependencies. 3 | time: 2024-10-11T00:59:15.359916669Z 4 | -------------------------------------------------------------------------------- /.changie.yml: -------------------------------------------------------------------------------- 1 | changesDir: .changes 2 | unreleasedDir: unreleased 3 | headerPath: header.tpl.md 4 | changelogPath: CHANGELOG.md 5 | versionExt: md 6 | versionFormat: '## {{.Version}} - {{.Time.Format "2006-01-02"}}' 7 | kindFormat: "### {{.Kind}}" 8 | changeFormat: "* {{.Body}}" 9 | kinds: 10 | - label: Breaking Changes 11 | - label: Security Fixes 12 | - label: Features 13 | - label: Bug Fixes 14 | - label: Chores 15 | newlines: 16 | afterChangelogHeader: 1 17 | beforeChangelogVersion: 1 18 | endOfVersion: 1 19 | afterKind: 1 20 | beforeKind: 1 21 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: ChrisWiegman 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 13 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 14 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - Browser [e.g. chrome, safari] 29 | - Version [e.g. 22] 30 | 31 | **Smartphone (please complete the following information):** 32 | - Device: [e.g. iPhone6] 33 | - OS: [e.g. iOS8.1] 34 | - Browser [e.g. stock browser, safari] 35 | - Version [e.g. 22] 36 | 37 | **Additional context** 38 | Add any other context about the problem here. 39 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "npm" # See documentation for possible values 9 | directory: "/" # Location of package manifests 10 | schedule: 11 | interval: "weekly" 12 | - package-ecosystem: "composer" # See documentation for possible values 13 | directory: "/" # Location of package manifests 14 | schedule: 15 | interval: "weekly" 16 | -------------------------------------------------------------------------------- /.github/workflows/lint.yaml: -------------------------------------------------------------------------------- 1 | name: Lint 2 | 3 | on: 4 | push: 5 | branches: 6 | - develop 7 | - main 8 | tags-ignore: 9 | - "**" 10 | pull_request: 11 | branches: 12 | - develop 13 | - main 14 | 15 | # Cancel previous workflow run groups that have not completed. 16 | concurrency: 17 | # Group workflow runs by workflow name, along with the head branch ref of the pull request 18 | # or otherwise the branch or tag ref. 19 | group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.ref }} 20 | cancel-in-progress: true 21 | 22 | jobs: 23 | lint: 24 | runs-on: ubuntu-22.04 25 | steps: 26 | - name: Checkout project 27 | uses: actions/checkout@v4 28 | 29 | - name: Install Composer dependencies 30 | uses: php-actions/composer@v6 31 | 32 | - name: PHP_CodeSniffer 33 | run: | 34 | cd ${GITHUB_WORKSPACE} 35 | ./vendor/bin/phpcs --standard=./phpcs.xml 36 | -------------------------------------------------------------------------------- /.github/workflows/release.yaml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | push: 5 | tags: 6 | - "*" 7 | 8 | jobs: 9 | release: 10 | runs-on: ubuntu-22.04 11 | steps: 12 | - name: Checkout project 13 | uses: actions/checkout@v4 14 | 15 | - name: Set release version 16 | run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV 17 | 18 | - name: Setup Node 19 | uses: actions/setup-node@v4 20 | with: 21 | node-version: "lts/*" 22 | 23 | - name: Create releasee zip 24 | run: | 25 | make clean 26 | make install-npm 27 | make build 28 | make release 29 | 30 | - name: Create GitHub Release 31 | uses: ncipollo/release-action@v1.13.0 32 | with: 33 | artifacts: "chriswiegman-theme.${{ env.RELEASE_VERSION }}.zip" 34 | bodyFile: ".changes/${{ env.RELEASE_VERSION }}.md" 35 | -------------------------------------------------------------------------------- /.github/workflows/test-e2e.yml: -------------------------------------------------------------------------------- 1 | name: E2E Tests 2 | 3 | on: 4 | push: 5 | branches: 6 | - develop 7 | - main 8 | tags-ignore: 9 | - "**" 10 | pull_request: 11 | branches: 12 | - develop 13 | - main 14 | 15 | # Cancel previous workflow run groups that have not completed. 16 | concurrency: 17 | # Group workflow runs by workflow name, along with the head branch ref of the pull request 18 | # or otherwise the branch or tag ref. 19 | group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.ref }} 20 | cancel-in-progress: true 21 | 22 | jobs: 23 | e2e-test: 24 | timeout-minutes: 60 25 | runs-on: ubuntu-22.04 26 | steps: 27 | - name: Checkout project 28 | uses: actions/checkout@v4 29 | 30 | - name: Setup Node 31 | uses: actions/setup-node@v4 32 | with: 33 | node-version: lts/* 34 | 35 | - name: Install Node dependencies 36 | run: npm ci 37 | 38 | - name: Build CSS and JS 39 | run: npm run build 40 | 41 | - name: Install Playwright Browsers 42 | run: npx playwright install --with-deps 43 | 44 | - name: Start WordPress Environment and activate theme 45 | run: | 46 | npx wp-env start 47 | npx wp-env run cli wp theme activate chriswiegman-theme 48 | 49 | - name: Run E2E tests 50 | run: npm run test 51 | 52 | - uses: actions/upload-artifact@v4 53 | if: always() 54 | with: 55 | name: e2e-report 56 | path: artifacts/ 57 | retention-days: 30 58 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # If you prefer the allow list template instead of the deny list, see community template: 2 | # https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore 3 | # 4 | # Binaries for programs and plugins 5 | *.exe 6 | *.exe~ 7 | *.dll 8 | *.so 9 | *.dylib 10 | 11 | # Test binary, built with `go test -c` 12 | *.test 13 | 14 | # Output of the go coverage tool, specifically when used with LiteIDE 15 | *.out 16 | 17 | # Dependency directories (remove the comment below to include it) 18 | vendor/ 19 | 20 | # Go workspace file 21 | go.work 22 | 23 | # General 24 | .DS_Store 25 | .AppleDouble 26 | .LSOverride 27 | 28 | # Icon must end with two \r 29 | Icon 30 | 31 | # Thumbnails 32 | ._* 33 | 34 | # Files that might appear in the root of a volume 35 | .DocumentRevisions-V100 36 | .fseventsd 37 | .Spotlight-V100 38 | .TemporaryItems 39 | .Trashes 40 | .VolumeIcon.icns 41 | .com.apple.timemachine.donotpresent 42 | 43 | # Directories potentially created on remote AFP share 44 | .AppleDB 45 | .AppleDesktop 46 | Network Trash Folder 47 | Temporary Items 48 | .apdisk 49 | 50 | # Ignore .vscode build files 51 | .vscode/*.log 52 | 53 | # Ignore the generated binary 54 | kana 55 | 56 | # Ignore goreleasaer's build files 57 | dist/ 58 | 59 | # Ignore files generated by Jetbrains' IDEs 60 | .idea/ 61 | 62 | # Ignore Project assets and files 63 | node_modules/ 64 | wordpress/ 65 | assets/*.css 66 | assets/*.map 67 | chriswiegman-theme.*.zip 68 | /test-results/ 69 | /playwright-report/ 70 | /blob-report/ 71 | /playwright/.cache/ 72 | -------------------------------------------------------------------------------- /.kana.json: -------------------------------------------------------------------------------- 1 | { 2 | "activate": true, 3 | "admin": { 4 | "email": "admin@sites.kana.sh", 5 | "password": "password", 6 | "username": "admin" 7 | }, 8 | "automaticlogin": true, 9 | "databaseclient": "phpmyadmin", 10 | "environment": "local", 11 | "mailpit": true, 12 | "mariadb": "11", 13 | "multisite": "none", 14 | "php": "8.2", 15 | "plugins": [ 16 | "csp-manager", 17 | "debug-bar", 18 | "disable-floc", 19 | "pods", 20 | "query-monitor", 21 | "rss-featured-image", 22 | "syntax-highlighting-code-block", 23 | "two-factor", 24 | "wordpress-seo" 25 | ], 26 | "removedefaultplugins": true, 27 | "scriptdebug": true, 28 | "ssl": true, 29 | "theme": "", 30 | "type": "theme", 31 | "wpdebug": true, 32 | "xdebug": false 33 | } -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | lts/* 2 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "bmewburn.vscode-intelephense-client", 4 | "neilbrayfield.php-docblocker", 5 | "wongjn.php-sniffer", 6 | "xdebug.php-debug", 7 | "johnbillion.vscode-wordpress-hooks", 8 | "smelukov.vscode-csstree", 9 | "MrChetan.phpstorm-parameter-hints-in-vscode" 10 | ] 11 | } -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "name": "Listen for XDebug", 6 | "type": "php", 7 | "request": "launch", 8 | "port": 9003, 9 | "log": true, 10 | "pathMappings": { 11 | "/var/www/html/wp-content/themes/chriswiegman-theme/": "${workspaceFolder}", 12 | "/var/www/html/": "${workspaceFolder}/wordpress", 13 | } 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "phpSniffer.autoDetect": true, 3 | "intelephense.diagnostics.undefinedConstants": false, 4 | } 5 | -------------------------------------------------------------------------------- /.wp-env.json: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": [ 3 | "https://downloads.wordpress.org/plugin/pods.zip" 4 | ], 5 | "themes": [ 6 | "." 7 | ], 8 | "port": 8888, 9 | "config": { 10 | "WP_DEBUG": true 11 | } 12 | } -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | All notable changes to this project will be documented in this file. 3 | 4 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), 5 | adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html), 6 | and is generated by [Changie](https://github.com/miniscruff/changie). 7 | 8 | 9 | ## 12.10.2 - 2024-08-29 10 | 11 | ### Chores 12 | 13 | * Update project dependencies 14 | 15 | ## 12.10.1 - 2024-06-26 16 | 17 | ### Chores 18 | 19 | * Update project dependencies 20 | 21 | ## 12.10.0 - 2024-05-24 22 | 23 | ### Features 24 | 25 | * Add Category filter to blog pages 26 | 27 | ### Chores 28 | 29 | * Update project dependencies 30 | 31 | ## 12.9.7 - 2024-05-15 32 | 33 | ### Chores 34 | 35 | * Update project dependencies 36 | * Add stub for Playwright E2E testing and 2 starter tests for the homepage. 37 | 38 | ## 12.9.6 - 2024-05-04 39 | 40 | ### Chores 41 | 42 | * Update project dependencies 43 | 44 | ## 12.9.5 - 2024-04-04 45 | 46 | ### Bug Fixes 47 | 48 | * Don't enqueue syntax highlighting styles on pages that couldn't possibly use them. 49 | 50 | ## 12.9.4 - 2024-04-04 51 | 52 | ### Bug Fixes 53 | 54 | * Fix extra CSS from syntax highlighter plugin and WordPress 6.5 55 | 56 | ## 12.9.3 - 2024-04-03 57 | 58 | ### Features 59 | 60 | * Remove obsolete header items 61 | 62 | ### Chores 63 | 64 | * Update project dependencies 65 | 66 | ## 12.9.2 - 2024-03-19 67 | 68 | ### Bug Fixes 69 | 70 | * Fix the version number 71 | 72 | ### Chores 73 | 74 | * Update project dependencies 75 | * Update tested WordPress version to 6.5 76 | 77 | ## 12.9.1 - 2024-03-09 78 | 79 | ### Chores 80 | 81 | * Update project dependencies 82 | * Refactor namespace usage 83 | 84 | ## 12.9.0 - 2024-02-07 85 | 86 | ### Features 87 | 88 | * Disable Yoast schema 89 | 90 | ### Chores 91 | 92 | * Update project dependencies 93 | 94 | ## 12.8.1 - 2024-01-21 95 | 96 | ### Chores 97 | 98 | * Update project dependencies. 99 | 100 | ## 12.8.0 - 2024-01-07 101 | 102 | ### Chores 103 | 104 | * Update the readme for better explanation of the current methods of development. 105 | 106 | ## 12.7.3 - 2024-01-07 107 | 108 | ### Chores 109 | 110 | * Implement [Changie](https://changie.dev/) for better changelog management. 111 | * Refactor build to remove Docker dependencies 112 | * Automate release generation on tag push 113 | 114 | ## 12.7.2 115 | 116 | - Update project dependencies 117 | 118 | ## 12.7.1 119 | 120 | - Update project dependencies 121 | 122 | ## 12.7.0 123 | 124 | - Convert the homepage intro back to a widget. 125 | - Update project dependencies 126 | 127 | ## 12.6.2 128 | 129 | - Minor refactoring due to linting suggestions 130 | - Remove duplicate "alt" tag from header image 131 | - Added additional linting configuration 132 | 133 | ## 12.6.1 134 | 135 | - Update to WordPress Coding Standards 3.0.0 136 | - Update package dependencies 137 | - Fix homepage intro 138 | 139 | ## 12.6.0 140 | 141 | - Shrink the footer so it looks a bit better 142 | 143 | ## 12.5.0 144 | 145 | - Cleanup Yoast comments in the header 146 | - Update homepage intro 147 | - Minor CSS validation fixes 148 | - Update project dependencies 149 | 150 | ## 12.4.7 151 | 152 | - Update "Tested up to" version 153 | - Update project dependencies 154 | 155 | ## 12.4.6 156 | 157 | - Minor formatting fixes 158 | - Update project dependencies 159 | 160 | ## 12.4.5 161 | 162 | - Fixed call to `add_theme_support` to correctly handle the HTML5 param 163 | 164 | ## 12.4.4 165 | 166 | - Remove Pixelfed link from homepage 167 | 168 | ## 12.4.3 169 | 170 | - Update dependencies 171 | - Update style.css header 172 | 173 | ## 12.4.2 174 | 175 | - Remove extra CSS 176 | - Update dependencies 177 | 178 | ## 12.4.1 179 | 180 | - Fix copyright year 181 | 182 | ## 12.4.0 183 | 184 | - Cleanup html header from unwanted info 185 | - Update dependencies 186 | 187 | ## 12.3.0 188 | 189 | - Update homepage links to text links 190 | - Update dependencies 191 | 192 | ## 12.2.5 193 | 194 | - Move from Lando to Kana 195 | - Update dependencies 196 | 197 | ## 12.2.4 198 | 199 | - Remove Twitter link from homepage 200 | - Update dependencies 201 | 202 | ## 12.2.3 203 | 204 | - Reintroduce SASS watch script 205 | - Update dependencies 206 | 207 | ## 12.2.2 208 | 209 | - Switch the the still-supported Sass package 210 | 211 | ## 12.2.1 212 | 213 | - Remove unused phpunit support 214 | - Simplify make testing targets for linting only 215 | - Cleanup extra files in the repo 216 | 217 | ## 12.2.0 218 | 219 | - Update dependencies 220 | - Remove use of Gulp.js for processing SASS 221 | 222 | ## 12.1.2 223 | 224 | - Update dependencies 225 | - Switch to PHP 8.0 for project development 226 | - Fix link to full talks on speaker page 227 | 228 | ## 12.1.1 229 | 230 | - More CSS cleanup 231 | - Center main menu when needed 232 | 233 | ## 12.1.0 234 | 235 | - Update blog or speaking page time when related content is updated 236 | 237 | ## 12.0.4 238 | 239 | - Update dependencies 240 | - More cleanup of unused CSS 241 | - Fix image overflow on mobile 242 | 243 | ## 12.0.3 244 | 245 | - Update dependencies 246 | - Remove unneeded image sizes 247 | - Cleanup extra featured image CSS 248 | 249 | ## 12.0.2 250 | 251 | - Fix the homepage image 252 | - Remove unneeded files from the generated zip file 253 | - Update dependencies 254 | 255 | ## 12.0.1 256 | 257 | - Remove extra favicon tag 258 | - Update dependencies 259 | 260 | ## 12 261 | 262 | - Update dependencies 263 | - Add date to posts list where appropriate 264 | - Switch to Pods for tracking all my talks 265 | - Custom speaker page template based on pods data 266 | - Remove Gallery block CSS 267 | - Use a more appropriate image size for the homepage 268 | 269 | ## 11.1.1 270 | 271 | - Fix issue where the editor was broken due to being over-zealous in disable the REST api 272 | - Update dependencies 273 | 274 | ## 11.1.0 275 | 276 | - Improve comments removal 277 | - Fix post list count in admin. 278 | - Disable XMLRPC 279 | - Disable unneeded APIs 280 | 281 | ## 11.0.1 282 | 283 | - Fix featured images on page template 284 | - Updated dependencies 285 | 286 | ## 11.0.0 287 | 288 | - Completely new theme with dark styles inspired by [Tania Rascia](https://www.taniarascia.com) 289 | 290 | ## 10.0.0 291 | 292 | - Restructured plugin for easier development 293 | - Updated dependencies 294 | - Switched to WordPress Coding Standards 295 | - Numerous makefile and other improvements 296 | 297 | ## 9.7.4 298 | 299 | - Updated dependencies 300 | 301 | ## 9.7.3 302 | 303 | - Updated dependencies 304 | - Fixed editor.css 305 | 306 | ## 9.7.2 307 | 308 | - Moved my own site import to a separate Make target to make working with the theme easier for others 309 | 310 | ## 9.7.1 311 | 312 | - Don't set content policy in theme. Use a plugin to modify 313 | 314 | ## 9.7.0 315 | 316 | - Add security headers 317 | 318 | ## 9.6.1 319 | 320 | - Fix a CSS issue causing horizontal scroll on header (Thanks David Wolfpaw) 321 | 322 | ## 9.6.0 323 | 324 | - Added new 'avatar' media size to work better with the homepage widget 325 | - Add search bar to header 326 | - Introduce pagination on the homepage 327 | - Add excerpts to the search page 328 | - Fixed bug caused by improperly calling filter callback 329 | 330 | ## 9.5.3 331 | 332 | - Add testing via GitHub Actions 333 | - Update dependencies 334 | 335 | ## 9.5.2 336 | 337 | - Cleanup mobile styles 338 | - Remove redundant links from footer 339 | 340 | ## 9.5.1 341 | 342 | - Add styles for better display on mobile 343 | 344 | ## 9.5.0 345 | 346 | - Revert to white backgrou 347 | - Simplify CSS 348 | 349 | ## 9.4.0 350 | 351 | - Remove Journal 352 | 353 | ## 9.3.5 354 | 355 | - Update dependencies 356 | - Cleanup and maintenance of build tools 357 | 358 | ## 9.3.4 359 | 360 | - Update dependencies 361 | - Migrate unit testing to brain monkey 362 | 363 | ## 9.3.3 364 | 365 | - Remove support for comments 366 | 367 | ## 9.3.2 368 | 369 | - Improve editor styles 370 | 371 | ## 9.3.1 372 | 373 | - Remove unneeded header elements 374 | 375 | ## 9.3.0 376 | 377 | - Switch to a dark theme 378 | - Use cache busting when SCRIPT_DEBUG is true 379 | - Improve quotes and code blocks (inspiration from Victoria Drake) 380 | - Full width header and footer 381 | - Sticky header 382 | - Improve image captions and styling 383 | 384 | ## 9.2.0 385 | 386 | - Improved development workflow using data synced from prod. 387 | - Removed unused CSS 388 | - Added "journal" page to properly handle journal posts 389 | - Added header to category pages 390 | 391 | ## 9.1.1 392 | 393 | - Fix next/prev paging for journal posts 394 | 395 | ## 9.1.0 396 | 397 | - Removed comments feed from header 398 | - Removed "journal" category from homepage 399 | - Add basic navigation between posts 400 | - Add template for journal page 401 | 402 | ## 9.0.0 403 | 404 | - Initial re-release. 405 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | DOCKER_RUN := @docker run --rm 2 | HIGHLIGHT :=\033[0;32m 3 | END_HIGHLIGHT :=\033[0m # No Color 4 | THEME_VERSION := $$(grep "^Version" style.css | awk -F' ' '{print $3}' | cut -d ":" -f2 | sed 's/ //g') 5 | ARGS = `arg="$(filter-out $@,$(MAKECMDGOALS))" && echo $${arg:-${1}}` 6 | 7 | %: 8 | @: 9 | 10 | .PHONY: build 11 | build: | clean-assets 12 | @echo "Building theme assets" 13 | if [ ! -d ./node_modules/ ]; then \ 14 | $(MAKE) install-npm; \ 15 | fi 16 | npm run build 17 | 18 | .PHONY: change 19 | change: 20 | docker run \ 21 | --rm \ 22 | --platform linux/amd64 \ 23 | --mount type=bind,source=$(PWD),target=/src \ 24 | -w /src \ 25 | -it \ 26 | ghcr.io/miniscruff/changie \ 27 | new 28 | 29 | .PHONY: changelog 30 | changelog: 31 | docker run \ 32 | --rm \ 33 | --platform linux/amd64 \ 34 | --mount type=bind,source=$(PWD),target=/src \ 35 | -w /src \ 36 | -it \ 37 | ghcr.io/miniscruff/changie \ 38 | batch $(call ARGS,defaultstring) 39 | docker run \ 40 | --rm \ 41 | --platform linux/amd64 \ 42 | --mount type=bind,source=$(PWD),target=/src \ 43 | -w /src \ 44 | -it \ 45 | ghcr.io/miniscruff/changie \ 46 | merge 47 | 48 | .PHONY: chriswiegman-theme-version.zip 49 | chriswiegman-theme-version.zip: clean-release 50 | @echo "Building release file: chriswiegman-theme.$(THEME_VERSION).zip" 51 | THEME_VERSION=$(THEME_VERSION) && \ 52 | cd ../ && \ 53 | zip \ 54 | --verbose \ 55 | --recurse-paths \ 56 | --exclude="*.changes/*" \ 57 | --exclude="*.git/*" \ 58 | --exclude="*.github/*" \ 59 | --exclude="*.vscode/*" \ 60 | --exclude="*node_modules/*" \ 61 | --exclude="*.changie.yml" \ 62 | --exclude="*.gitignore" \ 63 | --exclude="*.kana.json" \ 64 | --exclude="*.npmrc" \ 65 | --exclude="*.nvmrc" \ 66 | --exclude="*CHANGELOG.md" \ 67 | --exclude="*composer.json" \ 68 | --exclude="*composer.lock" \ 69 | --exclude="*Makefile" \ 70 | --exclude="*package-lock.json" \ 71 | --exclude="*package.json" \ 72 | --exclude="*phpcs.xml" \ 73 | --exclude="*pods.json" \ 74 | --exclude="*README.md" \ 75 | --exclude="*vendor/*" \ 76 | chriswiegman-theme/chriswiegman-theme.$$THEME_VERSION.zip \ 77 | chriswiegman-theme/* 78 | if [ ! -f ./chriswiegman-theme.$(THEME_VERSION).zip ]; then \ 79 | echo "file not available"; \ 80 | exit 1; \ 81 | fi 82 | 83 | .PHONY: clean 84 | clean: clean-assets clean-prod-assets clean-build clean-release 85 | 86 | .PHONY: clean-assets 87 | clean-assets: 88 | @echo "Cleaning up theme assets" 89 | rm -f assets/*.js 90 | rm -f assets/*.css 91 | rm -f assets/*.map 92 | 93 | .PHONY: clean-build 94 | clean-build: 95 | @echo "Cleaning up build-artifacts" 96 | rm -rf \ 97 | node_modules \ 98 | wordpress \ 99 | vendor \ 100 | .vscode/*.log 101 | 102 | .PHONY: clean-prod-assets 103 | clean-prod-assets: 104 | @echo "Cleaning old production assets" 105 | rm -rf ./wordpress/wp-content/mysql.sql 106 | rm -rf ./wordpress/wp-content/uploads/* 107 | 108 | .PHONY: clean-release 109 | clean-release: 110 | @echo "Cleaning up release file" 111 | rm -f chriswiegman-theme*.zip 112 | 113 | .PHONY: copy-prod-assets 114 | copy-prod-assets: | clean-prod-assets 115 | @echo "Copying assets from chriswiegman.com" 116 | rsync -aqz -e "ssh -p 18765" --progress u2489-wtdrslulygzg@giowm1307.siteground.biz:/home/u2489-wtdrslulygzg/www/chriswiegman.com/public_html/wp-content/uploads/ ./wordpress/wp-content/uploads/ 117 | scp -p 18765 -O u2489-wtdrslulygzg@giowm1307.siteground.biz:/home/u2489-wtdrslulygzg/www/chriswiegman.com/public_html/wp-content/mysql.sql ./wordpress/wp-content/ 118 | 119 | .PHONY: import-db 120 | import-db: 121 | echo "Importing production database" 122 | kana db import ./wordpress/wp-content/mysql.sql --replace-domain=chriswiegman.com 123 | kana wp plugin activate debug-bar 124 | kana wp plugin activate query-monitor 125 | 126 | .PHONY: destroy 127 | destroy: ## Destroys the developer environment completely (this is irreversible) 128 | if [ -d ./wordpress/ ]; then \ 129 | kana destroy --force; \ 130 | fi 131 | $(MAKE) clean 132 | 133 | .PHONY: help 134 | help: ## Display help 135 | @awk -F ':|##' \ 136 | '/^[^\t].+?:.*?##/ {\ 137 | printf "\033[36m%-30s\033[0m %s\n", $$1, $$NF \ 138 | }' $(MAKEFILE_LIST) | sort 139 | 140 | .PHONY: install 141 | install: | install-composer install-npm 142 | 143 | .PHONY: install-composer 144 | install-composer: 145 | composer install 146 | 147 | .PHONY: install-npm 148 | install-npm: 149 | npm install 150 | $(MAKE) build 151 | 152 | .PHONY: lint 153 | lint: ## Run all linting 154 | @echo "Running PHP linting" 155 | if [ ! -d ./vendor/ ]; then \ 156 | $(MAKE) install-composer; \ 157 | fi 158 | ./vendor/bin/phpcs --standard=./phpcs.xml 159 | 160 | .PHONY: open-db 161 | open-db: ## Open the database in TablePlus 162 | @echo "Opening the database for direct access" 163 | open mysql://wordpress:wordpress@127.0.0.1:$$(lando info --service=database --path 0.external_connection.port | tr -d "'")/wordpress?enviroment=local&name=$database&safeModeLevel=0&advancedSafeModeLevel=0 164 | 165 | .PHONY: release 166 | release: chriswiegman-theme-version.zip 167 | 168 | .PHONY: reset 169 | reset: destroy start ## Resets a running dev environment to new 170 | 171 | .PHONY: setup 172 | setup: | copy-prod-assets import-db 173 | 174 | .PHONY: start 175 | start: ## Starts the development environment including downloading and setting up everything it needs 176 | if [ ! -d ./wordpress/ ]; then \ 177 | $(MAKE) install; \ 178 | fi 179 | if [ ! "$$(docker ps | grep kana-chriswiegman-theme-wordpress)" ]; then \ 180 | kana start; \ 181 | fi 182 | 183 | .PHONY: stop 184 | stop: ## Stops the development environment. This is non-destructive. 185 | if [ "$$(docker ps | grep kana-chriswiegman-theme-wordpress)" ]; then \ 186 | kana stop; \ 187 | fi 188 | 189 | .PHONY: update 190 | update: | update-composer update-npm 191 | 192 | .PHONY: update-composer 193 | update-composer: 194 | composer update 195 | 196 | .PHONY: update-npm 197 | update-npm: 198 | npm update 199 | 200 | 201 | .PHONY: watch 202 | watch: 203 | @echo "Building and watching theme assets" 204 | npm run watch 205 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # The WordPress theme for ChrisWiegman.com 2 | 3 | Minimal and sustainable WordPress theme for ChrisWiegman.com. 4 | 5 | ## Getting the theme 6 | 7 | You can download the latest version from the [releases page](https://github.com/ChrisWiegman/chriswiegman-theme/releases) in this repo. 8 | 9 | ## Setup and Usage of the Development Environment 10 | 11 | A fully featured development environment is included using PHP 8.2 and more. Scripts to run commands including setup and more use _make_ as a task runner. See the instructions below for getting started. 12 | 13 | Before starting your workstation will need the following: 14 | 15 | - [Docker](https://www.docker.com/) 16 | - [Kana](https://github.com/ChrisWiegman/chriswiegman-theme) 17 | 18 | 1. Clone the repository 19 | 20 | `git clone https://github.com/chriswiegman/chriswiegman-theme.git` 21 | 22 | 2. Start Kana 23 | 24 | ```bash 25 | cd chriswiegman-theme 26 | make start 27 | ``` 28 | 29 | When finished, Kana will open a development version of your site in the browser and you're ready to go 30 | 31 | WordPress Credentials: 32 | 33 | **URL:** _http://chriswiegman-theme.sites.kana.li/wp-admin_ 34 | 35 | **Admin User:** _admin_ 36 | 37 | **Admin Password:** _password_ 38 | 39 | ## Using Xdebug 40 | 41 | Xdebug 3 released a [number of changes](https://xdebug.org/docs/upgrade_guide) that affect the way Xdebug works. Namely, it no longer listens on every request and requires a "trigger" to enable the connection. Use one of the following plugins to enable the trigger on your machine: 42 | 43 | - [Xdebug Helper for Firefox](https://addons.mozilla.org/en-GB/firefox/addon/xdebug-helper-for-firefox/) ([source](https://github.com/BrianGilbert/xdebug-helper-for-firefox)). 44 | - [Xdebug Helper for Chrome](https://chrome.google.com/extensions/detail/eadndfjplgieldjbigjakmdgkmoaaaoc) ([source](https://github.com/mac-cain13/xdebug-helper-for-chrome)). 45 | - [XDebugToggle for Safari](https://apps.apple.com/app/safari-xdebug-toggle/id1437227804?mt=12) ([source](https://github.com/kampfq/SafariXDebugToggle)). 46 | 47 | To enable Xdebug using the built-in Kana configuration use the following: 48 | 49 | ```bash 50 | kana xdebug on 51 | ``` 52 | 53 | ## Build the project 54 | 55 | ```bash 56 | make build 57 | ``` 58 | 59 | Note, assets will also build during the install phase if you use `make start`. 60 | 61 | I also use [PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer) with [WordPress Coding Standards](https://github.com/WordPress/WordPress-Coding-Standards) and [JSHint](http://jshint.com/) with [WordPress' JS Standards](https://make.wordpress.org/core/handbook/best-practices/coding-standards/javascript/#installing-and-running-jshint). Linting will automagically be setup for you if you use [Visual Studio Code](https://code.visualstudio.com/). If you want to run it manually use the following: 62 | 63 | ```bash 64 | make lint 65 | ``` 66 | -------------------------------------------------------------------------------- /assets/scss/components/block-image.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Colors 3 | */ 4 | /** 5 | * Breakpoints & Media Queries 6 | */ 7 | /** 8 | * SCSS Variables. 9 | * 10 | * Please use variables from this sheet to ensure consistency across the UI. 11 | * Don't add to this sheet unless you're pretty sure the value will be reused in many places. 12 | * For example, don't add rules to this sheet that affect block visuals. It's purely for UI. 13 | */ 14 | /** 15 | * Colors 16 | */ 17 | /** 18 | * Fonts & basic variables. 19 | */ 20 | /** 21 | * Grid System. 22 | * https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/ 23 | */ 24 | /** 25 | * Dimensions. 26 | */ 27 | /** 28 | * Shadows. 29 | */ 30 | /** 31 | * Editor widths. 32 | */ 33 | /** 34 | * Block & Editor UI. 35 | */ 36 | /** 37 | * Block paddings. 38 | */ 39 | /** 40 | * React Native specific. 41 | * These variables do not appear to be used anywhere else. 42 | */ 43 | /** 44 | * Converts a hex value into the rgb equivalent. 45 | * 46 | * @param {string} hex - the hexadecimal value to convert 47 | * @return {string} comma separated rgb values 48 | */ 49 | /** 50 | * Breakpoint mixins 51 | */ 52 | /** 53 | * Long content fade mixin 54 | * 55 | * Creates a fading overlay to signify that the content is longer 56 | * than the space allows. 57 | */ 58 | /** 59 | * Focus styles. 60 | */ 61 | /** 62 | * Applies editor left position to the selector passed as argument 63 | */ 64 | /** 65 | * Styles that are reused verbatim in a few places 66 | */ 67 | /** 68 | * Allows users to opt-out of animations via OS-level preferences. 69 | */ 70 | /** 71 | * Reset default styles for JavaScript UI based pages. 72 | * This is a WP-admin agnostic reset 73 | */ 74 | /** 75 | * Reset the WP Admin page styles for Gutenberg-like pages. 76 | */ 77 | .wp-block-image { 78 | margin: 0 0 1em 0; 79 | } 80 | .wp-block-image img { 81 | height: auto; 82 | max-width: 100%; 83 | vertical-align: bottom; 84 | } 85 | .wp-block-image.aligncenter { 86 | text-align: center; 87 | } 88 | .wp-block-image.alignfull img, 89 | .wp-block-image.alignwide img { 90 | height: auto; 91 | width: 100%; 92 | } 93 | .wp-block-image .alignleft, 94 | .wp-block-image .alignright, 95 | .wp-block-image .aligncenter { 96 | display: table; 97 | } 98 | .wp-block-image .alignleft > figcaption, 99 | .wp-block-image .alignright > figcaption, 100 | .wp-block-image .aligncenter > figcaption { 101 | display: table-caption; 102 | caption-side: bottom; 103 | } 104 | .wp-block-image .alignleft { 105 | /*rtl:ignore*/ 106 | float: left; 107 | /*rtl:ignore*/ 108 | margin-left: 0; 109 | margin-right: 1em; 110 | margin-top: 0.5em; 111 | margin-bottom: 0.5em; 112 | } 113 | .wp-block-image .alignright { 114 | /*rtl:ignore*/ 115 | float: right; 116 | /*rtl:ignore*/ 117 | margin-right: 0; 118 | margin-left: 1em; 119 | margin-top: 0.5em; 120 | margin-bottom: 0.5em; 121 | } 122 | .wp-block-image .aligncenter { 123 | margin-left: auto; 124 | margin-right: auto; 125 | } 126 | .wp-block-image figcaption { 127 | margin-top: 0.5em; 128 | margin-bottom: 1em; 129 | } 130 | -------------------------------------------------------------------------------- /assets/scss/components/content.scss: -------------------------------------------------------------------------------- 1 | .single, 2 | .page, 3 | .search, 4 | .archive { 5 | main { 6 | article { 7 | 8 | .content-header, 9 | .content-categories { 10 | padding: 0 2rem 2rem 2rem; 11 | text-align: center; 12 | 13 | .meta { 14 | padding-top: 0.4rem; 15 | } 16 | 17 | .tags, 18 | .categories { 19 | align-items: center; 20 | display: flex; 21 | flex-wrap: wrap; 22 | gap: 0.5rem; 23 | justify-content: center; 24 | margin: 1.5rem 0 0 0; 25 | 26 | a { 27 | border: 1px solid $border-light; 28 | border-radius: 8px; 29 | color: $text-bright; 30 | display: inline-block; 31 | font-size: 0.9rem; 32 | font-weight: 600; 33 | line-height: normal; 34 | padding: 0.4rem 0.6rem; 35 | vertical-align: middle; 36 | } 37 | 38 | a:hover { 39 | background: $reverse; 40 | border-color: $primary; 41 | color: $primary; 42 | } 43 | } 44 | } 45 | 46 | .content { 47 | .wp-post-image { 48 | display: block; 49 | margin: 0 auto 2rem auto; 50 | max-width: 100%; 51 | } 52 | 53 | p, 54 | ul, 55 | ol { 56 | font-size: 1.3rem; 57 | margin: 0 0 2rem; 58 | } 59 | 60 | .wp-block-code, 61 | .wp-block-quote { 62 | border-radius: 8px; 63 | border: 1px solid $border-light; 64 | font-size: 1.3rem; 65 | margin: 2.5em 0; 66 | 67 | p { 68 | padding: 0 1rem; 69 | } 70 | } 71 | 72 | .wp-block-quote { 73 | background-color: $background-code; 74 | font-family: monospace; 75 | 76 | p { 77 | margin: 0; 78 | padding: 1rem; 79 | } 80 | } 81 | } 82 | } 83 | 84 | .prevnext { 85 | padding-top: 0; 86 | 87 | a { 88 | border-bottom: none; 89 | } 90 | 91 | .prev { 92 | max-width: 49%; 93 | float: left; 94 | } 95 | 96 | .next { 97 | max-width: 49%; 98 | float: right; 99 | text-align: right; 100 | } 101 | 102 | &:after { 103 | content: " "; 104 | display: block; 105 | clear: both; 106 | } 107 | } 108 | } 109 | } -------------------------------------------------------------------------------- /assets/scss/components/editor.scss: -------------------------------------------------------------------------------- 1 | body { 2 | -webkit-font-smoothing: antialiased; 3 | font-family: $font-family; 4 | font-size: 1rem; 5 | line-height: 1.6; 6 | } 7 | 8 | .wp-block { 9 | max-width: 80%; 10 | } 11 | 12 | h1 { 13 | font-size: 2.5rem; 14 | font-weight: 700; 15 | margin-bottom: 0.75rem; 16 | } 17 | 18 | h2, 19 | h3, 20 | h4, 21 | h5 { 22 | margin: 0 0 1.25rem 0; 23 | } 24 | 25 | h2 { 26 | font-size: 1.9rem; 27 | padding-bottom: 0.25rem; 28 | } 29 | 30 | h3 { 31 | font-size: 1.75rem; 32 | } 33 | 34 | h4 { 35 | margin-bottom: 0.75rem; 36 | } 37 | 38 | h5 { 39 | font-size: 1rem; 40 | text-transform: uppercase; 41 | } 42 | 43 | blockquote, 44 | ol, 45 | p, 46 | table, 47 | ul { 48 | margin: 0 0 2rem; 49 | } 50 | 51 | .wp-post-image { 52 | display: block; 53 | margin: 0 auto 2rem auto; 54 | width: 100%; 55 | height: auto; 56 | } 57 | 58 | p, 59 | ul, 60 | ol { 61 | font-size: 1.3rem; 62 | margin: 0 0 2rem; 63 | } 64 | -------------------------------------------------------------------------------- /assets/scss/components/global.scss: -------------------------------------------------------------------------------- 1 | body { 2 | -webkit-font-smoothing: antialiased; 3 | margin: 0; 4 | font-family: $font-family; 5 | font-size: 1rem; 6 | line-height: 1.6; 7 | color: $text; 8 | background: $background; 9 | } 10 | 11 | a { 12 | text-decoration: none; 13 | } 14 | 15 | a.post { 16 | grid-gap: 1rem; 17 | align-items: center; 18 | border: 1px solid transparent; 19 | display: grid; 20 | grid-template-columns: auto 60px; 21 | margin-left: -1rem; 22 | margin-right: -1rem; 23 | padding: 0.4rem 1rem; 24 | color: $text-dark; 25 | 26 | &:hover { 27 | border: 1px solid transparent; 28 | border-radius: 8px; 29 | background: $dark-opacity; 30 | color: $text-bright; 31 | 32 | .post-title { 33 | color: $text-bright; 34 | } 35 | } 36 | 37 | .post-title { 38 | color: $text-dark; 39 | display: grid; 40 | -webkit-filter: brightness(1); 41 | filter: brightness(1); 42 | font-size: 1.2rem; 43 | margin: 0; 44 | } 45 | 46 | .post-day { 47 | display: block; 48 | font-size: 0.8rem; 49 | font-weight: 400; 50 | text-align: center; 51 | } 52 | } 53 | 54 | h1, 55 | h2, 56 | h3 { 57 | margin: 0 0 1.5rem 0; 58 | line-height: 1.2; 59 | color: $primary; 60 | scroll-margin-top: 80px; 61 | font-weight: 600; 62 | } 63 | 64 | h3 { 65 | color: $secondary; 66 | font-weight: 500; 67 | } 68 | 69 | h2:not(:first-child), 70 | h3:not(:first-child) { 71 | margin-top: 3rem; 72 | } 73 | 74 | header, 75 | footer { 76 | .content { 77 | ul { 78 | justify-content: flex-end; 79 | gap: 0.5rem; 80 | padding: 0; 81 | list-style: none; 82 | 83 | li { 84 | display: inline; 85 | } 86 | } 87 | 88 | a { 89 | color: $text; 90 | gap: 0.5rem; 91 | padding: 0.5rem; 92 | border-radius: 8px; 93 | font-size: 0.9rem; 94 | align-items: center; 95 | 96 | &:hover { 97 | color: $text-bright; 98 | background: $navbar-hover; 99 | } 100 | } 101 | } 102 | } 103 | 104 | header { 105 | position: fixed; 106 | top: 0; 107 | left: 0; 108 | width: 100%; 109 | background: $navbar; 110 | border-bottom: 1px solid $border-light; 111 | height: 60px; 112 | z-index: 2000; 113 | 114 | .content { 115 | display: flex; 116 | align-items: center; 117 | font-weight: 600; 118 | padding: 0 1.5rem; 119 | height: 100%; 120 | justify-content: space-between; 121 | 122 | .menu { 123 | text-align: center; 124 | } 125 | 126 | img { 127 | max-height: 20px; 128 | max-width: 25px; 129 | margin: 0 5px -3px 0; 130 | } 131 | } 132 | } 133 | 134 | .container, 135 | .prevnext { 136 | margin-left: auto; 137 | margin-right: auto; 138 | max-width: 850px; 139 | padding: 2rem; 140 | } 141 | 142 | main { 143 | margin-top: 60px; 144 | min-height: calc(100vh - 215px); 145 | 146 | article, 147 | .prevnext { 148 | a { 149 | border-top: 2px solid transparent; 150 | border-bottom: 2px solid $primary; 151 | color: $link; 152 | font-weight: 600; 153 | 154 | &:hover { 155 | background: $primary; 156 | border-top: 2px solid $primary; 157 | color: $reverse; 158 | } 159 | } 160 | 161 | h1 { 162 | font-size: 2.5rem; 163 | font-weight: 700; 164 | margin-bottom: 0.75rem; 165 | color: $text-bright; 166 | } 167 | 168 | h2, 169 | h3 { 170 | margin: 0 0 1.25rem 0; 171 | } 172 | 173 | h2 { 174 | font-size: 1.9rem; 175 | padding-bottom: 0.25rem; 176 | } 177 | 178 | h3 { 179 | font-size: 1.75rem; 180 | } 181 | 182 | blockquote, 183 | ol, 184 | p, 185 | ul { 186 | margin: 0 0 2rem; 187 | } 188 | 189 | header { 190 | padding-top: 2rem; 191 | text-align: center; 192 | } 193 | 194 | .main-header { 195 | display: flex; 196 | justify-content: space-between; 197 | align-items: center; 198 | border-bottom: 1px solid $border-light; 199 | 200 | a { 201 | font-size: 1rem; 202 | 203 | &:hover { 204 | border-top: 2px solid $primary; 205 | color: $reverse; 206 | } 207 | } 208 | } 209 | } 210 | } 211 | 212 | footer { 213 | border-bottom: none; 214 | border-top: 1px solid $border-light; 215 | width: 100%; 216 | background: $navbar; 217 | padding: 1rem 0; 218 | 219 | .content { 220 | align-items: center; 221 | display: flex; 222 | flex-direction: column; 223 | gap: 0.5rem; 224 | 225 | ul { 226 | margin: 0; 227 | } 228 | 229 | .copyright, 230 | .copyright a { 231 | font-size: 0.7rem; 232 | } 233 | 234 | .copyright { 235 | display: inline-block; 236 | } 237 | } 238 | } 239 | -------------------------------------------------------------------------------- /assets/scss/components/home.scss: -------------------------------------------------------------------------------- 1 | .home { 2 | main { 3 | .hero { 4 | padding: 2rem 0 0; 5 | text-align: left; 6 | 7 | .container { 8 | color: $text-dark; 9 | font-size: 1.3rem; 10 | 11 | .content { 12 | align-items: center; 13 | display: flex; 14 | justify-content: space-between; 15 | 16 | h1 { 17 | color: $text-bright; 18 | font-size: 3rem; 19 | margin-bottom: 1.5rem; 20 | } 21 | 22 | img { 23 | height: auto; 24 | margin-left: 2rem; 25 | width: 225px; 26 | } 27 | } 28 | } 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /assets/scss/components/max-710.scss: -------------------------------------------------------------------------------- 1 | @media screen and (max-width: 710px) { 2 | .prevnext, 3 | .container { 4 | padding: 1rem; 5 | } 6 | 7 | header, 8 | footer { 9 | .content { 10 | padding: 0 0.2rem; 11 | font-size: 0.7rem; 12 | 13 | a { 14 | padding: 0.2rem; 15 | } 16 | } 17 | 18 | img { 19 | display: none; 20 | } 21 | } 22 | 23 | footer { 24 | .content { 25 | .copyright { 26 | text-align: center; 27 | } 28 | } 29 | } 30 | 31 | .home, 32 | .single, 33 | .page-index, 34 | .page { 35 | .content-search form { 36 | grid-template-columns: auto; 37 | } 38 | 39 | main { 40 | .hero { 41 | padding: 0; 42 | .container { 43 | .content { 44 | align-items: flex-start; 45 | flex-direction: column; 46 | display: flex; 47 | 48 | .intro { 49 | order: 2; 50 | 51 | h1 { 52 | font-size: 1.5rem; 53 | margin-bottom: 1rem; 54 | } 55 | 56 | p { 57 | font-size: 1rem; 58 | } 59 | } 60 | 61 | img { 62 | order: 1; 63 | max-width: 50%; 64 | margin: 0 auto 1.5rem auto; 65 | } 66 | } 67 | } 68 | } 69 | 70 | article { 71 | .content-header { 72 | padding: 0 0 2rem 0; 73 | 74 | .meta { 75 | padding: 0.4rem 0; 76 | } 77 | } 78 | 79 | a.post h3 { 80 | font-size: 1rem; 81 | } 82 | } 83 | } 84 | 85 | main { 86 | article { 87 | 88 | .content { 89 | p, 90 | ol, 91 | ul, 92 | table, 93 | blockquote { 94 | font-size: 1.2rem; 95 | margin: 0 0 1.5rem; 96 | } 97 | 98 | .wp-post-image { 99 | height: auto; 100 | } 101 | } 102 | } 103 | } 104 | 105 | .description { 106 | font-size: 1rem; 107 | } 108 | } 109 | 110 | main { 111 | article { 112 | h1 { 113 | font-size: 1.8rem; 114 | } 115 | 116 | h2 { 117 | font-size: 1.5rem; 118 | } 119 | } 120 | } 121 | } 122 | -------------------------------------------------------------------------------- /assets/scss/components/page-index.scss: -------------------------------------------------------------------------------- 1 | .page-index { 2 | h2 { 3 | margin-top: 2.5rem; 4 | } 5 | 6 | .post-count { 7 | color: $text-bright; 8 | } 9 | 10 | .term { 11 | border-bottom: 2px solid $primary; 12 | } 13 | 14 | .description { 15 | color: $text-dark; 16 | font-size: 1.45rem; 17 | margin-bottom: 0; 18 | } 19 | 20 | .posts-group { 21 | margin-top: 2rem; 22 | } 23 | 24 | .content-search { 25 | form { 26 | grid-gap: 1rem; 27 | align-items: center; 28 | display: grid; 29 | grid-template-columns: auto 90px; 30 | 31 | label { 32 | display: none; 33 | } 34 | 35 | input { 36 | -webkit-appearance: none; 37 | appearance: none; 38 | background: $background; 39 | border: 1px solid $border-light; 40 | border-radius: 8px; 41 | color: $text-bright; 42 | font-size: 1.1rem; 43 | padding: 0.75rem 1rem; 44 | } 45 | 46 | input[type="submit"] { 47 | text-align: center; 48 | margin: auto; 49 | 50 | &:hover { 51 | cursor: pointer; 52 | background: $reverse; 53 | border-color: $primary; 54 | color: $primary; 55 | } 56 | } 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /assets/scss/components/variables.scss: -------------------------------------------------------------------------------- 1 | $primary: #fdb54a; 2 | $secondary: #ffd479; 3 | $background: #252525; 4 | $background-code: #2b303b; 5 | $border: #111; 6 | $border-light: #444; 7 | $dark-opacity: rgba(0, 0, 0, 0.2); 8 | $link: #fff; 9 | $navbar: #181818; 10 | $navbar-hover: #272727; 11 | $reverse: $border; 12 | $text: #b3b9c5; 13 | $text-bright: #eee; 14 | $text-dark: #8f949d; 15 | $text-heading: $primary; 16 | 17 | $font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", Arial, sans-serif; -------------------------------------------------------------------------------- /assets/scss/editor.scss: -------------------------------------------------------------------------------- 1 | @import "components/variables.scss"; 2 | @import "components/block-image.scss"; 3 | @import "components/editor.scss"; -------------------------------------------------------------------------------- /assets/scss/main.scss: -------------------------------------------------------------------------------- 1 | @import "components/variables.scss"; 2 | @import "components/global.scss"; 3 | @import "components/block-image.scss"; 4 | @import "components/home.scss"; 5 | @import "components/content.scss"; 6 | @import "components/page-index.scss"; 7 | @import "components/max-710.scss"; -------------------------------------------------------------------------------- /category.php: -------------------------------------------------------------------------------- 1 | 12 |
13 |
14 |
15 |
16 | Posts in: %s', esc_attr( single_cat_title( '', false ) ) ); ?> 17 |

%d posts found.', intval( $wp_query->found_posts ) ); ?>

18 |
19 | 26 |
27 |
28 | Filter Posts: All Posts 29 | 'name', 33 | 'order' => 'ASC', 34 | ) 35 | ); 36 | 37 | foreach ( $cw_theme_categories as $cw_theme_category ) { 38 | printf( '%s Posts', esc_url( get_category_link( $cw_theme_category->term_id ) ), esc_html( $cw_theme_category->name ) ); 39 | } 40 | ?> 41 |
42 |
43 |
44 | have_posts() ) { 46 | 47 | echo ''; 48 | 49 | $cw_theme_current_year = false; 50 | 51 | /* Start the Loop */ 52 | while ( $wp_query->have_posts() ) { 53 | $wp_query->the_post(); 54 | 55 | $cw_theme_post_year = get_the_date( 'Y' ); 56 | 57 | if ( $cw_theme_post_year !== $cw_theme_current_year ) { 58 | 59 | if ( false !== $cw_theme_current_year ) { 60 | echo '
'; 61 | echo '
'; 62 | } 63 | 64 | echo '
'; 65 | printf( '

%s

', intval( $cw_theme_post_year ) ); 66 | echo '
'; 67 | 68 | } 69 | 70 | $cw_theme_current_year = $cw_theme_post_year; 71 | ?> 72 | 73 | ', '' ); ?> 74 | 75 | 76 | 80 |
81 |
82 |
83 | 84 |
85 | =8.0" 6 | }, 7 | "require-dev": { 8 | "dealerdirect/phpcodesniffer-composer-installer": "v1.0.0", 9 | "phpcompatibility/phpcompatibility-wp": "2.1.5", 10 | "wp-coding-standards/wpcs": "3.1.0", 11 | "squizlabs/php_codesniffer": "3.10.3", 12 | "sirbrillig/phpcs-variable-analysis": "v2.11.19" 13 | }, 14 | "config": { 15 | "allow-plugins": { 16 | "dealerdirect/phpcodesniffer-composer-installer": true 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "5ac4ed9577cfc3aaa9dd97d1902e58ed", 8 | "packages": [], 9 | "packages-dev": [ 10 | { 11 | "name": "dealerdirect/phpcodesniffer-composer-installer", 12 | "version": "v1.0.0", 13 | "source": { 14 | "type": "git", 15 | "url": "https://github.com/PHPCSStandards/composer-installer.git", 16 | "reference": "4be43904336affa5c2f70744a348312336afd0da" 17 | }, 18 | "dist": { 19 | "type": "zip", 20 | "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/4be43904336affa5c2f70744a348312336afd0da", 21 | "reference": "4be43904336affa5c2f70744a348312336afd0da", 22 | "shasum": "" 23 | }, 24 | "require": { 25 | "composer-plugin-api": "^1.0 || ^2.0", 26 | "php": ">=5.4", 27 | "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0" 28 | }, 29 | "require-dev": { 30 | "composer/composer": "*", 31 | "ext-json": "*", 32 | "ext-zip": "*", 33 | "php-parallel-lint/php-parallel-lint": "^1.3.1", 34 | "phpcompatibility/php-compatibility": "^9.0", 35 | "yoast/phpunit-polyfills": "^1.0" 36 | }, 37 | "type": "composer-plugin", 38 | "extra": { 39 | "class": "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" 40 | }, 41 | "autoload": { 42 | "psr-4": { 43 | "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" 44 | } 45 | }, 46 | "notification-url": "https://packagist.org/downloads/", 47 | "license": [ 48 | "MIT" 49 | ], 50 | "authors": [ 51 | { 52 | "name": "Franck Nijhof", 53 | "email": "franck.nijhof@dealerdirect.com", 54 | "homepage": "http://www.frenck.nl", 55 | "role": "Developer / IT Manager" 56 | }, 57 | { 58 | "name": "Contributors", 59 | "homepage": "https://github.com/PHPCSStandards/composer-installer/graphs/contributors" 60 | } 61 | ], 62 | "description": "PHP_CodeSniffer Standards Composer Installer Plugin", 63 | "homepage": "http://www.dealerdirect.com", 64 | "keywords": [ 65 | "PHPCodeSniffer", 66 | "PHP_CodeSniffer", 67 | "code quality", 68 | "codesniffer", 69 | "composer", 70 | "installer", 71 | "phpcbf", 72 | "phpcs", 73 | "plugin", 74 | "qa", 75 | "quality", 76 | "standard", 77 | "standards", 78 | "style guide", 79 | "stylecheck", 80 | "tests" 81 | ], 82 | "support": { 83 | "issues": "https://github.com/PHPCSStandards/composer-installer/issues", 84 | "source": "https://github.com/PHPCSStandards/composer-installer" 85 | }, 86 | "time": "2023-01-05T11:28:13+00:00" 87 | }, 88 | { 89 | "name": "phpcompatibility/php-compatibility", 90 | "version": "9.3.5", 91 | "source": { 92 | "type": "git", 93 | "url": "https://github.com/PHPCompatibility/PHPCompatibility.git", 94 | "reference": "9fb324479acf6f39452e0655d2429cc0d3914243" 95 | }, 96 | "dist": { 97 | "type": "zip", 98 | "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/9fb324479acf6f39452e0655d2429cc0d3914243", 99 | "reference": "9fb324479acf6f39452e0655d2429cc0d3914243", 100 | "shasum": "" 101 | }, 102 | "require": { 103 | "php": ">=5.3", 104 | "squizlabs/php_codesniffer": "^2.3 || ^3.0.2" 105 | }, 106 | "conflict": { 107 | "squizlabs/php_codesniffer": "2.6.2" 108 | }, 109 | "require-dev": { 110 | "phpunit/phpunit": "~4.5 || ^5.0 || ^6.0 || ^7.0" 111 | }, 112 | "suggest": { 113 | "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically.", 114 | "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues." 115 | }, 116 | "type": "phpcodesniffer-standard", 117 | "notification-url": "https://packagist.org/downloads/", 118 | "license": [ 119 | "LGPL-3.0-or-later" 120 | ], 121 | "authors": [ 122 | { 123 | "name": "Wim Godden", 124 | "homepage": "https://github.com/wimg", 125 | "role": "lead" 126 | }, 127 | { 128 | "name": "Juliette Reinders Folmer", 129 | "homepage": "https://github.com/jrfnl", 130 | "role": "lead" 131 | }, 132 | { 133 | "name": "Contributors", 134 | "homepage": "https://github.com/PHPCompatibility/PHPCompatibility/graphs/contributors" 135 | } 136 | ], 137 | "description": "A set of sniffs for PHP_CodeSniffer that checks for PHP cross-version compatibility.", 138 | "homepage": "http://techblog.wimgodden.be/tag/codesniffer/", 139 | "keywords": [ 140 | "compatibility", 141 | "phpcs", 142 | "standards" 143 | ], 144 | "support": { 145 | "issues": "https://github.com/PHPCompatibility/PHPCompatibility/issues", 146 | "source": "https://github.com/PHPCompatibility/PHPCompatibility" 147 | }, 148 | "time": "2019-12-27T09:44:58+00:00" 149 | }, 150 | { 151 | "name": "phpcompatibility/phpcompatibility-paragonie", 152 | "version": "1.3.3", 153 | "source": { 154 | "type": "git", 155 | "url": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie.git", 156 | "reference": "293975b465e0e709b571cbf0c957c6c0a7b9a2ac" 157 | }, 158 | "dist": { 159 | "type": "zip", 160 | "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityParagonie/zipball/293975b465e0e709b571cbf0c957c6c0a7b9a2ac", 161 | "reference": "293975b465e0e709b571cbf0c957c6c0a7b9a2ac", 162 | "shasum": "" 163 | }, 164 | "require": { 165 | "phpcompatibility/php-compatibility": "^9.0" 166 | }, 167 | "require-dev": { 168 | "dealerdirect/phpcodesniffer-composer-installer": "^1.0", 169 | "paragonie/random_compat": "dev-master", 170 | "paragonie/sodium_compat": "dev-master" 171 | }, 172 | "suggest": { 173 | "dealerdirect/phpcodesniffer-composer-installer": "^1.0 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.", 174 | "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues." 175 | }, 176 | "type": "phpcodesniffer-standard", 177 | "notification-url": "https://packagist.org/downloads/", 178 | "license": [ 179 | "LGPL-3.0-or-later" 180 | ], 181 | "authors": [ 182 | { 183 | "name": "Wim Godden", 184 | "role": "lead" 185 | }, 186 | { 187 | "name": "Juliette Reinders Folmer", 188 | "role": "lead" 189 | } 190 | ], 191 | "description": "A set of rulesets for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by the Paragonie polyfill libraries.", 192 | "homepage": "http://phpcompatibility.com/", 193 | "keywords": [ 194 | "compatibility", 195 | "paragonie", 196 | "phpcs", 197 | "polyfill", 198 | "standards", 199 | "static analysis" 200 | ], 201 | "support": { 202 | "issues": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie/issues", 203 | "security": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie/security/policy", 204 | "source": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie" 205 | }, 206 | "funding": [ 207 | { 208 | "url": "https://github.com/PHPCompatibility", 209 | "type": "github" 210 | }, 211 | { 212 | "url": "https://github.com/jrfnl", 213 | "type": "github" 214 | }, 215 | { 216 | "url": "https://opencollective.com/php_codesniffer", 217 | "type": "open_collective" 218 | } 219 | ], 220 | "time": "2024-04-24T21:30:46+00:00" 221 | }, 222 | { 223 | "name": "phpcompatibility/phpcompatibility-wp", 224 | "version": "2.1.5", 225 | "source": { 226 | "type": "git", 227 | "url": "https://github.com/PHPCompatibility/PHPCompatibilityWP.git", 228 | "reference": "01c1ff2704a58e46f0cb1ca9d06aee07b3589082" 229 | }, 230 | "dist": { 231 | "type": "zip", 232 | "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityWP/zipball/01c1ff2704a58e46f0cb1ca9d06aee07b3589082", 233 | "reference": "01c1ff2704a58e46f0cb1ca9d06aee07b3589082", 234 | "shasum": "" 235 | }, 236 | "require": { 237 | "phpcompatibility/php-compatibility": "^9.0", 238 | "phpcompatibility/phpcompatibility-paragonie": "^1.0" 239 | }, 240 | "require-dev": { 241 | "dealerdirect/phpcodesniffer-composer-installer": "^1.0" 242 | }, 243 | "suggest": { 244 | "dealerdirect/phpcodesniffer-composer-installer": "^1.0 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.", 245 | "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues." 246 | }, 247 | "type": "phpcodesniffer-standard", 248 | "notification-url": "https://packagist.org/downloads/", 249 | "license": [ 250 | "LGPL-3.0-or-later" 251 | ], 252 | "authors": [ 253 | { 254 | "name": "Wim Godden", 255 | "role": "lead" 256 | }, 257 | { 258 | "name": "Juliette Reinders Folmer", 259 | "role": "lead" 260 | } 261 | ], 262 | "description": "A ruleset for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by WordPress.", 263 | "homepage": "http://phpcompatibility.com/", 264 | "keywords": [ 265 | "compatibility", 266 | "phpcs", 267 | "standards", 268 | "static analysis", 269 | "wordpress" 270 | ], 271 | "support": { 272 | "issues": "https://github.com/PHPCompatibility/PHPCompatibilityWP/issues", 273 | "security": "https://github.com/PHPCompatibility/PHPCompatibilityWP/security/policy", 274 | "source": "https://github.com/PHPCompatibility/PHPCompatibilityWP" 275 | }, 276 | "funding": [ 277 | { 278 | "url": "https://github.com/PHPCompatibility", 279 | "type": "github" 280 | }, 281 | { 282 | "url": "https://github.com/jrfnl", 283 | "type": "github" 284 | }, 285 | { 286 | "url": "https://opencollective.com/php_codesniffer", 287 | "type": "open_collective" 288 | } 289 | ], 290 | "time": "2024-04-24T21:37:59+00:00" 291 | }, 292 | { 293 | "name": "phpcsstandards/phpcsextra", 294 | "version": "1.2.1", 295 | "source": { 296 | "type": "git", 297 | "url": "https://github.com/PHPCSStandards/PHPCSExtra.git", 298 | "reference": "11d387c6642b6e4acaf0bd9bf5203b8cca1ec489" 299 | }, 300 | "dist": { 301 | "type": "zip", 302 | "url": "https://api.github.com/repos/PHPCSStandards/PHPCSExtra/zipball/11d387c6642b6e4acaf0bd9bf5203b8cca1ec489", 303 | "reference": "11d387c6642b6e4acaf0bd9bf5203b8cca1ec489", 304 | "shasum": "" 305 | }, 306 | "require": { 307 | "php": ">=5.4", 308 | "phpcsstandards/phpcsutils": "^1.0.9", 309 | "squizlabs/php_codesniffer": "^3.8.0" 310 | }, 311 | "require-dev": { 312 | "php-parallel-lint/php-console-highlighter": "^1.0", 313 | "php-parallel-lint/php-parallel-lint": "^1.3.2", 314 | "phpcsstandards/phpcsdevcs": "^1.1.6", 315 | "phpcsstandards/phpcsdevtools": "^1.2.1", 316 | "phpunit/phpunit": "^4.5 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" 317 | }, 318 | "type": "phpcodesniffer-standard", 319 | "extra": { 320 | "branch-alias": { 321 | "dev-stable": "1.x-dev", 322 | "dev-develop": "1.x-dev" 323 | } 324 | }, 325 | "notification-url": "https://packagist.org/downloads/", 326 | "license": [ 327 | "LGPL-3.0-or-later" 328 | ], 329 | "authors": [ 330 | { 331 | "name": "Juliette Reinders Folmer", 332 | "homepage": "https://github.com/jrfnl", 333 | "role": "lead" 334 | }, 335 | { 336 | "name": "Contributors", 337 | "homepage": "https://github.com/PHPCSStandards/PHPCSExtra/graphs/contributors" 338 | } 339 | ], 340 | "description": "A collection of sniffs and standards for use with PHP_CodeSniffer.", 341 | "keywords": [ 342 | "PHP_CodeSniffer", 343 | "phpcbf", 344 | "phpcodesniffer-standard", 345 | "phpcs", 346 | "standards", 347 | "static analysis" 348 | ], 349 | "support": { 350 | "issues": "https://github.com/PHPCSStandards/PHPCSExtra/issues", 351 | "security": "https://github.com/PHPCSStandards/PHPCSExtra/security/policy", 352 | "source": "https://github.com/PHPCSStandards/PHPCSExtra" 353 | }, 354 | "funding": [ 355 | { 356 | "url": "https://github.com/PHPCSStandards", 357 | "type": "github" 358 | }, 359 | { 360 | "url": "https://github.com/jrfnl", 361 | "type": "github" 362 | }, 363 | { 364 | "url": "https://opencollective.com/php_codesniffer", 365 | "type": "open_collective" 366 | } 367 | ], 368 | "time": "2023-12-08T16:49:07+00:00" 369 | }, 370 | { 371 | "name": "phpcsstandards/phpcsutils", 372 | "version": "1.0.12", 373 | "source": { 374 | "type": "git", 375 | "url": "https://github.com/PHPCSStandards/PHPCSUtils.git", 376 | "reference": "87b233b00daf83fb70f40c9a28692be017ea7c6c" 377 | }, 378 | "dist": { 379 | "type": "zip", 380 | "url": "https://api.github.com/repos/PHPCSStandards/PHPCSUtils/zipball/87b233b00daf83fb70f40c9a28692be017ea7c6c", 381 | "reference": "87b233b00daf83fb70f40c9a28692be017ea7c6c", 382 | "shasum": "" 383 | }, 384 | "require": { 385 | "dealerdirect/phpcodesniffer-composer-installer": "^0.4.1 || ^0.5 || ^0.6.2 || ^0.7 || ^1.0", 386 | "php": ">=5.4", 387 | "squizlabs/php_codesniffer": "^3.10.0 || 4.0.x-dev@dev" 388 | }, 389 | "require-dev": { 390 | "ext-filter": "*", 391 | "php-parallel-lint/php-console-highlighter": "^1.0", 392 | "php-parallel-lint/php-parallel-lint": "^1.3.2", 393 | "phpcsstandards/phpcsdevcs": "^1.1.6", 394 | "yoast/phpunit-polyfills": "^1.1.0 || ^2.0.0" 395 | }, 396 | "type": "phpcodesniffer-standard", 397 | "extra": { 398 | "branch-alias": { 399 | "dev-stable": "1.x-dev", 400 | "dev-develop": "1.x-dev" 401 | } 402 | }, 403 | "autoload": { 404 | "classmap": [ 405 | "PHPCSUtils/" 406 | ] 407 | }, 408 | "notification-url": "https://packagist.org/downloads/", 409 | "license": [ 410 | "LGPL-3.0-or-later" 411 | ], 412 | "authors": [ 413 | { 414 | "name": "Juliette Reinders Folmer", 415 | "homepage": "https://github.com/jrfnl", 416 | "role": "lead" 417 | }, 418 | { 419 | "name": "Contributors", 420 | "homepage": "https://github.com/PHPCSStandards/PHPCSUtils/graphs/contributors" 421 | } 422 | ], 423 | "description": "A suite of utility functions for use with PHP_CodeSniffer", 424 | "homepage": "https://phpcsutils.com/", 425 | "keywords": [ 426 | "PHP_CodeSniffer", 427 | "phpcbf", 428 | "phpcodesniffer-standard", 429 | "phpcs", 430 | "phpcs3", 431 | "standards", 432 | "static analysis", 433 | "tokens", 434 | "utility" 435 | ], 436 | "support": { 437 | "docs": "https://phpcsutils.com/", 438 | "issues": "https://github.com/PHPCSStandards/PHPCSUtils/issues", 439 | "security": "https://github.com/PHPCSStandards/PHPCSUtils/security/policy", 440 | "source": "https://github.com/PHPCSStandards/PHPCSUtils" 441 | }, 442 | "funding": [ 443 | { 444 | "url": "https://github.com/PHPCSStandards", 445 | "type": "github" 446 | }, 447 | { 448 | "url": "https://github.com/jrfnl", 449 | "type": "github" 450 | }, 451 | { 452 | "url": "https://opencollective.com/php_codesniffer", 453 | "type": "open_collective" 454 | } 455 | ], 456 | "time": "2024-05-20T13:34:27+00:00" 457 | }, 458 | { 459 | "name": "sirbrillig/phpcs-variable-analysis", 460 | "version": "v2.11.19", 461 | "source": { 462 | "type": "git", 463 | "url": "https://github.com/sirbrillig/phpcs-variable-analysis.git", 464 | "reference": "bc8d7e30e2005bce5c59018b7cdb08e9fb45c0d1" 465 | }, 466 | "dist": { 467 | "type": "zip", 468 | "url": "https://api.github.com/repos/sirbrillig/phpcs-variable-analysis/zipball/bc8d7e30e2005bce5c59018b7cdb08e9fb45c0d1", 469 | "reference": "bc8d7e30e2005bce5c59018b7cdb08e9fb45c0d1", 470 | "shasum": "" 471 | }, 472 | "require": { 473 | "php": ">=5.4.0", 474 | "squizlabs/php_codesniffer": "^3.5.6" 475 | }, 476 | "require-dev": { 477 | "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || ^1.0", 478 | "phpcsstandards/phpcsdevcs": "^1.1", 479 | "phpstan/phpstan": "^1.7", 480 | "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.5 || ^7.0 || ^8.0 || ^9.0", 481 | "sirbrillig/phpcs-import-detection": "^1.1", 482 | "vimeo/psalm": "^0.2 || ^0.3 || ^1.1 || ^4.24 || ^5.0@beta" 483 | }, 484 | "type": "phpcodesniffer-standard", 485 | "autoload": { 486 | "psr-4": { 487 | "VariableAnalysis\\": "VariableAnalysis/" 488 | } 489 | }, 490 | "notification-url": "https://packagist.org/downloads/", 491 | "license": [ 492 | "BSD-2-Clause" 493 | ], 494 | "authors": [ 495 | { 496 | "name": "Sam Graham", 497 | "email": "php-codesniffer-variableanalysis@illusori.co.uk" 498 | }, 499 | { 500 | "name": "Payton Swick", 501 | "email": "payton@foolord.com" 502 | } 503 | ], 504 | "description": "A PHPCS sniff to detect problems with variables.", 505 | "keywords": [ 506 | "phpcs", 507 | "static analysis" 508 | ], 509 | "support": { 510 | "issues": "https://github.com/sirbrillig/phpcs-variable-analysis/issues", 511 | "source": "https://github.com/sirbrillig/phpcs-variable-analysis", 512 | "wiki": "https://github.com/sirbrillig/phpcs-variable-analysis/wiki" 513 | }, 514 | "time": "2024-06-26T20:08:34+00:00" 515 | }, 516 | { 517 | "name": "squizlabs/php_codesniffer", 518 | "version": "3.10.3", 519 | "source": { 520 | "type": "git", 521 | "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", 522 | "reference": "62d32998e820bddc40f99f8251958aed187a5c9c" 523 | }, 524 | "dist": { 525 | "type": "zip", 526 | "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/62d32998e820bddc40f99f8251958aed187a5c9c", 527 | "reference": "62d32998e820bddc40f99f8251958aed187a5c9c", 528 | "shasum": "" 529 | }, 530 | "require": { 531 | "ext-simplexml": "*", 532 | "ext-tokenizer": "*", 533 | "ext-xmlwriter": "*", 534 | "php": ">=5.4.0" 535 | }, 536 | "require-dev": { 537 | "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" 538 | }, 539 | "bin": [ 540 | "bin/phpcbf", 541 | "bin/phpcs" 542 | ], 543 | "type": "library", 544 | "extra": { 545 | "branch-alias": { 546 | "dev-master": "3.x-dev" 547 | } 548 | }, 549 | "notification-url": "https://packagist.org/downloads/", 550 | "license": [ 551 | "BSD-3-Clause" 552 | ], 553 | "authors": [ 554 | { 555 | "name": "Greg Sherwood", 556 | "role": "Former lead" 557 | }, 558 | { 559 | "name": "Juliette Reinders Folmer", 560 | "role": "Current lead" 561 | }, 562 | { 563 | "name": "Contributors", 564 | "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" 565 | } 566 | ], 567 | "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", 568 | "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", 569 | "keywords": [ 570 | "phpcs", 571 | "standards", 572 | "static analysis" 573 | ], 574 | "support": { 575 | "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", 576 | "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", 577 | "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", 578 | "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" 579 | }, 580 | "funding": [ 581 | { 582 | "url": "https://github.com/PHPCSStandards", 583 | "type": "github" 584 | }, 585 | { 586 | "url": "https://github.com/jrfnl", 587 | "type": "github" 588 | }, 589 | { 590 | "url": "https://opencollective.com/php_codesniffer", 591 | "type": "open_collective" 592 | } 593 | ], 594 | "time": "2024-09-18T10:38:58+00:00" 595 | }, 596 | { 597 | "name": "wp-coding-standards/wpcs", 598 | "version": "3.1.0", 599 | "source": { 600 | "type": "git", 601 | "url": "https://github.com/WordPress/WordPress-Coding-Standards.git", 602 | "reference": "9333efcbff231f10dfd9c56bb7b65818b4733ca7" 603 | }, 604 | "dist": { 605 | "type": "zip", 606 | "url": "https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/9333efcbff231f10dfd9c56bb7b65818b4733ca7", 607 | "reference": "9333efcbff231f10dfd9c56bb7b65818b4733ca7", 608 | "shasum": "" 609 | }, 610 | "require": { 611 | "ext-filter": "*", 612 | "ext-libxml": "*", 613 | "ext-tokenizer": "*", 614 | "ext-xmlreader": "*", 615 | "php": ">=5.4", 616 | "phpcsstandards/phpcsextra": "^1.2.1", 617 | "phpcsstandards/phpcsutils": "^1.0.10", 618 | "squizlabs/php_codesniffer": "^3.9.0" 619 | }, 620 | "require-dev": { 621 | "php-parallel-lint/php-console-highlighter": "^1.0.0", 622 | "php-parallel-lint/php-parallel-lint": "^1.3.2", 623 | "phpcompatibility/php-compatibility": "^9.0", 624 | "phpcsstandards/phpcsdevtools": "^1.2.0", 625 | "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" 626 | }, 627 | "suggest": { 628 | "ext-iconv": "For improved results", 629 | "ext-mbstring": "For improved results" 630 | }, 631 | "type": "phpcodesniffer-standard", 632 | "notification-url": "https://packagist.org/downloads/", 633 | "license": [ 634 | "MIT" 635 | ], 636 | "authors": [ 637 | { 638 | "name": "Contributors", 639 | "homepage": "https://github.com/WordPress/WordPress-Coding-Standards/graphs/contributors" 640 | } 641 | ], 642 | "description": "PHP_CodeSniffer rules (sniffs) to enforce WordPress coding conventions", 643 | "keywords": [ 644 | "phpcs", 645 | "standards", 646 | "static analysis", 647 | "wordpress" 648 | ], 649 | "support": { 650 | "issues": "https://github.com/WordPress/WordPress-Coding-Standards/issues", 651 | "source": "https://github.com/WordPress/WordPress-Coding-Standards", 652 | "wiki": "https://github.com/WordPress/WordPress-Coding-Standards/wiki" 653 | }, 654 | "funding": [ 655 | { 656 | "url": "https://opencollective.com/php_codesniffer", 657 | "type": "custom" 658 | } 659 | ], 660 | "time": "2024-03-25T16:39:00+00:00" 661 | } 662 | ], 663 | "aliases": [], 664 | "minimum-stability": "stable", 665 | "stability-flags": {}, 666 | "prefer-stable": false, 667 | "prefer-lowest": false, 668 | "platform": { 669 | "php": ">=8.0" 670 | }, 671 | "platform-dev": {}, 672 | "plugin-api-version": "2.6.0" 673 | } 674 | -------------------------------------------------------------------------------- /footer.php: -------------------------------------------------------------------------------- 1 | 9 | 10 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /functions.php: -------------------------------------------------------------------------------- 1 | 'Intro', 84 | 'id' => 'intro', 85 | 'description' => 'The intro area at the top of the home page.', 86 | 'before_widget' => '
', 87 | 'after_widget' => '
', 88 | 'before_title' => '

', 89 | 'after_title' => '

', 90 | ) 91 | ); 92 | } 93 | 94 | /** 95 | * Action save_post 96 | * 97 | * Update the index pages when content is saved. 98 | * 99 | * @since 12.1.0 100 | * 101 | * @param int $post_ID Post ID. 102 | * @param WP_POST $post Post object. 103 | */ 104 | function action_save_post( $post_ID, $post ) { 105 | $post_types = array( 106 | 'post' => 1226, 107 | 'talk' => 463, 108 | 'event' => 463, 109 | ); 110 | 111 | if ( 112 | array_key_exists( $post->post_type, $post_types ) && 113 | ! wp_is_post_revision( $post ) && 114 | 'publish' === $post->post_status 115 | ) { 116 | remove_action( 'save_post', __NAMESPACE__ . '\action_save_post' ); 117 | 118 | $index_page = array( 119 | 'ID' => $post_types[ $post->post_type ], 120 | 'post_date' => current_time( 'mysql' ), 121 | 'post_date_gmt' => current_time( 'mysql', 1 ), 122 | ); 123 | 124 | wp_update_post( $index_page ); 125 | } 126 | } 127 | 128 | /** 129 | * Filter intermediate_image_sizes_advanced. 130 | * 131 | * Unset default image sizes. 132 | * 133 | * @since 12.0.3 134 | * 135 | * @param array $new_sizes Associative array of image sizes to be created. 136 | * 137 | * @return array 138 | */ 139 | function filter_intermediate_image_sizes_advanced( $new_sizes ) { 140 | unset( $new_sizes['thumbnail'] ); 141 | unset( $new_sizes['medium_large'] ); 142 | 143 | return $new_sizes; 144 | } 145 | 146 | /** 147 | * Action admin_init 148 | * 149 | * @since 11.1.0 150 | */ 151 | function action_admin_init() { 152 | // Redirect any user trying to access comments page. 153 | global $pagenow; 154 | 155 | if ( 'edit-comments.php' === $pagenow ) { 156 | wp_safe_redirect( admin_url() ); 157 | 158 | exit; 159 | } 160 | 161 | // Remove comments metabox from dashboard. 162 | remove_meta_box( 'dashboard_recent_comments', 'dashboard', 'normal' ); 163 | } 164 | 165 | /** 166 | * Action pre_get_posts 167 | * 168 | * @param WP_Query $query The query we're trying to edit. 169 | * 170 | * @since 11.0.0 171 | */ 172 | function action_pre_get_posts( $query ) { 173 | global $wp_the_query; 174 | 175 | if ( ! is_home() && ! is_admin() && $query === $wp_the_query ) { 176 | $query->set( 'posts_per_page', - 1 ); 177 | } 178 | } 179 | 180 | /** 181 | * Action send_headers 182 | * 183 | * Set the security headers. 184 | * 185 | * @since 9.6.2 186 | */ 187 | function action_send_headers() { 188 | header( 'Strict-Transport-Security: max-age=15768000' ); 189 | header( 'x-content-type-options: nosniff' ); 190 | header( 'x-permitted-cross-domain-policies: none' ); 191 | header( 'x-xss-protection: 1; mode=block' ); 192 | header( 'x-frame-options: SAMEORIGIN' ); 193 | } 194 | 195 | /** 196 | * Removes comments from the admin bar 197 | * 198 | * @since 9.3.3 199 | */ 200 | function action_wp_before_admin_bar_render() { 201 | global $wp_admin_bar; 202 | 203 | $wp_admin_bar->remove_menu( 'comments' ); 204 | } 205 | 206 | /** 207 | * Removes comments from the admin menu 208 | * 209 | * @since 9.3.3 210 | */ 211 | function action_admin_menu() { 212 | remove_menu_page( 'edit-comments.php' ); 213 | } 214 | 215 | /** 216 | * Remove support for comments 217 | * 218 | * @since 9.3.3 219 | */ 220 | function action_init() { 221 | remove_post_type_support( 'post', 'comments' ); 222 | remove_post_type_support( 'page', 'comments' ); 223 | } 224 | 225 | /** 226 | * Filter wp_resource hints 227 | * 228 | * Remove extra DNS pre-fetch links. 229 | * 230 | * @param array $urls URLs to print for resource hints. 231 | * @param string $relation_type The relation type the URLs are printed for, e.g. 'preconnect' or 'prerender'. 232 | * 233 | * @return array 234 | */ 235 | function filter_wp_resource_hints( $urls, $relation_type ) { 236 | if ( 'dns-prefetch' !== $relation_type ) { 237 | return $urls; 238 | } 239 | 240 | unset( $urls[1] ); 241 | 242 | return $urls; 243 | } 244 | 245 | /** 246 | * Action after_theme_setup 247 | * 248 | * Sets up theme defaults and registers support for various WordPress features. 249 | * 250 | * @since 9.0.0 251 | */ 252 | function action_after_setup_theme() { 253 | // Add default posts and comments RSS feed links to head. 254 | add_theme_support( 'automatic-feed-links' ); 255 | 256 | // Enable support for Post Thumbnails on posts and pages. 257 | add_theme_support( 'post-thumbnails' ); 258 | 259 | // Enable Appropriate styles in the editor. 260 | add_theme_support( 'editor-styles' ); 261 | add_editor_style( 'assets/editor.css' ); 262 | 263 | // Add theme support for the title tag. 264 | add_theme_support( 'title-tag' ); 265 | 266 | // Add theme support for the title tag. 267 | add_theme_support( 'html5', array( 'search-form' ) ); 268 | 269 | // This theme uses wp_nav_menu() in one location. 270 | register_nav_menus( 271 | array( 272 | 'primary' => 'Primary Menu', 273 | 'footer' => 'Footer Menu', 274 | ) 275 | ); 276 | 277 | // Cleanup unneeded Block editor features. 278 | add_theme_support( 'disable-custom-font-sizes' ); 279 | add_theme_support( 'disable-custom-colors' ); 280 | add_theme_support( 'disable-custom-gradients' ); 281 | remove_theme_support( 'core-block-patterns' ); 282 | 283 | remove_image_size( '1536x1536' ); 284 | remove_image_size( '2048x2048' ); 285 | } 286 | 287 | 288 | /** 289 | * Action wp_enqueue_scripts 290 | * 291 | * Enqueue scripts and styles. 292 | * 293 | * @since 9.0.0 294 | */ 295 | function action_wp_enqueue_scripts() { 296 | $min = '.min'; 297 | $version = CW_THEME_VERSION; 298 | 299 | if ( defined( 'SCRIPT_DEBUG' ) && true === SCRIPT_DEBUG ) { 300 | $min = ''; 301 | $version = time(); 302 | } 303 | 304 | wp_deregister_script( 'wp-embed' ); 305 | wp_dequeue_style( 'wp-block-library' ); 306 | wp_dequeue_style( 'global-styles' ); 307 | wp_dequeue_style( 'classic-theme-styles' ); 308 | wp_enqueue_style( 'cw-theme-style', get_template_directory_uri() . '/assets/main' . $min . '.css', array(), $version ); 309 | } 310 | 311 | init(); 312 | -------------------------------------------------------------------------------- /header.php: -------------------------------------------------------------------------------- 1 | 9 | 10 | > 11 | 12 | 13 | 14 | 15 | 16 | 17 | > 18 | 19 |
20 |
21 | Chris Wiegman Chris Wiegman 22 | 'primary', 26 | 'container' => '', 27 | ) 28 | ); 29 | ?> 30 |
31 |
32 | -------------------------------------------------------------------------------- /home.php: -------------------------------------------------------------------------------- 1 | 10 | 11 |
12 |
13 | 14 |
15 |

Recent Posts View All

16 | 23 | 24 | ', '' ); ?> 25 | 26 | 27 | 31 |
32 |
33 |
34 | 35 | display( 'event_type' ) ); 140 | break; 141 | case 'event_date': 142 | $event_date = $event->field( 'event_date' ); 143 | if ( '0000-00-00' !== $event_date ) { 144 | echo esc_html( gmdate( 'M j, Y', strtotime( $event_date ) ) ); 145 | } 146 | break; 147 | case 'location': 148 | echo esc_html( $event->display( 'location' ) ); 149 | break; 150 | case 'organizer': 151 | $organizer = $event->field( 'organizer' ); 152 | if ( '1' === $organizer ) { 153 | echo 'yes'; 154 | } 155 | break; 156 | case 'talk_count': 157 | $talks = $event->field( 'talks' ); 158 | if ( false !== $talks ) { 159 | echo count( $talks ); 160 | } 161 | break; 162 | } 163 | } 164 | 165 | init(); 166 | -------------------------------------------------------------------------------- /includes/post_columns/location.php: -------------------------------------------------------------------------------- 1 | display( 'latitude' ) ); 133 | break; 134 | case 'longitude': 135 | echo esc_html( $location->display( 'longitude' ) ); 136 | break; 137 | case 'event_count': 138 | $events = $location->field( 'events' ); 139 | if ( false !== $events ) { 140 | echo count( $events ); 141 | } 142 | break; 143 | case 'talk_count': 144 | $talks = $location->field( 'talks' ); 145 | if ( false !== $talks ) { 146 | echo count( $talks ); 147 | } 148 | break; 149 | } 150 | } 151 | 152 | init(); 153 | -------------------------------------------------------------------------------- /includes/post_columns/talk.php: -------------------------------------------------------------------------------- 1 | display( 'talk_type' ) ); 146 | break; 147 | case 'talk_date': 148 | $talk_date = $talk->field( 'talk_date' ); 149 | if ( '0000-00-00' !== $talk_date ) { 150 | echo esc_html( gmdate( 'M j, Y', strtotime( $talk_date ) ) ); 151 | } 152 | break; 153 | case 'event': 154 | echo esc_html( $talk->display( 'event' ) ); 155 | break; 156 | case 'location': 157 | echo esc_html( $talk->display( 'talk_location' ) ); 158 | break; 159 | case 'keynote': 160 | $organizer = $talk->field( 'keynote' ); 161 | if ( '1' === $organizer ) { 162 | echo 'yes'; 163 | } 164 | break; 165 | case 'talk_link': 166 | if ( '' !== $talk->display( 'talk_link' ) ) { 167 | printf( 'Link', esc_url( $talk->display( 'talk_link' ) ), esc_url( $talk->display( 'talk_link' ) ) ); 168 | } 169 | break; 170 | case 'slides_link': 171 | if ( '' !== $talk->display( 'slides_link' ) ) { 172 | printf( 'Slides', esc_url( $talk->display( 'slides_link' ) ), esc_url( $talk->display( 'slides_link' ) ) ); 173 | } 174 | break; 175 | case 'video_link': 176 | if ( '' !== $talk->display( 'video_link' ) ) { 177 | printf( 'Video', esc_url( $talk->display( 'video_link' ) ), esc_url( $talk->display( 'video_link' ) ) ); 178 | } 179 | break; 180 | } 181 | } 182 | 183 | init(); 184 | -------------------------------------------------------------------------------- /index.php: -------------------------------------------------------------------------------- 1 | 11 |
12 |
13 |
14 |
15 | Search results for: %s', esc_attr( get_search_query() ) ); 18 | } elseif ( is_archive() ) { 19 | $cw_theme_archive_prefix = 'Posts tagged: '; 20 | if ( is_category() ) { 21 | $cw_theme_archive_prefix = 'Posts in: '; 22 | } 23 | 24 | printf( '

%s%s

', esc_attr( $cw_theme_archive_prefix ), esc_attr( single_cat_title( '', false ) ) ); 25 | } else { 26 | the_title( '

', '

' ); 27 | } 28 | ?> 29 |

%d posts found.', intval( $wp_query->found_posts ) ); ?>

30 |
31 | 38 |
39 |
40 | Filter Posts: All Posts 41 | 'name', 45 | 'order' => 'ASC', 46 | ) 47 | ); 48 | 49 | foreach ( $cw_theme_categories as $cw_theme_category ) { 50 | printf( '%s Posts', esc_url( get_category_link( $cw_theme_category->term_id ) ), esc_html( $cw_theme_category->name ) ); 51 | } 52 | ?> 53 |
54 |
55 |
56 | 60 |
61 |
62 | 67 | 68 | ', '' ); ?> 69 | 70 | 71 | 72 |
73 |
74 | 75 |
76 |
77 |
78 |
79 | ", 9 | "license": "GPLv3", 10 | "homepage": "https://chriswiegman.com/", 11 | "devDependencies": { 12 | "@playwright/test": "^1.48.0", 13 | "@types/node": "^22.7.5", 14 | "@wordpress/e2e-test-utils-playwright": "^1.9.0", 15 | "@wordpress/env": "^10.9.0", 16 | "@wordpress/scripts": "^30.1.0", 17 | "clean-css-cli": "^5.6.3", 18 | "sass": "^1.79.5" 19 | }, 20 | "engines": { 21 | "npm": ">=10.0.0 <11.0.0", 22 | "node": ">=20.0.0 <21.0.0" 23 | }, 24 | "scripts": { 25 | "clean": "rm -f ./assets/*.map && rm -f ./assets/*.css", 26 | "compile": "sass assets/scss/main.scss:assets/main.css assets/scss/editor.scss:assets/editor.css", 27 | "minify": "cleancss -O2 --batch --batch-suffix '.min' assets/*.css", 28 | "build": "npm run clean && npm run compile && npm run minify", 29 | "watch": "sass --watch assets/scss/main.scss:assets/main.css assets/scss/editor.scss:assets/editor.css", 30 | "test": "wp-scripts test-playwright --config tests/e2e/playwright.config.js" 31 | } 32 | } -------------------------------------------------------------------------------- /page-blog.php: -------------------------------------------------------------------------------- 1 | -1, 12 | ); 13 | $cw_theme_blog_query = new WP_Query( $cw_theme_args ); 14 | ?> 15 |
16 |
17 |
18 |
19 |

All Posts

20 |

%d posts found.', intval( $cw_theme_blog_query->found_posts ) ); ?>

21 |
22 | 29 |
30 |
31 | Filter Posts: All Posts 32 | 'name', 36 | 'order' => 'ASC', 37 | ) 38 | ); 39 | 40 | foreach ( $cw_theme_categories as $cw_theme_category ) { 41 | printf( '%s Posts', esc_url( get_category_link( $cw_theme_category->term_id ) ), esc_html( $cw_theme_category->name ) ); 42 | } 43 | ?> 44 |
45 |
46 |
47 | have_posts() ) { 49 | 50 | echo ''; 51 | 52 | $cw_theme_current_year = false; 53 | 54 | /* Start the Loop */ 55 | while ( $cw_theme_blog_query->have_posts() ) { 56 | $cw_theme_blog_query->the_post(); 57 | 58 | $cw_theme_post_year = get_the_date( 'Y' ); 59 | 60 | if ( $cw_theme_post_year !== $cw_theme_current_year ) { 61 | 62 | if ( false !== $cw_theme_current_year ) { 63 | echo '
'; 64 | echo '
'; 65 | } 66 | 67 | echo '
'; 68 | printf( '

%s

', intval( $cw_theme_post_year ) ); 69 | echo '
'; 70 | 71 | } 72 | 73 | $cw_theme_current_year = $cw_theme_post_year; 74 | ?> 75 | 76 | ', '' ); ?> 77 | 78 | 79 | 83 |
84 |
85 |
86 | 87 |
88 | 10 |
11 |
12 |
13 |
14 | ', '' ); ?> 15 |
16 |
17 | 18 | 25 | 26 |

Conferences

27 | 'event_date DESC', 30 | 'where' => 'event_type = "Conference"', 31 | 'limit' => -1, 32 | ); 33 | $cw_theme_events = pods( 'event' )->find( $cw_theme_event_params ); 34 | 35 | if ( 0 < $cw_theme_events->total() ) { 36 | 37 | echo ''; 38 | 39 | $cw_theme_current_year = false; 40 | 41 | /* Start the Loop */ 42 | while ( $cw_theme_events->fetch() ) { 43 | 44 | if ( ! empty( $cw_theme_events->field( 'talks' ) ) ) { 45 | 46 | $cw_theme_post_year = gmdate( 'Y', strtotime( $cw_theme_events->field( 'event_date' ) ) ); 47 | 48 | if ( $cw_theme_post_year !== $cw_theme_current_year ) { 49 | 50 | if ( false !== $cw_theme_current_year ) { 51 | echo ''; 52 | } 53 | 54 | printf( '

%s

', intval( $cw_theme_post_year ) ); 55 | echo '
    '; 56 | 57 | } 58 | 59 | $cw_theme_current_year = $cw_theme_post_year; 60 | $cw_theme_keynote = ''; 61 | $cw_theme_talks = $cw_theme_events->field( 'talks' ); 62 | foreach ( $cw_theme_talks as $cw_theme_talk ) { 63 | if ( isset( $cw_theme_talk['keynote'] ) && '1' === $cw_theme_talk['keynote'] ) { 64 | $cw_theme_keynote = ' (keynote presentation)'; 65 | } 66 | } 67 | ?> 68 | display( 'event_link' ) ) ) > 0 ) { ?> 69 |
  • display( 'post_title' ) ); ?>
  • 70 | 71 |
  • display( 'post_title' ) ); ?>
  • 72 | 78 |
79 | 80 |

Meetups

81 |

Of course, conferences aren’t all there is. I’ve also been fortunate to work with local WordPress and other groups in my hometown and beyond. Here are some of the Meetup groups I’ve been honored to speak to over the years.

82 |
    83 | 'event_date DESC', 86 | 'where' => 'event_type = "Meetup"', 87 | ); 88 | $cw_theme_meetups = pods( 'event' )->find( $cw_theme_meetup_params ); 89 | 90 | if ( 0 < $cw_theme_meetups->total() ) { 91 | 92 | /* Start the Loop */ 93 | while ( $cw_theme_meetups->fetch() ) { 94 | ?> 95 |
  • display( 'post_title' ) ); ?>
  • 96 | 100 |
101 | 102 |

Full Talks Available Online

103 |

Some of my talks are available online. Here’s a list of talks I’ve given with links to the full talk.

104 |
    105 | 'post_title ASC', 108 | 'where' => 'video_link <> ""', 109 | ); 110 | $cw_theme_full_talks = pods( 'talk' )->find( $cw_theme_full_talk_params ); 111 | 112 | if ( 0 < $cw_theme_full_talks->total() ) { 113 | 114 | /* Start the Loop */ 115 | while ( $cw_theme_full_talks->fetch() ) { 116 | $cw_theme_event = $cw_theme_full_talks->field( 'event' ); 117 | ?> 118 |
  • display( 'post_title' ) ); ?> -
  • 119 | 123 |
124 | 125 |

Slides

126 |

You can find slides from many of my talks at slides.chriswiegman.com.

127 |
128 |
129 |
130 | 131 |
132 | 2 | 3 | Coding standards for the current project. 4 | 5 | . 6 | 7 | 8 | */node_modules/* 9 | */vendor/* 10 | *.xml 11 | */tests/* 12 | *.js 13 | */wordpress/* 14 | */assets/* 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | *\.php 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /pods.json: -------------------------------------------------------------------------------- 1 | { 2 | "meta": { 3 | "version": "2.8.10", 4 | "build": 1648927576 5 | }, 6 | "pods": [ 7 | { 8 | "name": "event", 9 | "id": 1346, 10 | "label": "Events", 11 | "description": "", 12 | "type": "post_type", 13 | "storage": "table", 14 | "label_singular": "Event", 15 | "public": "0", 16 | "show_ui": "1", 17 | "rest_enable": "1", 18 | "supports_title": "1", 19 | "supports_editor": "0", 20 | "_migrated_28": "1", 21 | "publicly_queryable": "0", 22 | "exclude_from_search": "0", 23 | "capability_type": "post", 24 | "capability_type_custom": "event", 25 | "capability_type_extra": "1", 26 | "has_archive": "0", 27 | "hierarchical": "0", 28 | "rewrite": "0", 29 | "rewrite_with_front": "1", 30 | "rewrite_feeds": "0", 31 | "rewrite_pages": "1", 32 | "query_var": "0", 33 | "can_export": "1", 34 | "default_status": "draft", 35 | "revisions_to_keep_limit": "0", 36 | "delete_with_user": "1", 37 | "built_in_taxonomies_event_type": "1", 38 | "built_in_taxonomies_location": "1", 39 | "required": "0", 40 | "unique": "0", 41 | "meta_box_context": "normal", 42 | "meta_box_priority": "default", 43 | "show_in_menu": "1", 44 | "menu_position": "0", 45 | "show_in_nav_menus": "1", 46 | "show_in_admin_bar": "1", 47 | "menu_icon": "dashicons-calendar", 48 | "groups": [ 49 | { 50 | "name": "event_details", 51 | "id": 1347, 52 | "label": "Event Details", 53 | "description": "", 54 | "weight": 0, 55 | "meta_box_context": "normal", 56 | "meta_box_priority": "default", 57 | "roles_allowed": "administrator", 58 | "fields": [ 59 | { 60 | "name": "event_type", 61 | "id": 1349, 62 | "label": "Event Type", 63 | "description": "Select the event type", 64 | "weight": 0, 65 | "type": "pick", 66 | "pick_object": "custom-simple", 67 | "sister_id": "-- Select One --", 68 | "post_status": "publish", 69 | "pick_table": "-- Select One --", 70 | "required": "1", 71 | "unique": "0", 72 | "pick_format_type": "single", 73 | "pick_format_single": "dropdown", 74 | "pick_format_multi": "checkbox", 75 | "pick_display_format_multi": "default", 76 | "pick_display_format_separator": ", ", 77 | "pick_allow_add_new": "1", 78 | "pick_taggable": "0", 79 | "pick_show_icon": "1", 80 | "pick_show_edit_link": "1", 81 | "pick_show_view_link": "1", 82 | "pick_limit": "0", 83 | "pick_user_role": "Administrator", 84 | "roles_allowed": "administrator", 85 | "rest_pick_response": "array", 86 | "rest_pick_depth": "1", 87 | "pick_custom": "Conference\nMeetup\nPodcast" 88 | }, 89 | { 90 | "name": "location", 91 | "id": 1350, 92 | "label": "Location", 93 | "description": "The location of the event", 94 | "weight": 1, 95 | "type": "pick", 96 | "pick_object": "post_type", 97 | "pick_val": "location", 98 | "sister_id": "1360", 99 | "post_status": "publish", 100 | "pick_table": "-- Select One --", 101 | "required": "0", 102 | "unique": "0", 103 | "pick_format_type": "single", 104 | "pick_format_single": "dropdown", 105 | "pick_format_multi": "checkbox", 106 | "pick_display_format_multi": "default", 107 | "pick_display_format_separator": ", ", 108 | "pick_allow_add_new": "1", 109 | "pick_taggable": "0", 110 | "pick_show_icon": "1", 111 | "pick_show_edit_link": "1", 112 | "pick_show_view_link": "1", 113 | "pick_limit": "0", 114 | "pick_user_role": "Administrator", 115 | "roles_allowed": "administrator", 116 | "rest_pick_response": "array", 117 | "rest_pick_depth": "1" 118 | }, 119 | { 120 | "name": "event_date", 121 | "id": 1351, 122 | "label": "Event Date", 123 | "description": "The date the event occurred or started on.", 124 | "weight": 2, 125 | "type": "date", 126 | "sister_id": "1360", 127 | "required": "0", 128 | "unique": "0", 129 | "date_type": "format", 130 | "date_format": "mdy", 131 | "date_allow_empty": "1", 132 | "date_html5": "1", 133 | "roles_allowed": "administrator", 134 | "rest_pick_response": "array", 135 | "rest_pick_depth": "1" 136 | }, 137 | { 138 | "name": "event_link", 139 | "id": 1352, 140 | "label": "Event Link", 141 | "description": "A Link to the event's homepage", 142 | "weight": 3, 143 | "type": "website", 144 | "sister_id": "1277", 145 | "required": "0", 146 | "unique": "0", 147 | "website_format": "normal", 148 | "website_allow_port": "0", 149 | "website_clickable": "0", 150 | "website_new_window": "0", 151 | "website_max_length": "255", 152 | "website_html5": "0", 153 | "roles_allowed": "administrator", 154 | "rest_pick_response": "array", 155 | "rest_pick_depth": "1" 156 | } 157 | ] 158 | }, 159 | { 160 | "name": "organizer_info", 161 | "id": 1459, 162 | "label": "Organizer Info", 163 | "description": "", 164 | "weight": 1, 165 | "meta_box_context": "normal", 166 | "meta_box_priority": "default", 167 | "roles_allowed": "administrator", 168 | "fields": [ 169 | { 170 | "name": "organizer", 171 | "id": 1460, 172 | "label": "Organizer", 173 | "description": "Were you an organizer of this event?", 174 | "weight": 0, 175 | "type": "boolean", 176 | "sister_id": "-- Select One --", 177 | "required": "0", 178 | "unique": "0", 179 | "boolean_format_type": "checkbox", 180 | "boolean_yes_label": "Yes", 181 | "boolean_no_label": "No", 182 | "roles_allowed": "administrator", 183 | "rest_pick_response": "array", 184 | "rest_pick_depth": "1" 185 | }, 186 | { 187 | "name": "organizer_role", 188 | "id": 1461, 189 | "label": "Organizer Role", 190 | "description": "What was your role as organizer?", 191 | "weight": 1, 192 | "type": "text", 193 | "sister_id": "-- Select One --", 194 | "required": "0", 195 | "unique": "0", 196 | "text_allowed_html_tags": "strong em a ul ol li b i", 197 | "text_max_length": "255", 198 | "roles_allowed": "administrator", 199 | "rest_pick_response": "array", 200 | "rest_pick_depth": "1" 201 | } 202 | ] 203 | }, 204 | { 205 | "name": "talks", 206 | "id": 1348, 207 | "label": "Talks", 208 | "description": "", 209 | "weight": 2, 210 | "meta_box_context": "normal", 211 | "meta_box_priority": "default", 212 | "roles_allowed": "administrator", 213 | "fields": [ 214 | { 215 | "name": "talks", 216 | "id": 1353, 217 | "label": "Talks", 218 | "description": "Talks given at this event", 219 | "weight": 0, 220 | "type": "pick", 221 | "pick_object": "post_type", 222 | "pick_val": "talk", 223 | "post_status": "publish", 224 | "pick_table": "-- Select One --", 225 | "required": "0", 226 | "unique": "0", 227 | "pick_format_type": "multi", 228 | "pick_format_single": "dropdown", 229 | "pick_format_multi": "list", 230 | "pick_display_format_multi": "default", 231 | "pick_display_format_separator": ", ", 232 | "pick_allow_add_new": "1", 233 | "pick_taggable": "0", 234 | "pick_show_icon": "0", 235 | "pick_show_edit_link": "1", 236 | "pick_show_view_link": "0", 237 | "pick_limit": "0", 238 | "pick_user_role": "Administrator", 239 | "roles_allowed": "administrator", 240 | "rest_pick_response": "array", 241 | "rest_pick_depth": "1", 242 | "sister_id": "1365" 243 | } 244 | ] 245 | } 246 | ] 247 | }, 248 | { 249 | "name": "location", 250 | "id": 1354, 251 | "label": "Locations", 252 | "description": "", 253 | "type": "post_type", 254 | "storage": "table", 255 | "label_singular": "Location", 256 | "public": "0", 257 | "show_ui": "1", 258 | "rest_enable": "1", 259 | "supports_title": "1", 260 | "supports_editor": "0", 261 | "_migrated_28": "1", 262 | "publicly_queryable": "0", 263 | "exclude_from_search": "0", 264 | "capability_type": "post", 265 | "capability_type_custom": "location", 266 | "capability_type_extra": "1", 267 | "has_archive": "0", 268 | "hierarchical": "0", 269 | "rewrite": "0", 270 | "rewrite_with_front": "1", 271 | "rewrite_feeds": "0", 272 | "rewrite_pages": "1", 273 | "query_var": "0", 274 | "can_export": "1", 275 | "default_status": "draft", 276 | "revisions_to_keep_limit": "0", 277 | "delete_with_user": "1", 278 | "required": "0", 279 | "unique": "0", 280 | "meta_box_context": "normal", 281 | "meta_box_priority": "default", 282 | "show_in_menu": "1", 283 | "menu_position": "0", 284 | "show_in_nav_menus": "1", 285 | "show_in_admin_bar": "1", 286 | "menu_icon": "dashicons-airplane", 287 | "sister_id": "1365", 288 | "groups": [ 289 | { 290 | "name": "geo_location", 291 | "id": 1355, 292 | "label": "Geolocation", 293 | "description": "", 294 | "weight": 0, 295 | "meta_box_context": "normal", 296 | "meta_box_priority": "default", 297 | "roles_allowed": "administrator", 298 | "fields": [ 299 | { 300 | "name": "latitude", 301 | "id": 1358, 302 | "label": "Latitude", 303 | "description": "The latitude of the location", 304 | "weight": 0, 305 | "type": "number", 306 | "sister_id": "-- Select One --", 307 | "required": "1", 308 | "unique": "0", 309 | "number_format_type": "number", 310 | "number_format": "i18n", 311 | "number_decimals": "6", 312 | "number_format_soft": "0", 313 | "number_step": "1", 314 | "number_max_length": "12", 315 | "number_html5": "1", 316 | "roles_allowed": "administrator", 317 | "rest_pick_response": "array", 318 | "rest_pick_depth": "1", 319 | "number_min": "-90", 320 | "number_max": "+90" 321 | }, 322 | { 323 | "name": "longitude", 324 | "id": 1359, 325 | "label": "Longitude", 326 | "description": "The longitude of the location", 327 | "weight": 1, 328 | "type": "number", 329 | "sister_id": "-- Select One --", 330 | "required": "1", 331 | "unique": "0", 332 | "number_format_type": "number", 333 | "number_format": "i18n", 334 | "number_decimals": "6", 335 | "number_format_soft": "0", 336 | "number_step": "1", 337 | "number_max_length": "12", 338 | "number_html5": "1", 339 | "roles_allowed": "administrator", 340 | "rest_pick_response": "array", 341 | "rest_pick_depth": "1", 342 | "number_min": "-180", 343 | "number_max": "180" 344 | } 345 | ] 346 | }, 347 | { 348 | "name": "events", 349 | "id": 1356, 350 | "label": "Events", 351 | "description": "", 352 | "weight": 1, 353 | "meta_box_context": "normal", 354 | "meta_box_priority": "default", 355 | "roles_allowed": "administrator", 356 | "fields": [ 357 | { 358 | "name": "events", 359 | "id": 1360, 360 | "label": "Events", 361 | "description": "Events at this location", 362 | "weight": 0, 363 | "type": "pick", 364 | "pick_object": "post_type", 365 | "pick_val": "event", 366 | "post_status": "publish", 367 | "pick_table": "-- Select One --", 368 | "required": "0", 369 | "unique": "0", 370 | "pick_format_type": "multi", 371 | "pick_format_single": "dropdown", 372 | "pick_format_multi": "list", 373 | "pick_display_format_multi": "default", 374 | "pick_display_format_separator": ", ", 375 | "pick_allow_add_new": "1", 376 | "pick_taggable": "0", 377 | "pick_show_icon": "0", 378 | "pick_show_edit_link": "1", 379 | "pick_show_view_link": "0", 380 | "pick_limit": "0", 381 | "pick_user_role": "Administrator", 382 | "roles_allowed": "administrator", 383 | "rest_pick_response": "array", 384 | "rest_pick_depth": "1", 385 | "sister_id": "1351" 386 | } 387 | ] 388 | }, 389 | { 390 | "name": "talks", 391 | "id": 1357, 392 | "label": "Talks", 393 | "description": "", 394 | "weight": 2, 395 | "meta_box_context": "normal", 396 | "meta_box_priority": "default", 397 | "roles_allowed": "administrator", 398 | "fields": [ 399 | { 400 | "name": "talks", 401 | "id": 1361, 402 | "label": "Talks", 403 | "description": "The talks at this location", 404 | "weight": 0, 405 | "type": "pick", 406 | "pick_object": "post_type", 407 | "pick_val": "talk", 408 | "post_status": "publish", 409 | "pick_table": "-- Select One --", 410 | "required": "0", 411 | "unique": "0", 412 | "pick_format_type": "multi", 413 | "pick_format_single": "dropdown", 414 | "pick_format_multi": "list", 415 | "pick_display_format_multi": "default", 416 | "pick_display_format_separator": ", ", 417 | "pick_allow_add_new": "1", 418 | "pick_taggable": "0", 419 | "pick_show_icon": "0", 420 | "pick_show_edit_link": "1", 421 | "pick_show_view_link": "0", 422 | "pick_limit": "0", 423 | "pick_user_role": "Administrator", 424 | "roles_allowed": "administrator", 425 | "rest_pick_response": "array", 426 | "rest_pick_depth": "1", 427 | "sister_id": "1369" 428 | } 429 | ] 430 | } 431 | ] 432 | }, 433 | { 434 | "name": "talk", 435 | "id": 1362, 436 | "label": "Talks", 437 | "description": "", 438 | "type": "post_type", 439 | "storage": "table", 440 | "label_singular": "Talk", 441 | "public": "0", 442 | "show_ui": "1", 443 | "rest_enable": "1", 444 | "supports_title": "1", 445 | "supports_editor": "0", 446 | "_migrated_28": "1", 447 | "publicly_queryable": "0", 448 | "exclude_from_search": "0", 449 | "capability_type": "post", 450 | "capability_type_custom": "talk", 451 | "capability_type_extra": "1", 452 | "has_archive": "0", 453 | "hierarchical": "0", 454 | "rewrite": "0", 455 | "rewrite_with_front": "1", 456 | "rewrite_feeds": "0", 457 | "rewrite_pages": "1", 458 | "query_var": "0", 459 | "can_export": "1", 460 | "default_status": "draft", 461 | "revisions_to_keep_limit": "0", 462 | "delete_with_user": "1", 463 | "required": "0", 464 | "unique": "0", 465 | "meta_box_context": "normal", 466 | "meta_box_priority": "default", 467 | "built_in_taxonomies_talk_type": "1", 468 | "show_in_menu": "1", 469 | "menu_position": "0", 470 | "show_in_nav_menus": "1", 471 | "show_in_admin_bar": "1", 472 | "menu_icon": "dashicons-megaphone", 473 | "sister_id": "1369", 474 | "groups": [ 475 | { 476 | "name": "talk_information", 477 | "id": 1363, 478 | "label": "Talk Information", 479 | "description": "", 480 | "weight": 0, 481 | "meta_box_context": "normal", 482 | "meta_box_priority": "high", 483 | "roles_allowed": "administrator", 484 | "fields": [ 485 | { 486 | "name": "event", 487 | "id": 1365, 488 | "label": "Event", 489 | "description": "The event the talk is part of", 490 | "weight": 0, 491 | "type": "pick", 492 | "pick_object": "post_type", 493 | "pick_val": "event", 494 | "sister_id": "1353", 495 | "post_status": "publish", 496 | "pick_table": "-- Select One --", 497 | "required": "1", 498 | "unique": "0", 499 | "pick_format_type": "single", 500 | "pick_format_single": "dropdown", 501 | "pick_format_multi": "checkbox", 502 | "pick_display_format_multi": "default", 503 | "pick_display_format_separator": ", ", 504 | "pick_allow_add_new": "1", 505 | "pick_taggable": "0", 506 | "pick_show_icon": "1", 507 | "pick_show_edit_link": "1", 508 | "pick_show_view_link": "1", 509 | "pick_limit": "0", 510 | "pick_user_role": "Administrator", 511 | "roles_allowed": "administrator", 512 | "rest_pick_response": "array", 513 | "rest_pick_depth": "1" 514 | }, 515 | { 516 | "name": "talk_type", 517 | "id": 1366, 518 | "label": "Talk Type", 519 | "description": "Select the talk type", 520 | "weight": 1, 521 | "sister_id": "-- Select One --", 522 | "type": "pick", 523 | "pick_object": "custom-simple", 524 | "post_status": "publish", 525 | "pick_table": "-- Select One --", 526 | "required": "1", 527 | "unique": "0", 528 | "pick_format_type": "single", 529 | "pick_format_single": "dropdown", 530 | "pick_format_multi": "checkbox", 531 | "pick_display_format_multi": "default", 532 | "pick_display_format_separator": ", ", 533 | "pick_allow_add_new": "1", 534 | "pick_taggable": "0", 535 | "pick_show_icon": "1", 536 | "pick_show_edit_link": "1", 537 | "pick_show_view_link": "1", 538 | "pick_limit": "0", 539 | "pick_user_role": "Administrator", 540 | "roles_allowed": "administrator", 541 | "rest_pick_response": "array", 542 | "rest_pick_depth": "1", 543 | "pick_custom": "Workshop\nFull Session\nLightning Talk\nPanel Discussion" 544 | }, 545 | { 546 | "name": "talk_date", 547 | "id": 1367, 548 | "label": "Talk Date", 549 | "description": "The date on which the talk was given", 550 | "weight": 2, 551 | "type": "date", 552 | "sister_id": "-- Select One --", 553 | "required": "1", 554 | "unique": "0", 555 | "date_type": "format", 556 | "date_format": "mdy", 557 | "date_allow_empty": "1", 558 | "date_html5": "1", 559 | "roles_allowed": "administrator", 560 | "rest_pick_response": "array", 561 | "rest_pick_depth": "1" 562 | }, 563 | { 564 | "name": "description", 565 | "id": 1368, 566 | "label": "Description", 567 | "description": "Describe the talk", 568 | "weight": 3, 569 | "type": "paragraph", 570 | "sister_id": "-- Select One --", 571 | "required": "0", 572 | "unique": "0", 573 | "paragraph_allowed_html_tags": "strong em a ul ol li b i", 574 | "paragraph_max_length": "-1", 575 | "roles_allowed": "administrator", 576 | "rest_pick_response": "array", 577 | "rest_pick_depth": "1" 578 | }, 579 | { 580 | "name": "talk_location", 581 | "id": 1369, 582 | "label": "Talk Location", 583 | "description": "The location of the talk", 584 | "weight": 4, 585 | "type": "pick", 586 | "pick_object": "post_type", 587 | "pick_val": "location", 588 | "sister_id": "1361", 589 | "post_status": "publish", 590 | "pick_table": "-- Select One --", 591 | "required": "0", 592 | "unique": "0", 593 | "pick_format_type": "single", 594 | "pick_format_single": "dropdown", 595 | "pick_format_multi": "checkbox", 596 | "pick_display_format_multi": "default", 597 | "pick_display_format_separator": ", ", 598 | "pick_allow_add_new": "1", 599 | "pick_taggable": "0", 600 | "pick_show_icon": "1", 601 | "pick_show_edit_link": "1", 602 | "pick_show_view_link": "1", 603 | "pick_limit": "0", 604 | "pick_user_role": "Administrator", 605 | "roles_allowed": "administrator", 606 | "rest_pick_response": "array", 607 | "rest_pick_depth": "1" 608 | }, 609 | { 610 | "name": "keynote", 611 | "id": 1370, 612 | "label": "Keynote", 613 | "description": "Is the talk a keynote?", 614 | "weight": 5, 615 | "sister_id": "-- Select One --", 616 | "type": "boolean", 617 | "required": "0", 618 | "unique": "0", 619 | "boolean_format_type": "checkbox", 620 | "boolean_yes_label": "Yes", 621 | "boolean_no_label": "No", 622 | "roles_allowed": "administrator", 623 | "rest_pick_response": "array", 624 | "rest_pick_depth": "1" 625 | } 626 | ] 627 | }, 628 | { 629 | "name": "talk_links", 630 | "id": 1364, 631 | "label": "Talk Links", 632 | "description": "", 633 | "weight": 1, 634 | "meta_box_context": "normal", 635 | "meta_box_priority": "default", 636 | "roles_allowed": "administrator", 637 | "fields": [ 638 | { 639 | "name": "talk_link", 640 | "id": 1371, 641 | "label": "Talk Link", 642 | "description": "A link to the marketing or other page for the talk", 643 | "weight": 0, 644 | "type": "website", 645 | "sister_id": "-- Select One --", 646 | "required": "0", 647 | "unique": "0", 648 | "website_format": "normal", 649 | "website_allow_port": "0", 650 | "website_clickable": "0", 651 | "website_new_window": "0", 652 | "website_max_length": "255", 653 | "website_html5": "0", 654 | "roles_allowed": "administrator", 655 | "rest_pick_response": "array", 656 | "rest_pick_depth": "1" 657 | }, 658 | { 659 | "name": "slides_link", 660 | "id": 1372, 661 | "label": "Slides Link", 662 | "description": "A link to the talk's slides (if available)", 663 | "weight": 1, 664 | "type": "website", 665 | "sister_id": "-- Select One --", 666 | "required": "0", 667 | "unique": "0", 668 | "website_format": "normal", 669 | "website_allow_port": "0", 670 | "website_clickable": "0", 671 | "website_new_window": "0", 672 | "website_max_length": "255", 673 | "website_html5": "0", 674 | "roles_allowed": "administrator", 675 | "rest_pick_response": "array", 676 | "rest_pick_depth": "1" 677 | }, 678 | { 679 | "name": "video_link", 680 | "id": 1373, 681 | "label": "Video Link", 682 | "description": "A link to the full video of the talk", 683 | "weight": 2, 684 | "type": "website", 685 | "sister_id": "-- Select One --", 686 | "required": "0", 687 | "unique": "0", 688 | "website_format": "normal", 689 | "website_allow_port": "0", 690 | "website_clickable": "0", 691 | "website_new_window": "0", 692 | "website_max_length": "255", 693 | "website_html5": "0", 694 | "roles_allowed": "administrator", 695 | "rest_pick_response": "array", 696 | "rest_pick_depth": "1" 697 | } 698 | ] 699 | } 700 | ] 701 | } 702 | ] 703 | } 704 | -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisWiegman/chriswiegman-theme/2f32d50f3c6ce5142eecb3073ebc5e4a51486975/screenshot.png -------------------------------------------------------------------------------- /singular.php: -------------------------------------------------------------------------------- 1 | 11 |
12 |
13 |
14 |
15 |
', get_the_date( 'l, F jS, Y' ) ); 18 | } 19 | ?> 20 | ', '' ); ?> 21 | 25 |
26 | 29 | name ); ?> 30 | 31 |
32 | 33 |
34 | 35 |
36 | 37 | 'wp-block-image aligncenter' ) ); 40 | } 41 | 42 | the_content(); 43 | ?> 44 | 45 |
46 | 47 |
48 | 49 | 50 | 54 | 55 |
56 | { 5 | await page.goto('http://localhost:8888/'); 6 | 7 | // Expect a title "to contain" a substring. 8 | await expect(page).toHaveTitle(/chriswiegman-theme/); 9 | }); 10 | 11 | test('has page title', async ({ page }) => { 12 | await page.goto('http://localhost:8888/'); 13 | 14 | // Expects page to have a heading with the name of Installation. 15 | await expect(page.getByRole('heading', { name: 'Recent Posts' })).toBeVisible(); 16 | }); 17 | --------------------------------------------------------------------------------