https://github.com/jquery/gilded-wordpress
Easily synchronize content between the file system and WordPress
https://github.com/jquery/gilded-wordpress
Last synced: 3 months ago
JSON representation
Easily synchronize content between the file system and WordPress
- Host: GitHub
- URL: https://github.com/jquery/gilded-wordpress
- Owner: jquery
- License: mit
- Fork: true (scottgonzalez/gilded-wordpress)
- Created: 2022-03-30T15:32:23.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2024-04-04T20:02:37.000Z (almost 2 years ago)
- Last Synced: 2025-01-21T11:36:30.164Z (12 months ago)
- Language: JavaScript
- Homepage:
- Size: 28.3 KB
- Stars: 0
- Watchers: 2
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# Gilded WordPress
Easily synchronize content between the file system and WordPress.
Support this project by [donating on Gratipay](https://gratipay.com/scottgonzalez/).
## TOC
* [Getting Started](#getting-started)
* [Installation](#installation)
* [Usage](#usage)
* [Node.js API](#nodejs-api)
* [Exports](#exports)
* [Client Methods - Validation](#client-methods---validation)
* [Client Methods - Synchronization](#client-methods---synchronization)
* [Client Methods - Logging](#client-methods---logging)
* [Client Methods - Utilities](#client-methods---utilies)
* [Directory Structure](#directory-structure)
* [taxonomies.json](#taxonomiesjson)
* [Post Files](#post-files)
* [PHP API](#php-api)
* [Permissive Uploads](#permissive-uploads)
* [License](#license)
## Getting Started
Resources are uploaded to `/gw-resources/{HOME_URL}/`. If you'd like a friendlier name, you can set up a redirect in your web server.
If you have problems uploading resources, check the [Permissive Uploads](#permissive-uploads) section.
## Installation
```
npm install gilded-wordpress
```
## Usage
```javascript
var wordpress = require( "gilded-wordpress" );
var client = wordpress.createClient({
url: "wordpress.dev",
username: "admin",
password: "admin",
dir: "my-content"
});
client.sync(function( error ) {
if ( error ) {
console.error( error );
return;
}
console.log( "Successfully synchronized WordPress." );
});
```
## Node.js API
### Exports
#### wordpress.createClient( options )
Creates a new client instance.
* `options`: A hash of options that apply to all requests for the new client.
* `username`: The username for the WordPress account.
* `password`: The password for the WordPress account.
* `url`: The URL for the WordPress install.
* `dir`: The path to the directory containing all taxonomies, posts, and resources (see [Directory Struture](#directory-structure)).
* `host` (optional): The actual host to connect to if different from the URL, e.g., when deploying to a local server behind a firewall.
* `blogId` (optional; default: `0`): The blog ID for the WordPress install.
* `verbose` (optional; default: `false`): Whether logging should be verbose.
#### wordpress.Client
The constructor used for client connections. Useful for creating extensions.
### Client Methods - Validation
#### client.validate( callback )
Validates all data.
* `callback` (`function( error )`): A callback to invoke when the validation is complete.
#### client.validateXmlrpcVersion( callback )
Verifies whether the WordPress plugin is installed and has the same version as the Node.js module.
* `callback` (`function( error )`): A callback to invoke when the validation is complete.
#### client.validateTerms( callback )
Validates all terms.
* `callback` (`function( error )`): A callback to invoke when the taxonomies have been validated.
### client.validatePosts( callback )
Validates all posts.
* `callback` (`function( error )`): A callback to invoke when the posts have been validated.
### Client Methods - Synchronization
#### client.sync( callback )
Synchonizes all data.
* `callback` (`function( error )`): A callback to invoke when the synchronization is complete.
#### client.syncTerms( callback )
Synchronizes all terms.
* `callback` (`function( error )`): A callback to invoke when the taxonomies have been synchronized.
#### client.syncPosts( callback )
Synchronizes all posts.
* `callback` (`function( error )`): A callback to invoke when the posts have been synchronized.
#### client.syncResources( callback )
Synchronizes all resources.
* `callback` (`function( error )`): A callback to invoke when the resources have been synchronized.
### Client Methods - Logging
The client methods log various information as they perform their tasks. These methods are designed to be overridden for custom logging or to hook into an existing logging system.
#### client.log( message )
Logs a message. Defaults to `console.log()`.
* `message`: A message to log.
#### client.logError( message )
Logs an error message. Defaults to `console.error()`.
* `message`: An error message to log.
### Client Methods - Utilities
The utility methods exist to help build custom extensions to the client. All callbacks from the utility methods are invoked within the context of the client instance.
#### client.waterfall( steps, callback )
Asynchronously executes a set of functions.
Equivalent to [`async.waterfall()`](https://github.com/caolan/async#waterfall), but with context preserved.
* `steps`: An array of functions to perform. Each function is passed a callback (`function( error, result1, result2, ... )`) which must be called when the function is complete. The first argument is an error and any further arguments will be passed as arguments in order to the next step.
* `callback` (`function( error )`): A callback to invoke when all steps have been completed or a step has resulted in an error.
#### client.forEach( items, iterator, complete )
Asynchronous version of `Array#forEach()`.
Equivalent to [`async.forEachSeries()`](https://github.com/caolan/async#forEachSeries), but with context preserved.
* `items`: An array to iterate over.
* `iterator` (`function( item, callback )`): A callback to invoke for each item of the array.
* `item`: The current item of the array.
* `callback` (`function( error )`): A callback to invoke after processing the item.
* `complete` (`function( error )`): A callback to invoke when all items have been iterated over or an item resulted in an error.
#### client.recurse( dir, iterator, complete )
Asyncrhonously walk all files in a directory, recursively. All files within a directory are walked before recursing.
* `dir`: The path to a directory to walk.
* `iterator` (`function( path, callback )`): A callback to invoke for each file within the directory.
* `path`: The path to the current file.
* `callback` (`function( error )`): A callback to invoke after processing the file.
* `complete` (`function( error )`): A callback to invoke when all files have been iterated over or a file resulted in an error.
### Directory Structure
The directory passed to the client instance has the following structure:
```
dir
├── posts
│ └──
│ └── .html
├── resources
│ └── .
└── taxonomies.json
```
The `posts` directory must only contain `` directories.
The `` directories must be named to exactly match a post type, e.g., `post` or `page`.
All custom post types are supported.
The `resources` directory is completely freeform.
Resources of any type will be uploaded based on the current directory structure.
### taxonomies.json
The `taxonomies.json` file defines all used taxonomy terms.
You can only manage terms, all taxonomies must already exist in WordPress.
```json
{
"": [
{
"name": "My Term",
"description": "My term is awesome",
"slug": "my-term"
},
{
"name": "My Other Term",
"slug": "my-other-term",
"children": [
{
"name": "I'm a child term!",
"slug": "hooray-for-children"
}
]
}
]
}
```
Slugs and names are required.
### Post Files
Post files must be HTML, containing the content of the post.
Post data can be specified as JSON in a `` element at the top of the file.
```html
<script>{
"title": "My Post",
"termSlugs": {
"<taxonomy_name>": [
"<hierarchical_slug>"
]
}
}
I'm a post!
```
The post type and parent are determined based on the [directory structure](#directory-structure).
`termSlugs` must match a hierarchical slug defined in [taxonomies.json](#taxonomiesjson).
## PHP API
### Constants
#### GW_VERSION
The installed version of Gilded WordPress.
#### GW_RESOURCE_DIR
The path to the resources directory for the current site.
### Methods
#### gw_resources_dir( url )
Gets the resources directory for a specific site.
* `url`: The URL for the site.
## Permissive Uploads
Depending on what resources you're uploading, you may need to change some WordPress settings.
Here are a few settings that might help:
```php
// Disable more restrictive multisite upload settings.
remove_filter( 'upload_mimes', 'check_upload_mimes' );
// Give unfiltered upload ability to super admins.
define( 'ALLOW_UNFILTERED_UPLOADS', true );
// Allow additional file types.
add_filter( 'upload_mimes', function( $mimes ) {
$mimes[ 'eot' ] = 'application/vnd.ms-fontobject';
$mimes[ 'svg' ] = 'image/svg+xml';
$mimes[ 'ttf' ] = 'application/x-font-ttf';
$mimes[ 'woff' ] = 'application/font-woff';
$mimes[ 'xml' ] = 'text/xml';
$mimes[ 'php' ] = 'application/x-php';
$mimes[ 'json' ] = 'application/json';
return $mimes;
});
// Increase file size limit to 1GB.
add_filter( 'pre_site_option_fileupload_maxk', function() {
return 1024 * 1024;
});
```
## License
Copyright Scott González. Released under the terms of the MIT license.
---
Support this project by [donating on Gratipay](https://gratipay.com/scottgonzalez/).