WordPress
todo; finish merging in two pages
General
- WordPress Codex - The online manual for WordPress and a living repository for WordPress information and documentation.
- 10 Million hits a day with WordPress using a $15 server - Crash tutorial on setting up WordPress on Nginx with Varnish
Support
News
- Make WordPress.org
- Make WordPress Core - WordPress Development Updates
- wpMail.me newsletters
Setup
wget http://wordpress.org/latest.tar.gz && tar -xvzf latest.tar.gz && mv wordpress domain.name && rm latest.tar.gz
or see WP Base
Nginx
- http://codex.wordpress.org/Nginx - used multiconfig system
- http://wiki.nginx.org/WordPress
- https://gist.github.com/878505 - nginx conf for running wp, w3-total-cache
- https://gist.github.com/1534643 - nginx conf for wp, php-fpm
- https://github.com/perusio/wordpress-nginx - wholesale configured /etc/nginx setup
todo, check, test and publish mine
rewrite (single);
- http://www.farinspace.com/wordpress-nginx-rewrite-rules/
- http://piran.com.au/2011/10/nginx-and-wordpress-permalinks/
- http://romej.com/archives/515/nginx-rewrite-rules-for-wordpress-redux
- http://josephscott.org/archives/2010/06/wordpress-pretty-permalinks-with-nginx/
- http://nginxlibrary.com/wordpress-permalinks/
- http://wpmu.org/how-to-setup-your-own-nginx-powered-wordpress-server/
- http://www.gypthecat.com/how-to-install-wordpress-with-ssh-and-nginx
- http://markjaquith.wordpress.com/2011/06/24/wordpress-local-dev-tips/
- http://egalo.com/2012/05/15/clone-live-wordpress-to-local-env/
Multisite (MU)
- Codex: Create A Network
wp-config.php
define('WP_ALLOW_MULTISITE', true);
will enable the Tools Network Screen
- choose subdirectory or subdomain
- mkdir wp-content/blogs.dir
- edit wp-config.php
- make sure server rewrites are correct
- http://premium.wpmudev.org/project/whmcs-multisite-provisioning/
- http://premium.wpmudev.org/project/whmcs-wordpress-integration/
Plugins
- Bulk User Management - A WordPress plugin that lets you manage users across all your sites from one place on a multisite install. - very recent
- Multisite Plugin Manager - Plugin management for WordPress Multisite that supports the native plugins page and the WPMU DEV Pro Sites plugin.
- Select what plugins sites have access to
- Choose plugins to Auto-Activate for all new blogs
- Mass activate/deactivate a plugin on all sites in your network (Very Handy!)
- Assign special plugin access permissions for specific sites in your network
- And as Super Admin, you can override all these to activate specific plugins on the sites you choose!
- Removes the plugin meta row links (Version, Author, Plugin) and any update messages for blog admins
- Network Blog Manager aspire [sic] to be the perfect companion of every Super Administrator of a WP Blog's Network. Network blog internal search engine. - 2011-5-11
- Plugin Commander is a plugin management plugin for multi-site mode, which allows further control on network-activated plugins. - 2010-9-1
S3
Plugins
- Extend: Plugins
- Codex: Plugin API
- Jetpacl is a WordPress plugin that supercharges your self-hosted WordPress site with the awesome cloud power of WordPress.com.
- TGM Plugin Activation is a PHP library that allows you to easily require or recommend plugins for your WordPress themes (and plugins). It allows your users to install and even automatically activate plugins in singular or bulk fashion using native WordPress classes, functions and interfaces. You can reference pre-packaged plugins, plugins from the WordPress Plugin Repository or even plugins hosted elsewhere on the internet.
- Plugin Dependencies - This meta-plugin allows regular plugins to specify other plugins that they depend upon.
Development
- developer - from Automattic, helps optimize your development environment by making sure that you have all the essential tools and plugins installed.
- Debug Bar Adds a debug menu to the admin bar that shows query, cache, and other helpful debugging information.
- Debug Bar Cron
- Rewrite Rules Inspector
- Log Deprecated Notices
- VIP Scanner
- Monster Widget
- Beta Tester
- recommend wp-config.php set to true; WP_DEBUG, SAVEQUERIES
- Plugin Test Drive lets you take any plugin for a test drive, see if suits your needs before letting your site visitors experience it.
- WordPress Reset - Resets the WordPress database back to it's defaults. Deletes all customizations and content. Does not modify files only resets the database.
- Show Template - Prints an html comment in the footer of every page letting you know which template file of your theme was used for the display.
- Better Lorem Ipsum Generator - Auto-generate lorem ipsum content for all post types and taxonomies. Does comments as well. For theme and plugin developers.
Troubleshooting
Deployment
DB
- HyperDB is an advanced database class that supports replication, failover, load balancing, and partitioning.
- WP MySQL Console is a web shell to operate databases such as mysql command shell for developers. Its most original way to operate DBs, you should try. sounds hacky, badjudgement?
Coding
- http://codex.wordpress.org/Function_Reference
- http://queryposts.com/functions/
- http://phpxref.ftwr.co.uk/wordpress/nav.html?_functions/index.html
- http://adambrown.info/p/wp_hooks
- http://xref.yoast.com/
Site Options
use wp-cli:
wp siteurl http://domain.name
HTTP API
- Codex: HTTP API - Within PHP, there are many possible ways to send an HTTP request. For simplicity, these methods will be referred to collectively as 'transports' for this article. The purpose for the HTTP API is to support as many of them as possible with an API that is simple and standard for each of the transports.
Composer
- WordPress Packagist - This site provides a mirror of the WordPress plugin directory as a Composer repository.
Content
Pages
- http://codex.wordpress.org/Creating_a_Static_Front_Page
- http://kuttler.eu/code/set-static-front-page-and-blog-page-programmatically-in-wordpress/
Posting
- http://wordpress.org/extend/plugins/postie/
- http://wordpress.org/extend/plugins/gerryworks-post-by-mail/
Post Extras
- WP-Digest - Sends periodic email notifications of new WordPress blog entries (in either plain text or HTML mode) to a separate subscribers mailing list. Maintains cache file recording ID of last-sent post. On subsequent runs, sends all posts created since the previous run.
- WP-ShkShell provides a terminal-like box for embedding terminal commands within pages or posts. It also support multi-lines, multi-commands and has syntax hightlight.
- Shortcode Manager - Add javascript, iframes, php, flash, and other code to posts, pages, and widgets with ease.
Taxonomy
Relationships
Flickr
Countdown
- http://wordpress.org/extend/plugins/countdown-timer/ - has been used on beltane.org. event title is not widget title, leaves extra space by default, cannot remove "in " before time.
- http://www.wpmanage.com/uji-countdown/ - nice looking, html5/js, cannot disable seconds, tho you can animate them..
- http://mycountdown.org/wordpress-countdown-clock-plugin/ - limited colour settings, cannot turn off theme..
- http://wordpress.org/extend/plugins/recurring-timer-widget/ - nice time setting interface but cannot change "minutes", "seconds", etc. which have no space between them and the number.
- http://wordpress.org/extend/plugins/simple-count-down/ - text, days only
todo
Templates
- Templates
- Stepping Into Templates - Introduction to the building blocks of WordPress Themes, the template files. Explains how they work together to build a web page and how template files can be included in other template files.
- Template Hierarchy - Description of the order of preference of templates for the generation of various pages. Briefly lists the various templates that WordPress checks for in the process of generating a requested page on the weblog.
- http://codex.wordpress.org/Template_Hierarchy#Visual_Overview
- http://digwp.com/wp-content/uploads/which-template-fullsize.png
Template tags
Tools
- http://wordpress.org/extend/plugins/display-template-name/
- http://wordpress.org/extend/plugins/reveal-template/
The Loop
Styles and scripts
wp_register_style( $handle, $src, $deps, $ver, $media ) wp_register_script( $handle, $src, $deps, $ver, $in_footer ); wp_enqueue_style( $handle, $src, $deps, $ver, $media ); wp_enqueue_script( $handle, $src, $deps, $ver, $in_footer );
Or wp_register_style/script with details then wp_enqueue_style on the registered item to choose when to load. Maybe wrapped up as a function and called with add_action
// Using your own version number: 1.1.0 wp_enqueue_style('my-stylesheet', 'url-to-stylesheet', array(), '1.1.0'); wp_enqueue_script('my-script', 'url-to-script', array(), '1.1.0'); // Using a NULL value to hide the version number completely wp_enqueue_style('my-stylesheet', 'url-to-stylesheet', array(), NULL); wp_enqueue_script('my-script', 'url-to-script', array(), NULL); [2]
or ending;
, false, null);
Header
- http://codex.wordpress.org/Function_Reference/get_header - Includes the header.php template file from your current theme's directory. if a name is specified then a specialised header header-{name}.php will be included.
- http://codex.wordpress.org/Function_Reference/body_class - Themes have a template tag for the body tag which will help theme authors to style more effectively with CSS. The Template Tag is called body_class. This function gives the body element different classes and can be added, typically, in the header.php's HTML body tag.
- http://codex.wordpress.org/Function_Reference/wp_nav_menu
- http://wordpress.stackexchange.com/questions/19245/any-docs-for-wp-nav-menus-items-wrap-argument
- http://themble.com/support/navigation-function/ - bones theme
- http://wordpress.stackexchange.com/questions/14037/menu-items-description-custom-walker-for-wp-nav-menu/14039#14039
- http://wordpress.org/support/topic/remove-the-div-and-ul-tags-from-wp_nav_menu-function
- http://www.newthinktank.com/2011/04/wp-nav-menu/
- http://techstudio.co/wordpress/configuring-custom-menus-in-a-wordpress-theme
Does not kick in until Menu is created in Apperance > Menus and linked with appropriate theme menu area. If not set, falls back to showing all page links.
Sidebars
<?php $args = array( 'name' => sprintf(__('Sidebar %d'), $i ), 'id' => 'sidebar-$i', 'description' => '', 'class' => '', 'before_widget' => '<li id="%1$s" class="widget %2$s">', 'after_widget' => '</li>', 'before_title' => '<h2 class="widgettitle">', 'after_title' => '</h2>' ); ?>
- http://codex.wordpress.org/Customizing_Your_Sidebar#New_way_of_adding_sidebars
- stackoverflow: Adding a 2nd Sidebar in a specific Wordpress theme
functions.php;
register_sidebar(array('name'=>'highlight'));
index.php, page.php, etc.;
get_sidebar('highlight');
Excerpts
Widgets
- http://wordpress.org/extend/plugins/featured-page-widget/ [3] - breaks external link output (even with a tag allowed). no support or development.
- http://wordpress.org/extend/plugins/page-on-widget/ - passes through images, ignores read more cut
- http://wordpress.org/extend/plugins/2046s-widget-loops/ - no excerpt length option
- http://wordpress.org/extend/plugins/page-in-widget/ - passes full page, 'show more link' no works.
- http://wordpress.org/extend/plugins/widget-custom/ - adds an extra sidebar, not widget?!?
- http://wordpress.org/extend/plugins/spectacula-page-widget - cannot alter excerpt length
- http://wordpress.org/extend/plugins/wp-page - cannot choose which tags to pass
- http://wordpress.org/extend/plugins/page-excerpts/ - doesn't actually give excerpt field or related widget..
- http://wordpress.org/extend/plugins/simple-page-widget/ - really basic, only option is page id
- http://wordpress.org/extend/plugins/post-and-page-excerpt-widgets/ - no length option, etc, broken plugin links
- WordPress Content Widget - Display WordPress post/page content in a widget.
Template
Layout
- https://github.com/Automattic/table-of-contents - Adds a table of contents to your WordPress pages based on h3 and h4 tags. Useful for documention-centric sites.
not tried
- http://wordpress.org/extend/plugins/advanced-excerpt/ - excerpt without html stripped.
- http://wordpress.org/extend/plugins/multiple-content-blocks/
- http://wordpress.org/extend/plugins/custom-widget-area/ - no idea how this goes beyond adding a new sidebar the regular manner
- http://wordpress.org/extend/plugins/site-layout-customizer/ - alternate layouts. using a SHORTCODE?!
- http://wordpress.org/extend/plugins/wysiwyg-widgets
- http://wordpress.org/extend/plugins/custom-sidebars/ - page specific sidebars
- http://wordpress.org/extend/plugins/wordpress-countdown-widget/
- http://wordpress.org/extend/plugins/tumblr-widget-for-wordpress/
Settings
Theme Features
- Theme Features allows a theme to register support of a certain feature. Theme support functions should be called in the theme's functions.php file to work.
- Sidebar Widgets
- Navigation Menus
- Post Formats
- Post Thumbnails
- Custom Backgrounds
- Custom Headers
- Automatic Feed Links
- Editor Style
- How to leverage the Theme Customizer in your own themes - May 4, 2012
Settings API
- Settings API - Allows admin pages containing settings forms to be managed semi-automatically. It lets you define settings pages, sections within those pages and fields within the sections.
- Example given for choosing a background image.
Options API
- Options API - a simple and standardized way of storing data in the database. The API makes it easy to create, access, update, and delete those options. All the data is being stored in the wp_options table under a given custom name. This page contains the technical documentation use the Options API.
Theme Options
- A Sample WordPress Theme Options Page - June 3, 2010
- NHP-Theme-Options-Framework - extendable theme options classs, using Settings API. Custom error handling for validation classes, allows each tab to count its errors and display warnings for the user.
- Options Framework Plugin - originally via Thematic Options theme
- https://github.com/devinsays/options-framework-theme
- Options Framework Theme - newer plugin base starter theme
- Copy “options.php” from the Options Check theme into your own theme.
- Edit the array in “options.php” to define the options you want to use.
- Add the following function to your theme so it will use default settings even if the Options Framework plugin is not installed:
/* * Helper function to return the theme option value. If no value has been saved, it returns $default. * Needed because options are saved as serialized strings. * * This code allows the theme to work without errors if the Options Framework plugin has been disabled. */ if ( !function_exists( 'of_get_option' ) ) { function of_get_option($name, $default = false) { $optionsframework_settings = get_option('optionsframework'); // Gets the unique option id $option_name = $optionsframework_settings['id']; if ( get_option($option_name) ) { $options = get_option($option_name); } if ( isset($options[$name]) ) { return $options[$name]; } else { return $default; } } }
- The UpThemes Framework
- various things.
Preprocess
See also preprocess, sass.
Sass/SCSS
- Sass for Wordpress - 9 months ago
- requires ruby
- SASS for WordPress
- WordPress SASS
- was phamlp, now phpsass
functions.php;
// SASS/SCSS Stylesheet Definition function generate_css() { if(function_exists('wpsass_define_stylesheet')) { wpsass_define_stylesheet("mystyle.scss"); } } add_action( 'after_setup_theme', 'generate_css' );
- wp-sass - This plugin allows you to write and edit .sass and .scss files directly and have WordPress do the job of compiling and caching the resulting CSS. It eliminates the extra step of having to compile the files into CSS yourself before deploying them.
- uses phpsass
install;
git clone git://github.com/sanchothefat/wp-sass.git wp-sass git submodule update --init --recursive
functions.php:
<?php // Include the class (unless you are using the script as a plugin) require_once( 'wp-sass/wp-sass.php' ); // enqueue a .scss style sheet if ( ! is_admin() ) wp_enqueue_style( 'style', get_stylesheet_directory_uri() . '/style.scss' ); else wp_enqueue_style( 'admin', get_stylesheet_directory_uri() . '/admin.sass.php' ); // you can also use .scss files as mce editor style sheets add_editor_style( 'editor-style.scss' ); ?>
You can also create .sass.php or .scss.php files that will be preprocessed in the WordPress context. What this means is that you can use WordPress functions within the stylesheets themselves eg:
$red: <?php echo get_option( 'redcolour', '#c00' ); ?>; body { background: $red; }
- http://wordpress.org/extend/plugins/wordpress-sass/
- http://trioniclabs.com/2011/12/sass-for-wordpress/
LESS
- LESS Compiler (wordpless) - This plugin compiles .less files in the active theme folder.
- http://plugins.trac.wordpress.org/browser/wordpless/
- README
- https://github.com/zsitro/WordpLESS
- lessphp v0.3.3, latest is 0.3.5
- WP-LESS - Implementation of LESS (Leaner CSS) in order to make themes development easier.
- uses lessphp v0.3.1, plugin-toolkit.
- http://wordpress.org/extend/plugins/lessjs/
- http://wordpress.org/extend/plugins/simple-less-for-wordpress/
- client side
Process, etc.
- Theme Review - Guidelines for designing and developing WordPress Themes plus WordPress Theme Directory standards and practices.
Theme customizer in 3.4 - still need to grok relation to Settings API, etc...
GUI
Testing
- http://wordpress.org/extend/plugins/theme-check/ - automatically check a theme against Theme Review guidelines
- Codex: Theme Unit Test
- Easier Theme Development with Sample WordPress Content - 1409 days ago
- http://wordpress.org/extend/plugins/monster-widget/ - add add widgets at once
Typography
Admin
- ManageWP Worker allows you to remotely manage your WordPress sites from one dashboard. - 2012-6-28
- Secure and fast solution for managing your WordPress sites
- One click upgrades for WordPress, plugin and themes across all your sites
- Schedule automatic backups of your websites (Amazon S3 and Dropbox supported)
- One click to access WP admin of any site
- Install WordPress, clone or migrate a website to another domain
- Bulk install themes and plugins to multiple sites at once
- Add sub-users (writers, staff..) to your account
- Bulk publish posts to multiple sites at once
- SEO Statistics, track your keyword rankings
- Uptime monitoring
- Core Control is a set of plugin modules which can be used to control certain aspects of the WordPress control. Currently, Core Control features modules for managing Filesystem Access, Managing plugin/theme/core updates, Managing HTTP Transports & External HTTP Request logging - 2011-7-12
Migration
- http://codex.wordpress.org/Moving_WordPress
- http://codex.wordpress.org/Changing_The_Site_URL#Moving_Sites
Guides
WordPress.com
Plugins
- http://wordpress.org/extend/plugins/duplicator/ - "Duplicate, clone, backup and transfer an entire site from one location to another in 3 easy steps." - shared hosting problems
- http://wordpress.org/extend/plugins/wp-migrate/ - enter database information separate from the current site/blog database, and migrate the current information over - shared hosting problems
- http://wordpress.org/extend/plugins/wordpress-move/ - gsoc - "capable of changing the domain name in use and/or migrating your installation to another server either as is or based on your choices" - ftp transfer of blog and db, requires wp and wp-move on new sevrer
- http://wordpress.org/extend/plugins/wordpressdeploy/ - allows multiple config files to be added through the admin system and then dynamically switched depending on the URL a user is accessing the site from.
- http://wordpress.org/extend/plugins/ezmigrate/ - requires wp-config.php hack. - weiiird workflow.
- http://wordpress.org/extend/plugins/wp-migrate-db/ - MySQL data dump, find and replace on URLs and file paths, serialized data. no trailing slash for url.
- http://wordpress.org/extend/plugins/add-cloned-sites-for-wpmu-batch/ - clone site in mu install
- http://wordpress.org/extend/plugins/sfr-clone-site/
- http://wordpress.org/extend/plugins/clone-spc/ - clone theme files
- http://wordpress.org/extend/plugins/wp-clone-template/ - creates theme .zip
- http://wordpress.org/extend/plugins/default-blog-options/ - clone settings
Scripts
- http://blog.wp.weightpoint.se/2012/01/04/synchronizing-wordpress-multisite-database-from-production-to-staging-enviorment/ - bash script
Backup
- http://wordpress.org/extend/plugins/backupwordpress/ [4] - back up your entire site including your database and all your files
- http://wordpress.org/extend/plugins/wordpress-backup-to-dropbox/ - files and a SQL dump
- http://wpb2d.com/
- dropbox oauth
- zipped and e-mail notifications cost
- doesn't work on dreamhost shared
- http://wordpress.org/extend/plugins/backwpup/
- all to various
- dropbox oauth
- e-mail notifications
- shows process steps when run manually
- make sure to exclude cache and such like
- http://wordpress.org/extend/plugins/updraftplus/
- S3, Google Drive, FTP, and email
- http://wordpress.org/extend/plugins/pressbackup/
- S3, Dropbox account or local
- http://wordpress.org/extend/plugins/snapshot-backup/ - all to ftp
- http://wordpress.org/extend/plugins/wp-time-machine/
- http://wordpress.org/extend/plugins/cloudsafe365-for-wp/
Users
robots.txt
WordPress generates on if there isn't one there. Confusion out there over what is best. to update
Security
Guides
Articles
- http://www.hongkiat.com/blog/hardening-wordpress-security/
- http://idea15.wordpress.com/2009/11/23/the-5-minute-wordpress-security-audit/
Plugins
- http://wordpress.org/extend/plugins/exploit-scanner/
- http://ocaoimh.ie/exploit-scanner/
- seems to not work? doesn't finish
- http://wordpress.org/extend/plugins/secure-wordpress/
- http://wordpress.org/extend/plugins/wp-security-scan/
- http://www.websitedefender.com/forums/wp-security-scan-plugin/
- change db prefix
- file and directory permission checks
- requires external signup for more..
- http://wordpress.org/extend/plugins/hide-login/
- http://wordpress.org/extend/plugins/login-security-solution/
- http://wordpress.org/extend/plugins/sabre/
- http://wordpress.org/extend/plugins/bad-behavior/
Tools
- WPScan is a black box WordPress vulnerability scanner
sudo apt-get install libcurl4-gnutls-dev libopenssl-ruby sudo gem install typhoeus nokogiri json
Performance
Minify; http://bit51.com/prepare-your-wordpress-theme-to-be-minified/
- http://blog.lukhnos.org/post/12463734700/permanently-convert-wordpress-blogs-to-static-pages
- https://github.com/mossiso/WP-Static
CDN
Cache
- http://wordpress.org/extend/plugins/wp-super-cache/ - disk based
- http://wordpress.org/extend/plugins/w3-total-cache/
- memory based - requires apc or memcache
- http://dougal.gunters.org/blog/2009/08/26/w3-total-cache-plugin/
- http://blog.tigertech.net/posts/use-wp-super-cache/ - long commant discussion on w3tc and wpsc. testing both, i find the latter easier to use. minify and other features are seperate in the latter. to retry wp-tc at some point.
Minify
- http://wordpress.org/extend/plugins/wp-minify/
- http://omninoggin.com/wordpress-posts/troubleshooting-wp-minify-with-firephp/
- http://omninoggin.com/wordpress-posts/tutorial-wp-minify-options/
- http://wordpress.org/support/topic/plugin-wp-minify-ill-conceived-line-wrapping-of-html-for-human-readability-remains !!
- nifty url setup not automatic?
- has debug timestring in pretty url, needs hacking out [8]
- http://betterwp.net/wordpress-plugins/bwp-minify/
- uses WordPress's enqueueing system rather than the output buffer to minify JS and CSS
- doesn't choke on jquery.toolkit.min
Guides
- http://chrisgilligan.com/wordpress/wordpress-with-w3-total-cache-on-nginx-with-apc-virtualmin/
- http://serverfault.com/questions/295920/configuring-nginx-for-w3-total-cache
- http://c3mdigital.com/wordpress-performance-server/
- http://elivz.com/blog/single/wordpress_with_w3tc_on_nginx/
- http://stackoverflow.com/questions/10867526/w3-total-cache-minify-rewrite-rules-not-working-with-nginx
- http://wordpress.org/support/topic/plugin-w3-total-cache-minify-url-rewriting-not-working-on-nginx
- The Ultimate Quickstart Guide to Speeding Up Your WordPress Site - Jan 23rd 2012
- http://wp.tutsplus.com/tutorials/10-quick-tips-optimizing-speeding-up-your-wordpress-site/
- Alternative Use of Google App Engine for Optimizing WordPress - Jan 29th 2012
- Activating Ludicrous Speed: Combine CloudFlare With a CDN on Your Blog - Feb 26th, 2012
E-mail and subscription
- http://wordpress.org/extend/plugins/wysija-newsletters/
- http://wordpress.org/extend/plugins/subscribe2/
- http://wordpress.org/extend/plugins/email-subscription/
Social
Links
- http://wordpress.org/extend/plugins/about-me/ - xfn, just specific service icons though
- http://abisso.org/projects/about-me/
- http://code.l0g.in/about-me - wordpress.org plugin is newer?
Profile
- http://wordpress.org/extend/plugins/search.php?q=webfinger - all that jazz
Outbound
- http://wordpress.org/extend/plugins/network-publisher - crosspost to many other sites, bit.ly
Inbound
Sharing
- http://rtcamp.com/rtsocial/ - uses non-blocking JavaScript to display social media sharing counters on posts/pages
to sort
- http://wordpress.org/extend/plugins/twitter-publisher/ - twitter, bit.ly
- http://wordpress.org/extend/plugins/twitter-widget-pro
Authentication
Contact
SEO
Analytics
- http://shinraholdings.com/plugins/super-simple-google-analytics/
- nice, basic, easy.
- to check; async?
- no footer insertion, how bad?