From 1ef95a937553e0fc7158d902a046b6aab0efdd49 Mon Sep 17 00:00:00 2001 From: James Dunne Date: Fri, 4 Mar 2016 13:27:53 +0000 Subject: [PATCH 01/14] Added proof-of-concept for relations connection problem --- src/User.php | 11 + src/UserMetaCollection.php | 22 + tests/UserTest.php | 16 + tests/config/autoload.php | 18 +- tests/config/corcel-dev-without-prefix.sql | 497 +++++++++++++++++++++ 5 files changed, 559 insertions(+), 5 deletions(-) create mode 100644 tests/config/corcel-dev-without-prefix.sql diff --git a/src/User.php b/src/User.php index f5722ce9..74e788bf 100644 --- a/src/User.php +++ b/src/User.php @@ -287,4 +287,15 @@ public function resetPassword($password) $this->user_pass = $passwordService->wp_hash_password($password); } + + protected function getRelationshipFromMethod($method) + { + $relations = parent::getRelationshipFromMethod($method); + + $relations->listen('set', function ($relation) { + $relation->setConnection($this->getConnectionName()); + }); + + return $this->relations[$method] = $relations; + } } diff --git a/src/UserMetaCollection.php b/src/UserMetaCollection.php index 3fe5aee5..1f0fe91e 100644 --- a/src/UserMetaCollection.php +++ b/src/UserMetaCollection.php @@ -13,6 +13,7 @@ class UserMetaCollection extends Collection { protected $changedKeys = []; + protected $listeners = []; /** * Search for the desired key and return only the row that represent it @@ -24,6 +25,7 @@ public function __get($key) { foreach ($this->items as $item) { if ($item->meta_key == $key) { + $this->notify('get', [$item]); return $item->meta_value; } } @@ -35,6 +37,7 @@ public function __set($key, $value) foreach ($this->items as $item) { if ($item->meta_key == $key) { + $this->notify('set', [$item]); $item->meta_value = $value; return; } @@ -45,6 +48,8 @@ public function __set($key, $value) 'meta_value' => $value, )); + $this->notify('set', [$item]); + $this->push($item); } @@ -58,4 +63,21 @@ public function save($userId) }); } + public function listen($event, callable $listener) + { + if (! isset($this->listeners[$event])) { + $this->listeners[$event] = []; + } + + $this->listeners[$event][] = $listener; + } + + public function notify($event, $args = []) + { + if (isset($this->listeners[$event])) { + foreach ($this->listeners[$event] as $listener) { + call_user_func_array($listener, $args); + } + } + } } \ No newline at end of file diff --git a/tests/UserTest.php b/tests/UserTest.php index da309e0d..2fe2f780 100644 --- a/tests/UserTest.php +++ b/tests/UserTest.php @@ -58,4 +58,20 @@ public function testInsertCustomFields() $this->assertEquals($user->meta->custom_meta1, 'Hallo'); $this->assertEquals($user->meta->custom_meta2, 'Wereld'); } + + public function testUserConnection() + { + $user = new User; + $user->setConnection('no_prefix'); + $user->user_login = 'test'; + $user->save(); + + $user->meta->active = 1; + $user->save(); + + $this->assertEquals('no_prefix', $user->getConnection()->getName()); + $user->meta->each(function ($meta) { + $this->assertEquals('no_prefix', $meta->getConnection()->getName()); + }); + } } \ No newline at end of file diff --git a/tests/config/autoload.php b/tests/config/autoload.php index 551028dd..74aacdb8 100644 --- a/tests/config/autoload.php +++ b/tests/config/autoload.php @@ -1,12 +1,20 @@ 'corcel-dev', - 'username' => 'homestead', - 'password' => 'secret', - 'host' => '127.0.0.1', +$capsule = \Corcel\Database::connect($params = array( + 'database' => 'corcel-dev', + 'username' => 'homestead', + 'password' => 'secret', + 'host' => '127.0.0.1', )); +$capsule->addConnection(array_merge($params, [ + 'driver' => 'mysql', + 'host' => 'localhost', + 'charset' => 'utf8', + 'collation' => 'utf8_unicode_ci', + 'prefix' => '', +]), 'no_prefix'); + // $corcel = new \Corcel\Database\Manager(); // $corcel->addConnection([ diff --git a/tests/config/corcel-dev-without-prefix.sql b/tests/config/corcel-dev-without-prefix.sql new file mode 100644 index 00000000..26ea44d2 --- /dev/null +++ b/tests/config/corcel-dev-without-prefix.sql @@ -0,0 +1,497 @@ +# ************************************************************ +# Sequel Pro SQL dump +# Version 4096 +# +# http://www.sequelpro.com/ +# http://code.google.com/p/sequel-pro/ +# +# Host: 127.0.0.1 (MySQL 5.6.25-log) +# Database: corcel-dev +# Generation Time: 2016-03-04 13:27:10 +0000 +# ************************************************************ + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + + +# Dump of table commentmeta +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `commentmeta`; + +CREATE TABLE `commentmeta` ( + `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `comment_id` bigint(20) unsigned NOT NULL DEFAULT '0', + `meta_key` varchar(255) DEFAULT NULL, + `meta_value` longtext, + PRIMARY KEY (`meta_id`), + KEY `comment_id` (`comment_id`), + KEY `meta_key` (`meta_key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + + + +# Dump of table comments +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `comments`; + +CREATE TABLE `comments` ( + `comment_ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `comment_post_ID` bigint(20) unsigned NOT NULL DEFAULT '0', + `comment_author` tinytext NOT NULL, + `comment_author_email` varchar(100) NOT NULL DEFAULT '', + `comment_author_url` varchar(200) NOT NULL DEFAULT '', + `comment_author_IP` varchar(100) NOT NULL DEFAULT '', + `comment_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `comment_date_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `comment_content` text NOT NULL, + `comment_karma` int(11) NOT NULL DEFAULT '0', + `comment_approved` varchar(20) NOT NULL DEFAULT '1', + `comment_agent` varchar(255) NOT NULL DEFAULT '', + `comment_type` varchar(20) NOT NULL DEFAULT '', + `comment_parent` bigint(20) unsigned NOT NULL DEFAULT '0', + `user_id` bigint(20) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`comment_ID`), + KEY `comment_post_ID` (`comment_post_ID`), + KEY `comment_approved_date_gmt` (`comment_approved`,`comment_date_gmt`), + KEY `comment_date_gmt` (`comment_date_gmt`), + KEY `comment_parent` (`comment_parent`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + + + +# Dump of table links +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `links`; + +CREATE TABLE `links` ( + `link_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `link_url` varchar(255) NOT NULL DEFAULT '', + `link_name` varchar(255) NOT NULL DEFAULT '', + `link_image` varchar(255) NOT NULL DEFAULT '', + `link_target` varchar(25) NOT NULL DEFAULT '', + `link_description` varchar(255) NOT NULL DEFAULT '', + `link_visible` varchar(20) NOT NULL DEFAULT 'Y', + `link_owner` bigint(20) unsigned NOT NULL DEFAULT '1', + `link_rating` int(11) NOT NULL DEFAULT '0', + `link_updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `link_rel` varchar(255) NOT NULL DEFAULT '', + `link_notes` mediumtext NOT NULL, + `link_rss` varchar(255) NOT NULL DEFAULT '', + PRIMARY KEY (`link_id`), + KEY `link_visible` (`link_visible`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + + + +# Dump of table options +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `options`; + +CREATE TABLE `options` ( + `option_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `option_name` varchar(64) NOT NULL DEFAULT '', + `option_value` longtext NOT NULL, + `autoload` varchar(20) NOT NULL DEFAULT 'yes', + PRIMARY KEY (`option_id`), + UNIQUE KEY `option_name` (`option_name`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + + + +# Dump of table postmeta +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `postmeta`; + +CREATE TABLE `postmeta` ( + `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `post_id` bigint(20) unsigned NOT NULL DEFAULT '0', + `meta_key` varchar(255) DEFAULT NULL, + `meta_value` longtext, + PRIMARY KEY (`meta_id`), + KEY `post_id` (`post_id`), + KEY `meta_key` (`meta_key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + + + +# Dump of table posts +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `posts`; + +CREATE TABLE `posts` ( + `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `post_author` bigint(20) unsigned NOT NULL DEFAULT '0', + `post_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `post_date_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `post_content` longtext NOT NULL, + `post_title` text NOT NULL, + `post_excerpt` text NOT NULL, + `post_status` varchar(20) NOT NULL DEFAULT 'publish', + `comment_status` varchar(20) NOT NULL DEFAULT 'open', + `ping_status` varchar(20) NOT NULL DEFAULT 'open', + `post_password` varchar(20) NOT NULL DEFAULT '', + `post_name` varchar(200) NOT NULL DEFAULT '', + `to_ping` text NOT NULL, + `pinged` text NOT NULL, + `post_modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `post_modified_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `post_content_filtered` longtext NOT NULL, + `post_parent` bigint(20) unsigned NOT NULL DEFAULT '0', + `guid` varchar(255) NOT NULL DEFAULT '', + `menu_order` int(11) NOT NULL DEFAULT '0', + `post_type` varchar(20) NOT NULL DEFAULT 'post', + `post_mime_type` varchar(100) NOT NULL DEFAULT '', + `comment_count` bigint(20) NOT NULL DEFAULT '0', + PRIMARY KEY (`ID`), + KEY `post_name` (`post_name`), + KEY `type_status_date` (`post_type`,`post_status`,`post_date`,`ID`), + KEY `post_parent` (`post_parent`), + KEY `post_author` (`post_author`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + + + +# Dump of table relationships +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `relationships`; + +CREATE TABLE `relationships` ( + `object_id` bigint(20) unsigned NOT NULL DEFAULT '0', + `term_taxonomy_id` bigint(20) unsigned NOT NULL DEFAULT '0', + `term_order` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`object_id`,`term_taxonomy_id`), + KEY `term_taxonomy_id` (`term_taxonomy_id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + + + +# Dump of table taxonomy +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `taxonomy`; + +CREATE TABLE `taxonomy` ( + `term_taxonomy_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `term_id` bigint(20) unsigned NOT NULL DEFAULT '0', + `taxonomy` varchar(32) NOT NULL DEFAULT '', + `description` longtext NOT NULL, + `parent` bigint(20) unsigned NOT NULL DEFAULT '0', + `count` bigint(20) NOT NULL DEFAULT '0', + PRIMARY KEY (`term_taxonomy_id`), + UNIQUE KEY `term_id_taxonomy` (`term_id`,`taxonomy`), + KEY `taxonomy` (`taxonomy`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + + + +# Dump of table terms +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `terms`; + +CREATE TABLE `terms` ( + `term_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(200) NOT NULL DEFAULT '', + `slug` varchar(200) NOT NULL DEFAULT '', + `term_group` bigint(10) NOT NULL DEFAULT '0', + PRIMARY KEY (`term_id`), + UNIQUE KEY `slug` (`slug`), + KEY `name` (`name`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + + + +# Dump of table usermeta +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `usermeta`; + +CREATE TABLE `usermeta` ( + `umeta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `user_id` bigint(20) unsigned NOT NULL DEFAULT '0', + `meta_key` varchar(255) DEFAULT NULL, + `meta_value` longtext, + PRIMARY KEY (`umeta_id`), + KEY `user_id` (`user_id`), + KEY `meta_key` (`meta_key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + + + +# Dump of table users +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `users`; + +CREATE TABLE `users` ( + `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `user_login` varchar(60) NOT NULL DEFAULT '', + `user_pass` varchar(64) NOT NULL DEFAULT '', + `user_nicename` varchar(50) NOT NULL DEFAULT '', + `user_email` varchar(100) NOT NULL DEFAULT '', + `user_url` varchar(100) NOT NULL DEFAULT '', + `user_registered` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `user_activation_key` varchar(60) NOT NULL DEFAULT '', + `user_status` int(11) NOT NULL DEFAULT '0', + `display_name` varchar(250) NOT NULL DEFAULT '', + PRIMARY KEY (`ID`), + KEY `user_login_key` (`user_login`), + KEY `user_nicename` (`user_nicename`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + + + +# Dump of table wp_commentmeta +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `wp_commentmeta`; + +CREATE TABLE `wp_commentmeta` ( + `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `comment_id` bigint(20) unsigned NOT NULL DEFAULT '0', + `meta_key` varchar(255) DEFAULT NULL, + `meta_value` longtext, + PRIMARY KEY (`meta_id`), + KEY `comment_id` (`comment_id`), + KEY `meta_key` (`meta_key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + + + +# Dump of table wp_comments +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `wp_comments`; + +CREATE TABLE `wp_comments` ( + `comment_ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `comment_post_ID` bigint(20) unsigned NOT NULL DEFAULT '0', + `comment_author` tinytext NOT NULL, + `comment_author_email` varchar(100) NOT NULL DEFAULT '', + `comment_author_url` varchar(200) NOT NULL DEFAULT '', + `comment_author_IP` varchar(100) NOT NULL DEFAULT '', + `comment_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `comment_date_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `comment_content` text NOT NULL, + `comment_karma` int(11) NOT NULL DEFAULT '0', + `comment_approved` varchar(20) NOT NULL DEFAULT '1', + `comment_agent` varchar(255) NOT NULL DEFAULT '', + `comment_type` varchar(20) NOT NULL DEFAULT '', + `comment_parent` bigint(20) unsigned NOT NULL DEFAULT '0', + `user_id` bigint(20) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`comment_ID`), + KEY `comment_post_ID` (`comment_post_ID`), + KEY `comment_approved_date_gmt` (`comment_approved`,`comment_date_gmt`), + KEY `comment_date_gmt` (`comment_date_gmt`), + KEY `comment_parent` (`comment_parent`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + + + +# Dump of table wp_links +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `wp_links`; + +CREATE TABLE `wp_links` ( + `link_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `link_url` varchar(255) NOT NULL DEFAULT '', + `link_name` varchar(255) NOT NULL DEFAULT '', + `link_image` varchar(255) NOT NULL DEFAULT '', + `link_target` varchar(25) NOT NULL DEFAULT '', + `link_description` varchar(255) NOT NULL DEFAULT '', + `link_visible` varchar(20) NOT NULL DEFAULT 'Y', + `link_owner` bigint(20) unsigned NOT NULL DEFAULT '1', + `link_rating` int(11) NOT NULL DEFAULT '0', + `link_updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `link_rel` varchar(255) NOT NULL DEFAULT '', + `link_notes` mediumtext NOT NULL, + `link_rss` varchar(255) NOT NULL DEFAULT '', + PRIMARY KEY (`link_id`), + KEY `link_visible` (`link_visible`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + + + +# Dump of table wp_options +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `wp_options`; + +CREATE TABLE `wp_options` ( + `option_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `option_name` varchar(64) NOT NULL DEFAULT '', + `option_value` longtext NOT NULL, + `autoload` varchar(20) NOT NULL DEFAULT 'yes', + PRIMARY KEY (`option_id`), + UNIQUE KEY `option_name` (`option_name`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + + + +# Dump of table wp_postmeta +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `wp_postmeta`; + +CREATE TABLE `wp_postmeta` ( + `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `post_id` bigint(20) unsigned NOT NULL DEFAULT '0', + `meta_key` varchar(255) DEFAULT NULL, + `meta_value` longtext, + PRIMARY KEY (`meta_id`), + KEY `post_id` (`post_id`), + KEY `meta_key` (`meta_key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + + + +# Dump of table wp_posts +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `wp_posts`; + +CREATE TABLE `wp_posts` ( + `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `post_author` bigint(20) unsigned NOT NULL DEFAULT '0', + `post_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `post_date_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `post_content` longtext NOT NULL, + `post_title` text NOT NULL, + `post_excerpt` text NOT NULL, + `post_status` varchar(20) NOT NULL DEFAULT 'publish', + `comment_status` varchar(20) NOT NULL DEFAULT 'open', + `ping_status` varchar(20) NOT NULL DEFAULT 'open', + `post_password` varchar(20) NOT NULL DEFAULT '', + `post_name` varchar(200) NOT NULL DEFAULT '', + `to_ping` text NOT NULL, + `pinged` text NOT NULL, + `post_modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `post_modified_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `post_content_filtered` longtext NOT NULL, + `post_parent` bigint(20) unsigned NOT NULL DEFAULT '0', + `guid` varchar(255) NOT NULL DEFAULT '', + `menu_order` int(11) NOT NULL DEFAULT '0', + `post_type` varchar(20) NOT NULL DEFAULT 'post', + `post_mime_type` varchar(100) NOT NULL DEFAULT '', + `comment_count` bigint(20) NOT NULL DEFAULT '0', + PRIMARY KEY (`ID`), + KEY `post_name` (`post_name`), + KEY `type_status_date` (`post_type`,`post_status`,`post_date`,`ID`), + KEY `post_parent` (`post_parent`), + KEY `post_author` (`post_author`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + + + +# Dump of table wp_term_relationships +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `wp_term_relationships`; + +CREATE TABLE `wp_term_relationships` ( + `object_id` bigint(20) unsigned NOT NULL DEFAULT '0', + `term_taxonomy_id` bigint(20) unsigned NOT NULL DEFAULT '0', + `term_order` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`object_id`,`term_taxonomy_id`), + KEY `term_taxonomy_id` (`term_taxonomy_id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + + + +# Dump of table wp_term_taxonomy +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `wp_term_taxonomy`; + +CREATE TABLE `wp_term_taxonomy` ( + `term_taxonomy_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `term_id` bigint(20) unsigned NOT NULL DEFAULT '0', + `taxonomy` varchar(32) NOT NULL DEFAULT '', + `description` longtext NOT NULL, + `parent` bigint(20) unsigned NOT NULL DEFAULT '0', + `count` bigint(20) NOT NULL DEFAULT '0', + PRIMARY KEY (`term_taxonomy_id`), + UNIQUE KEY `term_id_taxonomy` (`term_id`,`taxonomy`), + KEY `taxonomy` (`taxonomy`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + + + +# Dump of table wp_terms +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `wp_terms`; + +CREATE TABLE `wp_terms` ( + `term_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(200) NOT NULL DEFAULT '', + `slug` varchar(200) NOT NULL DEFAULT '', + `term_group` bigint(10) NOT NULL DEFAULT '0', + PRIMARY KEY (`term_id`), + UNIQUE KEY `slug` (`slug`), + KEY `name` (`name`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + + + +# Dump of table wp_usermeta +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `wp_usermeta`; + +CREATE TABLE `wp_usermeta` ( + `umeta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `user_id` bigint(20) unsigned NOT NULL DEFAULT '0', + `meta_key` varchar(255) DEFAULT NULL, + `meta_value` longtext, + PRIMARY KEY (`umeta_id`), + KEY `user_id` (`user_id`), + KEY `meta_key` (`meta_key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + + + +# Dump of table wp_users +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `wp_users`; + +CREATE TABLE `wp_users` ( + `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `user_login` varchar(60) NOT NULL DEFAULT '', + `user_pass` varchar(64) NOT NULL DEFAULT '', + `user_nicename` varchar(50) NOT NULL DEFAULT '', + `user_email` varchar(100) NOT NULL DEFAULT '', + `user_url` varchar(100) NOT NULL DEFAULT '', + `user_registered` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `user_activation_key` varchar(60) NOT NULL DEFAULT '', + `user_status` int(11) NOT NULL DEFAULT '0', + `display_name` varchar(250) NOT NULL DEFAULT '', + PRIMARY KEY (`ID`), + KEY `user_login_key` (`user_login`), + KEY `user_nicename` (`user_nicename`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + + + + +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; From 4220563eca6460f3a29ca79eb8c5b869d31afa7e Mon Sep 17 00:00:00 2001 From: James Dunne Date: Fri, 4 Mar 2016 15:37:57 +0000 Subject: [PATCH 02/14] Fixed for the general case --- src/Model.php | 29 ++++++++++++++++++++++++++--- src/User.php | 13 +------------ src/UserMetaCollection.php | 29 +++-------------------------- 3 files changed, 30 insertions(+), 41 deletions(-) diff --git a/src/Model.php b/src/Model.php index 4afcfdc5..8d47e8e3 100644 --- a/src/Model.php +++ b/src/Model.php @@ -7,6 +7,7 @@ */ namespace Corcel; +use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model as Eloquent; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\BelongsTo; @@ -24,10 +25,9 @@ public function hasMany($related, $foreignKey = null, $localKey = null) $localKey = $localKey ?: $this->getKeyName(); - return new HasMany($instance->newQuery(), $this, $instance->getTable().'.'.$foreignKey, $localKey); + return new HasMany($instance->newQuery(), $this, $foreignKey, $localKey); } - public function belongsTo($related, $foreignKey = null, $otherKey = null, $relation = null) { if (is_null($relation)) { @@ -49,7 +49,7 @@ public function belongsTo($related, $foreignKey = null, $otherKey = null, $relat return new BelongsTo($query, $this, $foreignKey, $otherKey, $relation); } - + public function belongsToMany($related, $table = null, $foreignKey = null, $otherKey = null, $relation = null) { @@ -72,4 +72,27 @@ public function belongsToMany($related, $table = null, $foreignKey = null, $othe return new BelongsToMany($query, $this, $table, $foreignKey, $otherKey, $relation); } + + public function getRelationValue($key) + { + $relation = parent::getRelationValue($key); + + if ($relation instanceof Collection) { + $relation->each(function ($model) { + $this->setRelationConnection($model); + }); + return $relation; + } + + $this->setRelationConnection($relation); + + return $relation; + } + + protected function setRelationConnection($model) + { + if ($model instanceof Eloquent) { + $model->setConnection($this->getConnectionName()); + } + } } diff --git a/src/User.php b/src/User.php index 74e788bf..c12aa68f 100644 --- a/src/User.php +++ b/src/User.php @@ -27,7 +27,7 @@ class User extends Model implements Authenticatable, CanResetPassword public function setUpdatedAtAttribute($value) { } - + /** * The accessors to append to the model's array form. * @@ -287,15 +287,4 @@ public function resetPassword($password) $this->user_pass = $passwordService->wp_hash_password($password); } - - protected function getRelationshipFromMethod($method) - { - $relations = parent::getRelationshipFromMethod($method); - - $relations->listen('set', function ($relation) { - $relation->setConnection($this->getConnectionName()); - }); - - return $this->relations[$method] = $relations; - } } diff --git a/src/UserMetaCollection.php b/src/UserMetaCollection.php index 1f0fe91e..c7eaf0c5 100644 --- a/src/UserMetaCollection.php +++ b/src/UserMetaCollection.php @@ -1,8 +1,8 @@ - */ @@ -13,11 +13,10 @@ class UserMetaCollection extends Collection { protected $changedKeys = []; - protected $listeners = []; /** * Search for the desired key and return only the row that represent it - * + * * @param string $key * @return string */ @@ -25,7 +24,6 @@ public function __get($key) { foreach ($this->items as $item) { if ($item->meta_key == $key) { - $this->notify('get', [$item]); return $item->meta_value; } } @@ -37,7 +35,6 @@ public function __set($key, $value) foreach ($this->items as $item) { if ($item->meta_key == $key) { - $this->notify('set', [$item]); $item->meta_value = $value; return; } @@ -48,8 +45,6 @@ public function __set($key, $value) 'meta_value' => $value, )); - $this->notify('set', [$item]); - $this->push($item); } @@ -62,22 +57,4 @@ public function save($userId) } }); } - - public function listen($event, callable $listener) - { - if (! isset($this->listeners[$event])) { - $this->listeners[$event] = []; - } - - $this->listeners[$event][] = $listener; - } - - public function notify($event, $args = []) - { - if (isset($this->listeners[$event])) { - foreach ($this->listeners[$event] as $listener) { - call_user_func_array($listener, $args); - } - } - } } \ No newline at end of file From edaad08ebf5fd4430be6cc2a7a0121b266ee1c2c Mon Sep 17 00:00:00 2001 From: James Dunne Date: Fri, 4 Mar 2016 15:47:48 +0000 Subject: [PATCH 03/14] Cleaned up formatting from probing Model --- src/Model.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Model.php b/src/Model.php index 8d47e8e3..eb96e5cd 100644 --- a/src/Model.php +++ b/src/Model.php @@ -50,7 +50,6 @@ public function belongsTo($related, $foreignKey = null, $otherKey = null, $relat return new BelongsTo($query, $this, $foreignKey, $otherKey, $relation); } - public function belongsToMany($related, $table = null, $foreignKey = null, $otherKey = null, $relation = null) { if (is_null($relation)) { From cc0a3d8db78a6c41aeffb7ee042f2d1db54381b9 Mon Sep 17 00:00:00 2001 From: James Dunne Date: Fri, 4 Mar 2016 15:57:22 +0000 Subject: [PATCH 04/14] Added date support to Comment model --- src/Comment.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Comment.php b/src/Comment.php index bdfe2495..e2846492 100644 --- a/src/Comment.php +++ b/src/Comment.php @@ -10,8 +10,12 @@ class Comment extends Model { + const CREATED_AT = 'comment_date'; + const UPDATED_AT = null; + protected $table = 'comments'; protected $primaryKey = 'comment_ID'; + protected $dates = ['comment_date']; /** * Post relationship From bdc9493a61a355603a1034e808f57ea2daf075d7 Mon Sep 17 00:00:00 2001 From: James Dunne Date: Fri, 4 Mar 2016 16:02:11 +0000 Subject: [PATCH 05/14] Added enforcing connection test for comments --- tests/CommentTest.php | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/tests/CommentTest.php b/tests/CommentTest.php index 07fc20d3..ded8c24c 100644 --- a/tests/CommentTest.php +++ b/tests/CommentTest.php @@ -9,11 +9,11 @@ public function testCommentConstructor() $comment = new Comment; $this->assertTrue($comment instanceof \Corcel\Comment); } - + public function testCommentId() { $comment = Comment::find(1); - + if ($comment) { //$this->assertInternalType('integer', $comment->comment_ID); $this->assertEquals($comment->comment_ID, 1); @@ -21,11 +21,11 @@ public function testCommentId() $this->assertNull($comment); } } - + public function testCommentPost() { $comment = Comment::find(1); - + $this->assertTrue($comment->Post()->first() instanceof \Corcel\Post); $this->assertEquals($comment->Post()->first()->ID, 1); } @@ -42,7 +42,7 @@ public function testCommentPostId() } public function testOriginal() - { + { $comment = Comment::find(2); $this->assertTrue($comment->original()->first() instanceof \Corcel\Comment); @@ -72,4 +72,20 @@ public function testCommentHasReplies() $this->assertInternalType('boolean', $comment->hasReplies()); $this->assertTrue($comment->hasReplies()); } + + public function testCommentEnforceConnection() + { + $comment = new Comment; + $comment->setConnection('no_prefix'); + $comment->comment_content = 'Test content'; + $comment->save(); + + $post = new Post; + $post->content = 'Test'; + $comment->post()->associate($post); + $comment->save(); + + $this->assertEquals('no_prefix', $comment->getConnectionName()); + $this->assertEquals('no_prefix', $comment->post->getConnectionName()); + } } \ No newline at end of file From 49dcb9ab762d7eb634846931d53e8c2e4316652a Mon Sep 17 00:00:00 2001 From: rundef Date: Sun, 6 Mar 2016 09:19:49 -0500 Subject: [PATCH 06/14] Auth: password resets now working with Laravel 5.2 --- README.md | 25 ++++++++++++++++++++++++- src/Auth/ResetsPasswords.php | 26 ++++++++++++++++++++++++++ src/User.php | 9 --------- 3 files changed, 50 insertions(+), 10 deletions(-) create mode 100644 src/Auth/ResetsPasswords.php diff --git a/README.md b/README.md index b024e968..a6ae3414 100644 --- a/README.md +++ b/README.md @@ -352,7 +352,30 @@ And then, define the user provider in `config/auth.php` : ], ``` -** Note: Corcel isn't compatible with Laravel's password resetting as of Laravel 5.2, but it should be fixed in Laravel 5.3 ** +To make Laravel's Password Reset work with Corcel, we have to override how passwords are stored in the database. To do this, you must change `Auth/PasswordController.php` from : + +```php +use App\Http\Controllers\Controller; +use Illuminate\Foundation\Auth\ResetsPasswords; + +class PasswordController extends Controller +{ + use ResetsPasswords; +``` + +to + +```php +use App\Http\Controllers\Controller; +use Illuminate\Foundation\Auth\ResetsPasswords; +use Corcel\Auth\ResetsPasswords as CorcelResetsPasswords; + +class PasswordController extends Controller +{ + use ResetsPasswords, CorcelResetsPasswords { + CorcelResetsPasswords::resetPassword insteadof ResetsPasswords; + } +``` #### Using something else diff --git a/src/Auth/ResetsPasswords.php b/src/Auth/ResetsPasswords.php new file mode 100644 index 00000000..093aef65 --- /dev/null +++ b/src/Auth/ResetsPasswords.php @@ -0,0 +1,26 @@ +user_pass = $passwordService->wp_hash_password($password); + + $user->save(); + + Auth::guard($this->getGuard())->login($user); + } +} \ No newline at end of file diff --git a/src/User.php b/src/User.php index c12aa68f..e48eefe9 100644 --- a/src/User.php +++ b/src/User.php @@ -10,7 +10,6 @@ use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Contracts\Auth\CanResetPassword; -use Corcel\Password\PasswordService; class User extends Model implements Authenticatable, CanResetPassword { @@ -279,12 +278,4 @@ public function getRememberTokenName() { public function getEmailForPasswordReset() { return $this->user_email; } - - - public function resetPassword($password) - { - $passwordService = new PasswordService; - - $this->user_pass = $passwordService->wp_hash_password($password); - } } From 20b28f34ab79561e24984f4048f5ff2507c65fc2 Mon Sep 17 00:00:00 2001 From: Junior Grossi Date: Mon, 7 Mar 2016 21:41:21 -0300 Subject: [PATCH 07/14] Change all Wordpress names to capitalize P in 'WordPress --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index b024e968..374b35d6 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ -Wordpress Corcel +WordPress Corcel ================ -> This package allows you to use Wordpress as backend (admin panel) and retrieve its data using Eloquent, with any PHP project or even framework. +> This package allows you to use WordPress as backend (admin panel) and retrieve its data using Eloquent, with any PHP project or even framework. -Corcel is a class collection created to retrieve Wordpress database data using a better syntax. It uses the [Eloquent ORM](https://github.com/illuminate/database) developed for the Laravel Framework, but you can use Corcel in any type of PHP project, with any framework, including Laravel. +Corcel is a class collection created to retrieve WordPress database data using a better syntax. It uses the [Eloquent ORM](https://github.com/illuminate/database) developed for the Laravel Framework, but you can use Corcel in any type of PHP project, with any framework, including Laravel. -This way, you can use Wordpress as the backend (admin panel), to insert posts, custom types, etc, and you can use whatever you want in the frontend, like Silex, Slim Framework, Laravel, Zend, or even pure PHP (why not?). So, just use Corcel to retrieve data from Wordpress. +This way, you can use WordPress as the backend (admin panel), to insert posts, custom types, etc, and you can use whatever you want in the frontend, like Silex, Slim Framework, Laravel, Zend, or even pure PHP (why not?). So, just use Corcel to retrieve data from WordPress. ## Installation @@ -47,7 +47,7 @@ If you are using Laravel you **do not need** to configure database again. It's a 'engine' => null, ], - 'wordpress' => [ // this is your Corcel database connection, where Wordpress tables are + 'wordpress' => [ // this is your Corcel database connection, where WordPress tables are 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'corcel', @@ -93,7 +93,7 @@ Here you have to configure the database to fit the Corcel requirements. First, y require __DIR__ . '/vendor/autoload.php'; ``` -Now you must set your Wordpress database params: +Now you must set your WordPress database params: ```php $params = array( @@ -112,7 +112,7 @@ You can specify all Eloquent params, but some are default (but you can override 'host' => 'localhost', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', -'prefix' => 'wp_', // Specify the prefix for wordpress tables, default prefix is 'wp_' +'prefix' => 'wp_', // Specify the prefix for WordPress tables, default prefix is 'wp_' ``` ### Posts From 5c317272bf127b2b4e3c484e0c07b21ddeb6e0cf Mon Sep 17 00:00:00 2001 From: Leo Caseiro Date: Tue, 8 Mar 2016 19:00:50 +1100 Subject: [PATCH 08/14] Capitalize P on WordPress --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index b024e968..b626e3bd 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ -Wordpress Corcel +WordPress Corcel ================ -> This package allows you to use Wordpress as backend (admin panel) and retrieve its data using Eloquent, with any PHP project or even framework. +> This package allows you to use WordPress as backend (admin panel) and retrieve its data using Eloquent, with any PHP project or even framework. -Corcel is a class collection created to retrieve Wordpress database data using a better syntax. It uses the [Eloquent ORM](https://github.com/illuminate/database) developed for the Laravel Framework, but you can use Corcel in any type of PHP project, with any framework, including Laravel. +Corcel is a class collection created to retrieve WordPress database data using a better syntax. It uses the [Eloquent ORM](https://github.com/illuminate/database) developed for the Laravel Framework, but you can use Corcel in any type of PHP project, with any framework, including Laravel. -This way, you can use Wordpress as the backend (admin panel), to insert posts, custom types, etc, and you can use whatever you want in the frontend, like Silex, Slim Framework, Laravel, Zend, or even pure PHP (why not?). So, just use Corcel to retrieve data from Wordpress. +This way, you can use WordPress as the backend (admin panel), to insert posts, custom types, etc, and you can use whatever you want in the frontend, like Silex, Slim Framework, Laravel, Zend, or even pure PHP (why not?). So, just use Corcel to retrieve data from WordPress. ## Installation @@ -47,7 +47,7 @@ If you are using Laravel you **do not need** to configure database again. It's a 'engine' => null, ], - 'wordpress' => [ // this is your Corcel database connection, where Wordpress tables are + 'wordpress' => [ // this is your Corcel database connection, where WordPress tables are 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'corcel', @@ -93,7 +93,7 @@ Here you have to configure the database to fit the Corcel requirements. First, y require __DIR__ . '/vendor/autoload.php'; ``` -Now you must set your Wordpress database params: +Now you must set your WordPress database params: ```php $params = array( From a92a28e6fabbab602069515c7b4b417673fc7f1b Mon Sep 17 00:00:00 2001 From: Junior Grossi Date: Thu, 17 Mar 2016 13:35:51 -0300 Subject: [PATCH 09/14] Add setCreatedAt and setUpdatedAt logic to Comment --- src/Comment.php | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/Comment.php b/src/Comment.php index e2846492..f4f44c91 100644 --- a/src/Comment.php +++ b/src/Comment.php @@ -107,4 +107,26 @@ public function newQuery($excludeDeleted = true) return $builder; } + + public function setCreatedAt($value) + { + $field = static::CREATED_AT; + $this->{$field} = $value; + + $field .= '_gmt'; + $this->{$field} = $value; + + return parent::setCreatedAt($value); + } + + public function setUpdatedAt($value) + { + $field = static::UPDATED_AT; + $this->{$field} = $value; + + $field .= '_gmt'; + $this->{$field} = $value; + + return parent::setUpdatedAt($value); + } } From bc7bfd7f236843e20a8766e37fb309fb4a0eea7b Mon Sep 17 00:00:00 2001 From: Junior Grossi Date: Thu, 17 Mar 2016 13:36:21 -0300 Subject: [PATCH 10/14] Remove unnecessary comment --- src/Post.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Post.php b/src/Post.php index 824a3622..e255eafe 100644 --- a/src/Post.php +++ b/src/Post.php @@ -490,7 +490,7 @@ public function setUpdatedAt($value) $field .= '_gmt'; $this->{$field} = $value; - return parent::setUpdatedAt($value); // TODO: Change the autogenerated stub + return parent::setUpdatedAt($value); } /** From bf2fb81478ecf4ada63322d95e0401ba22c937a9 Mon Sep 17 00:00:00 2001 From: Junior Grossi Date: Thu, 17 Mar 2016 13:37:00 -0300 Subject: [PATCH 11/14] Add required fields to comment --- tests/CommentTest.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/CommentTest.php b/tests/CommentTest.php index ded8c24c..0b2c281f 100644 --- a/tests/CommentTest.php +++ b/tests/CommentTest.php @@ -26,8 +26,8 @@ public function testCommentPost() { $comment = Comment::find(1); - $this->assertTrue($comment->Post()->first() instanceof \Corcel\Post); - $this->assertEquals($comment->Post()->first()->ID, 1); + $this->assertTrue($comment->post()->first() instanceof \Corcel\Post); + $this->assertEquals($comment->post()->first()->ID, 1); } public function testCommentPostId() @@ -78,10 +78,14 @@ public function testCommentEnforceConnection() $comment = new Comment; $comment->setConnection('no_prefix'); $comment->comment_content = 'Test content'; + $comment->comment_author = 1; + $comment->comment_post_ID = 2; $comment->save(); $post = new Post; - $post->content = 'Test'; + $post->post_content = 'Test'; + $post->save(); + $comment->post()->associate($post); $comment->save(); From 17772712a0d38bd070cc296d033752ec81bfa66d Mon Sep 17 00:00:00 2001 From: Junior Grossi Date: Thu, 17 Mar 2016 13:37:31 -0300 Subject: [PATCH 12/14] Add tests for connections between relation models --- tests/PostTest.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/tests/PostTest.php b/tests/PostTest.php index 51677df1..bf30b925 100644 --- a/tests/PostTest.php +++ b/tests/PostTest.php @@ -159,7 +159,7 @@ public function testSingleTableInheritance() $this->assertInstanceOf("\\Corcel\\Page", $page); } - public function testclearRegisteredPostTypes() + public function testClearRegisteredPostTypes() { Post::registerPostType('page', "\\Corcel\\Page"); Post::clearRegisteredPostTypes(); @@ -168,4 +168,12 @@ public function testclearRegisteredPostTypes() $this->assertInstanceOf("\\Corcel\\Post", $page); } + + public function testPostRelationConnections() + { + $post = Post::find(1); + $post->setConnection('no_prefix'); + + $this->assertEquals('no_prefix', $post->author->getConnectionName()); + } } From 7941f403a6062fa32cacd3dfd96310a7dd332945 Mon Sep 17 00:00:00 2001 From: Junior Grossi Date: Thu, 17 Mar 2016 13:38:43 -0300 Subject: [PATCH 13/14] New sql version to tests --- tests/config/database.sql | 140 +++++++++++++++++++------------------- 1 file changed, 70 insertions(+), 70 deletions(-) diff --git a/tests/config/database.sql b/tests/config/database.sql index 91f87380..dfb235aa 100644 --- a/tests/config/database.sql +++ b/tests/config/database.sql @@ -20,12 +20,12 @@ /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -# Dump of table wp_commentmeta +# Dump of table commentmeta # ------------------------------------------------------------ -DROP TABLE IF EXISTS `wp_commentmeta`; +DROP TABLE IF EXISTS `commentmeta`; -CREATE TABLE `wp_commentmeta` ( +CREATE TABLE `commentmeta` ( `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `comment_id` bigint(20) unsigned NOT NULL DEFAULT '0', `meta_key` varchar(255) DEFAULT NULL, @@ -37,12 +37,12 @@ CREATE TABLE `wp_commentmeta` ( -# Dump of table wp_comments +# Dump of table comments # ------------------------------------------------------------ -DROP TABLE IF EXISTS `wp_comments`; +DROP TABLE IF EXISTS `comments`; -CREATE TABLE `wp_comments` ( +CREATE TABLE `comments` ( `comment_ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `comment_post_ID` bigint(20) unsigned NOT NULL DEFAULT '0', `comment_author` tinytext NOT NULL, @@ -65,23 +65,23 @@ CREATE TABLE `wp_comments` ( KEY `comment_parent` (`comment_parent`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -LOCK TABLES `wp_comments` WRITE; -/*!40000 ALTER TABLE `wp_comments` DISABLE KEYS */; +LOCK TABLES `comments` WRITE; +/*!40000 ALTER TABLE `comments` DISABLE KEYS */; -INSERT INTO `wp_comments` (`comment_ID`, `comment_post_ID`, `comment_author`, `comment_author_email`, `comment_author_url`, `comment_author_IP`, `comment_date`, `comment_date_gmt`, `comment_content`, `comment_karma`, `comment_approved`, `comment_agent`, `comment_type`, `comment_parent`, `user_id`) +INSERT INTO `comments` (`comment_ID`, `comment_post_ID`, `comment_author`, `comment_author_email`, `comment_author_url`, `comment_author_IP`, `comment_date`, `comment_date_gmt`, `comment_content`, `comment_karma`, `comment_approved`, `comment_agent`, `comment_type`, `comment_parent`, `user_id`) VALUES (1,1,'Mr WordPress','','https://wordpress.org/','','2014-08-20 22:25:54','2014-08-20 22:25:54','Hi, this is a comment.\nTo delete a comment, just log in and view the post's comments. There you will have the option to edit or delete them.',0,'1','','',0,0), (2,1,'Test Author','','https://wordpress.org/','','2014-08-21 22:25:54','2014-08-21 22:25:54','test reply',0,'1','','',1,0); -/*!40000 ALTER TABLE `wp_comments` ENABLE KEYS */; +/*!40000 ALTER TABLE `comments` ENABLE KEYS */; UNLOCK TABLES; -# Dump of table wp_links +# Dump of table links # ------------------------------------------------------------ -DROP TABLE IF EXISTS `wp_links`; +DROP TABLE IF EXISTS `links`; -CREATE TABLE `wp_links` ( +CREATE TABLE `links` ( `link_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `link_url` varchar(255) NOT NULL DEFAULT '', `link_name` varchar(255) NOT NULL DEFAULT '', @@ -101,12 +101,12 @@ CREATE TABLE `wp_links` ( -# Dump of table wp_options +# Dump of table options # ------------------------------------------------------------ -DROP TABLE IF EXISTS `wp_options`; +DROP TABLE IF EXISTS `options`; -CREATE TABLE `wp_options` ( +CREATE TABLE `options` ( `option_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `option_name` varchar(64) NOT NULL DEFAULT '', `option_value` longtext NOT NULL, @@ -115,10 +115,10 @@ CREATE TABLE `wp_options` ( UNIQUE KEY `option_name` (`option_name`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -LOCK TABLES `wp_options` WRITE; -/*!40000 ALTER TABLE `wp_options` DISABLE KEYS */; +LOCK TABLES `options` WRITE; +/*!40000 ALTER TABLE `options` DISABLE KEYS */; -INSERT INTO `wp_options` (`option_id`, `option_name`, `option_value`, `autoload`) +INSERT INTO `options` (`option_id`, `option_name`, `option_value`, `autoload`) VALUES (1,'siteurl','http://localhost:8000','yes'), (2,'blogname','Wordpress Corcel','yes'), @@ -237,7 +237,7 @@ VALUES (119,'_transient_timeout_feed_867bd5c64f85878d03a060509cd2f92c','1408616777','no'), (120,'_transient_feed_867bd5c64f85878d03a060509cd2f92c','a:4:{s:5:\"child\";a:1:{s:0:\"\";a:1:{s:3:\"rss\";a:1:{i:0;a:6:{s:4:\"data\";s:3:\"\n\n\n\";s:7:\"attribs\";a:1:{s:0:\"\";a:1:{s:7:\"version\";s:3:\"2.0\";}}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:1:{s:0:\"\";a:1:{s:7:\"channel\";a:1:{i:0;a:6:{s:4:\"data\";s:61:\"\n \n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:1:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:16:\"WordPress Planet\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://planet.wordpress.org/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:8:\"language\";a:1:{i:0;a:5:{s:4:\"data\";s:2:\"en\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:47:\"WordPress Planet - http://planet.wordpress.org/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"item\";a:50:{i:0;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:77:\"WPTavern: How to Find All Posts Using a Specific File Attachment In WordPress\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=28834\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:172:\"http://wptavern.com/how-to-find-all-posts-using-a-specific-file-attachment?utm_source=rss&utm_medium=rss&utm_campaign=how-to-find-all-posts-using-a-specific-file-attachment\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:1724:\"

In a previous article, I mentioned how WordPress doesn’t provide information to locate posts where an attachment is in use. Comments to the article indicate others are interested in having this information as well. Find Posts Using Attachment created by Sergey Biryukov, is an easy to use plugin that solves this problem.

\n

The plugin adds a Used In column to the list view in the media library as well as to the attachment details modal. Not only can you find posts that use the image in a post or as a featured image, it works with custom post types too.

\n\"UsedUsed In Column\n

Although it’s primarily for images, it also tells you where other attachment types are used in posts such as mp3s or text files. If you need to change or update attachments in the media library but don’t remember where they’re being used, this plugin is invaluable.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 20 Aug 2014 21:22:12 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Jeff Chandler\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:1;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:57:\"WPTavern: Akismet Account Dashboard Gets a Major Overhaul\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=28804\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:158:\"http://wptavern.com/akismet-account-dashboard-gets-a-major-overhaul?utm_source=rss&utm_medium=rss&utm_campaign=akismet-account-dashboard-gets-a-major-overhaul\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:2902:\"

Akismet announced a redesign and complete update of the account dashboard today. Finding out what’s going on with your Akismet account is no longer a cryptic process thanks to the new additions to the dashboard. It now includes helpful stats and a full listing of all your active sites.

\n

\"akismet-dashboard\"

\n

Each active account links to a full page of stats that illustrate how effective Akismet has been at deterring spam recently and historically. It’s also a great reminder of how much time Akismet is saving you every day.

\n

\"akismet-stats\"

\n

The active site listing displays each site that has used your API key within the past 90 days, enabling you to monitor exactly where and how your Akismet account is being used. This will better help users to comply with Akismet’s terms of service agreement, which states:

\n

If you obtain or purchase an API Key, you are responsible for maintaining the security of your API Key, and you are fully responsible for all activities that occur under the account and any other actions taken in connection with your API Key.

\n

If you scan your list and find that you have client sites and others for which you’re not directly responsible, you might consider getting in touch with them to sign up for their own Akismet accounts.

\n

Billing information for premium users has been streamlined to its own section with quick access to transaction history and receipts.

\n

In the past it was difficult to know where to go for Akismet support. The new support section adds links to key documentation for common questions, the comprehensive knowledgebase, and the Happiness Engineers support team.

\n

The new user-friendly dashboard is a welcome update to Akismet, which has traditionally gone the most minimal route for getting users connected to the service. Sign in to Akismet with your WordPress.com account to check out all the updates.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 20 Aug 2014 18:57:47 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Sarah Gooding\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:2;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:41:\"Akismet: Welcome To Your New Account Page\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"http://blog.akismet.com/?p=1642\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:68:\"http://blog.akismet.com/2014/08/20/welcome-to-your-new-account-page/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:2432:\"

If you’ve logged in to your Akismet account within the past week or so, you’ve probably noticed quite a few changes. We’re happy to announce some updates to your account dashboard, which will make it easier to manage your Akismet subscription.

\n

The most significant update to the dashboard is an active site listing, which will display each site that has used your API key within the past 90 days. Each site is linked to its dedicated stats URL, which details specific usage. If you have numerous active sites, you can use the handy new search feature to quickly locate one of your URLs. This all makes it possible to know where and how your subscription is being used at any given time.

\n

\"New

\n

In addition to this new stats goodness, the billing information (for users with premium subscriptions) has been moved to a unified section where you can quickly access your transaction history and receipts. This greatly reduces the amount of scrolling that your old dashboard required.

\n

We’ve also added a new Support section with some links to a few popular support documents and an option to get in touch with our Happiness Engineers.

\n

Oh, and the whole thing has been given a fresh coat of paint, as well.

\n

So, log in and take a look. We hope you enjoy these changes and always welcome your feedback. If you notice any problems or have suggestions, please don’t hesitate to get in touch. And because we like to keep the goodies coming, look out for a forthcoming update to our stats pages!


\"\" \"\"\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 20 Aug 2014 17:00:41 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Anthony Bubel\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:3;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:73:\"WPTavern: Create and Manage SVG Spritemaps in the WordPress Media Library\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=28766\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:190:\"http://wptavern.com/create-and-manage-svg-spritemaps-in-the-wordpress-media-library?utm_source=rss&utm_medium=rss&utm_campaign=create-and-manage-svg-spritemaps-in-the-wordpress-media-library\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:4721:\"

If you try to upload an SVG in WordPress, you’ll discover that it doesn’t yet have native support for adding SVGs to the media library. However, it’s easy to add them to WordPress’ allowed mime types to remove the restriction via a plugin.

\n

Many users are eager to use SVGs, especially for logos, because of their many advantages over traditional graphics. SVGs can scale to any size without losing quality, which means they will look great on retina displays. They can also be easily styled via CSS to add multiple colors, gradients, filters, etc.

\n

SVG Spritemap is a relatively new plugin that allows you to upload SVGs to the media library. It also adds the ability to create and manage an SVG spritemap, which lets you display and manipulate the images separately while including them in one larger file to reduce HTTP requests.

\n

Once you install the plugin, you’ll find SVG Spritemap under the Media menu. You’ll see that you cannot create a spritemap until you upload a few SVGs.

\n

\"svg-spritemap\"

\n

The usage instructions outline the general workflow for using SVG Spritemaps:

\n
    \n
  1. Install and activate the WordPress plugin.
  2. \n
  3. Add SVG images through the Media Uploader.
  4. \n
  5. Select the SVGs for the spritemap in Settings > Media > SVG Spritemap.
  6. \n
\n

You can add SVGs to the medial library as your normally would and they will be displayed like any other file. I’ve added a handful from Flaticon.com as an example:

\n

\"add-svg\"

\n

Navigate back to SVG Spritemap and you’ll see all of your available SVGs. Click on the images you want to add to your new spritemap.

\n

\"create-svg-spritemap\"

\n

Click on “Update SVG Spritemap” to add your selections. Those files will now be listed as “In Use.” The defs.svg spritemap is automatically generated by the plugin.

\n

Below you will see the URL displayed for the SVG spritemap along with the estimated filesize, which represents the combined filesize of all the SVGs. It doesn’t factor in the gzip compression, so the live filesize is likely to be much smaller than the estimation.

\n

You can reference individual sprites by appending #: and the name of the sprite to this URL, i.e.:

\n
<svg><use xlink:href=\"http://www.test.dev/wp-content/plugins/svg-spritemap/defs.svg#:bunny\"></svg>
\n

You can now display your SVGs on the frontend and further customize them with CSS.

\n

\"svg-bunny\"

\n

SVG Browser Support

\n

Before using SVG Spritemap, you should be aware that IE8 does not support external SVG display, but all other major browsers are SVG-capable. This may or may not be important to you. Jonathan Neal, the plugin’s author, has created a way around this with his SVG for Everybody project, which adds special assistance to browsers to display external SVG spritemaps.

\n

If you want an easy way to add SVGs to WordPress and create your own SVG spritemap, this plugin gives you a nice interface for generating it automatically. After testing, I can confirm that it works as advertised. Download SVG Spritemap for free from WordPress.org.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 20 Aug 2014 16:09:25 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Sarah Gooding\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:4;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:89:\"WPTavern: WordPress Customizer Library Provides a Simpler Way to Work with the Customizer\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=28715\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:222:\"http://wptavern.com/wordpress-customizer-library-provides-a-simpler-way-to-work-with-the-customizer?utm_source=rss&utm_medium=rss&utm_campaign=wordpress-customizer-library-provides-a-simpler-way-to-work-with-the-customizer\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:3718:\"

\"customizer-library\"

\n

WordPress’ native customizer has evolved considerably since its early days when it when it was introduced for adding live previews to themes. WordPress 3.9 added widgets to the customizer and the 4.0 release is set to expand the role of the feature into other aspects of WordPress with support for a wider array of controls.

\n

Developers are eager to find new ways to harness the power of the customizer without getting caught up in writing a ton of code. Devin Price, co-owner of DevPress, is working on a new project to create a Customizer Library. The library is designed to abstract out some of the complexity of working with the customizer so that developers can easily add options by defining a simple array.

\n

Price describes the Customizer Library as “a collection of classes and functions that make it a bit easier to develop for the WordPress Customizer.” The library currently includes helper functions for Google fonts and inline styles, but he’s considering removing them into their own repositories in order to keep the project more focused for general use.

\n

The library can be included in a theme or plugin as a git submodule, according to the installation instructions. Price has built in only one custom control, for textarea, but he plans to add additional custom controls as the library matures. It currently supports the following options:

\n
    \n
  • Checkbox
  • \n
  • Select
  • \n
  • Radio
  • \n
  • Upload
  • \n
  • Color
  • \n
  • Textarea
  • \n
  • Select (Typography)
  • \n
\n

An example theme can be found in the Customizer Library Demo repository, which shows how to use the library to create options such as logo, primary and secondary colors, textareas, checkboxes, etc.

\n

The Customizer Library project is somewhat similar to the Kirki plugin, which aims to provide a framework for adding advanced controls. Although the projects are constructed differently, they both abstract the Customizer API to make it easier to add options. As the customizer evolves to become more powerful with more controls, libraries/frameworks like these provide an entry point for developers who want a quick way to build options.

\n

If you want to use the customizer in your projects but are having trouble getting a handle on it, the Customzer Library might be a reasonable starting place. Price is looking for feedback and suggestions as he continues to develop the library as a standalone project. You can help shape its future by joining the discussion on the post where he introduces the library.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 20 Aug 2014 00:37:12 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Sarah Gooding\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:5;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:84:\"WPTavern: Send to WordPress: Chrome Extension Exports Google Docs to WordPress Posts\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=28666\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:210:\"http://wptavern.com/send-to-wordpress-chrome-extension-exports-google-docs-to-wordpress-posts?utm_source=rss&utm_medium=rss&utm_campaign=send-to-wordpress-chrome-extension-exports-google-docs-to-wordpress-posts\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:4354:\"\"photophoto credit: davekellamcc\n

If you’re a Google chrome user, there are many free extensions out there that are useful for getting other applications to work with WordPress. Earlier this year we shared a collection of Chrome extensions for WordPress users, many of which are specifically tailored toward content creation.

\n

Send to WordPress is a handy new extension that recently landed in the Chrome web store. It allows you to export a Google Drive document to WordPress as a post, with all the formatting and images preserved.

\n

Once the extension is installed, you can create a new WordPress post from a Google document by right clicking one or more documents and selecting “Open with” -> “Send to WordPress.”

\n

\"send-to-wordpress\"

\n

On the next screen you’ll be asked to enter your WordPress site URL and login credentials. You have the option to send the post to save as a draft or to publish immediately. You can also elect to use your theme’s text styles and add images as attachments.

\n

\"wordpress-login\"

\n

Click “Create Post(s)” and your document will be automatically sent to your WordPress site. Once you’ve verified that it’s there, you can edit the post and make any further changes. You’ll find that any images included in your post(s) have been added to your media library.

\n

\"draft\"

\n

After testing the extension, I found that it adds some unnecessary classes and inline styles to the content that is sent over. This may be something that you will want to clean up, depending on how you formatted the document in Google Drive.

\n

Why Not Compose Directly in WordPress?

\n

Publishing via the Send to WordPress extension may seem counterintuitive at first. Why not just compose directly within WordPress? One advantage is that when Google Drive is online, you can work with others to collaborate on a post as a group and then have a convenient way to send your work over to WordPress.

\n

The main benefit of this extension is that it allows you to keep working, even when you cannot access your site. Google Drive can be enabled for working offline, which allows you to organize folders, view your files, and edit Google documents without an internet connection.

\n

If you’re on a long plane ride and the wi-fi isn’t working or you’re stuck somewhere without internet, you can continue to write posts, add images, links and formatting in Google Drive. The Send to WordPress extension lets you automatically send all of that work over to your WordPress site as soon as you have a connection again.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 19 Aug 2014 21:13:23 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Sarah Gooding\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:6;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:55:\"WPTavern: How to Easily Add Icons to Menus in WordPress\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=28664\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:154:\"http://wptavern.com/how-to-easily-add-icons-to-menus-in-wordpress?utm_source=rss&utm_medium=rss&utm_campaign=how-to-easily-add-icons-to-menus-in-wordpress\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:4899:\"

Have you ever found yourself wanting to spice up the navigation menus on your site by adding icons? Typically, you’d have to edit the CSS of a theme but thanks to a new plugin, you don’t have to. Menu Icons is a plugin for WordPress that makes it easy to add icons to menus without having to touch any code.

\n

Built With Simplicity In Mind

\n

Dzikri Aziz handles most of the development work and is responsible for the initial idea of the plugin. Aziz helped create the plugin because most of the other solutions involve editing CSS classes or other complicated measures. “Most of the existing plugins force you to assign the icons blindly, and make you enter some classes and/or markup into the menu items. This didn’t seem very user-friendly to me. Also, I wanted to get better at developing with the media library,” Aziz told the Tavern.

\n

Once Menu Icons is activated, browse to Appearance > Menus. You should notice a new meta box on the left hand side labeled Menu Icons Settings. From here, you can select which icon sets are available to choose from as well as configure the default placement settings of each icon.

\n\"TheThe new meta box on the left with the link to select an icon on the right\n

As you can see, four of the most popular icon fonts are available out of the box. The image option enables you to use the WordPress media library to upload an image or use one that’s already available. Although it’s not listed, Menu Icons supports Fontello Font packs thanks to Joshua Rountree. The Menu Icons FAQ contains information on how to install and select Fontello Icons.

\n

After clicking on the Select Icon link within the menu item, a modal window is displayed with icons to choose from.

\n\"PlentyPlenty Of Icons To Choose From\n

When an icon is selected, the right side of the model presents you with some options to alter its display. The global settings are used by default.

\n\"SettingsSettings To Alter The Display Of Icons\n

One of my favorite features is the ability to use icons from different packs. If a pack doesn’t have the icon you’re looking for, chances are, one of the other three does. It only took five minutes to find the right icons for my menus. Without modifying the default settings, this is what my menus looked like on the front end of the site.

\n\"TheThe End Result\n

The icons become part of the link, just like the text, and they blend in seamlessly. Can you tell which packs these icons belong to? If the icons don’t look like they’re aligned correctly, you’ll need to override the styles in the theme’s CSS file or use the Simple Custom CSS plugin to apply the correct style attributes. In most cases however, the icons should look fine in your theme.

\n

Simple Yet Effective

\n

Menu Icons is a great, effective plugin. I wish it existed five years ago when I really could have used it. It’s the easiest way I’ve come across to add icons to navigation menus in WordPress without having to edit CSS. If you know something easier, let us know in the comments. Also, how many of you plan on using this for client projects?

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 19 Aug 2014 19:57:28 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Jeff Chandler\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:7;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:52:\"Matt: Specialization is for Insects, and Developers?\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:21:\"http://ma.tt/?p=44020\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:66:\"http://ma.tt/2014/08/specialization-is-for-insects-and-developers/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:2269:\"

A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects.

\n

That’s from Robert Heinlein’s character Lazarus Long.

\n

Peter Merel coined this version for developers:

\n

A programmer should be able to fix a bug, market an application, maintain a legacy, lead a team, design an architecture, hack a kernel, schedule a project, craft a class, route a network, give a reference, take orders, give orders, use configuration management, prototype, apply patterns, innovate, write documentation, support users, create a cool web-site, email efficiently, resign smoothly. Specialization is for recruiters.

\n

When I read that it definitely reminds me of some of my favorite colleagues, and something I aspire to myself even though I’m very heavily balanced toward the “lead a team” part right now in my life.

\n

Even as technology is becoming more accessible, modern web development grows more complex. Some might look at that is discouraging, I prefer to think that no matter how far along you get you can still have a lifetime of learning ahead of you.

\n

For interesting debate on the above, check out the c2 wiki Specialization for Insects discussion (last edited March, 2012) and also the page that says “If specialization is for insects then I’d very much like to be a humble insect.” (Last edited November, 2005. I love digging around older parts of the internet.)

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 19 Aug 2014 16:02:56 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:14:\"Matt Mullenweg\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:8;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"Joseph: How VaultPress Works\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:32:\"https://josephscott.org/?p=10862\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:62:\"https://josephscott.org/archives/2014/08/how-vaultpress-works/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:519:\"

Mark has posted a few details on how VaultPress.com backups work. This should be especially helpful for those that have asked me about this in the past.

\n

If you don’t already have a VaultPress.com account you can get a free trial by first connecting your WordPress site to Jetpack.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 19 Aug 2014 14:24:19 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:12:\"Joseph Scott\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:9;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:109:\"WPTavern: Dependency Minification for WordPress: Automatically Concatenate and Minify Scripts and Stylesheets\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=27649\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:260:\"http://wptavern.com/dependency-minification-for-wordpress-automatically-concatenate-and-minify-scripts-and-stylesheets?utm_source=rss&utm_medium=rss&utm_campaign=dependency-minification-for-wordpress-automatically-concatenate-and-minify-scripts-and-stylesheets\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:5804:\"\"photophoto credit: PetitPlat – Stephanie Kilgastcc\n

If you’re obsessed with improving your site’s loading time then you’ve probably already looked into caching and server optimizations. Frontend optimization is often further down on the list but can have a tremendous effect on performance. One of the most common frontend optimization techniques is to concatenate and minify your resources, which reduces the number of requests as well as the file size of the resources requested.

\n

The process of “minifying” eliminates wasted space in the scripts and stylesheets, which makes them much smaller and able to load faster. Combining (“concatenating”) multiple scripts reduces the number of requests, allowing you to download more assets in parallel to speed things up.

\n

Dependency Minification is a plugin that will automatically concatenate and minify scripts and stylesheets for you. It’s a reincarnation and rewrite of the X-Team’s popular Optimize Scripts plugin, which is now officially retired.

\n

Dependency Minification grabs scripts and stylesheets that have been added via wp_enqueue_script and wp_enqueue_style and automatically concatenates and minifies them into logical groups using WP-Cron. When you first install it and visit the settings page, you’ll see a notice:

\n

There are no minified dependencies yet. Try browsing the site.

\n

After you browse the frontend (which activates WP-Cron) and then visit the settings page, you’ll see that the process of minifying and concatenating resources has begun:

\n

\"dependency-minification-settings\"

\n

How do you know it’s working? In addition to the information on the plugin’s settings page, you can view the source of your site. Minified and concatenated dependencies will appear in your code with /_minify/ in the path similar to this:

\n
<script type=\'text/javascript\' src=\'/_minify/wp_favico_js,wp_favicon_js,previewloader,pinterestRSSjs,yumprint-recipe-post,flexslider.df2e3e1be0c951f4cf3ea0932200f96c.314e77c0b7be97ba8913570dcc5ada67.js\'></script>
\n

Mouseover any group of dependencies on the settings page and you’ll see three options:

\n

\"script-options\"

\n
    \n
  • Expire – Expire this item to gracefully regenerate
  • \n
  • Purge – Purge item from cache (deletes immediately, not often recommended)
  • \n
  • View Minified – View minified dependencies in a new window
  • \n
\n

The minified sources are stored in the wp_options table, which means that no special filesystem access is required. The plugin also includes a filter to exclude dependencies that you don’t want to be minified. A few other important things to know about the plugin’s features and how they can be customized:

\n
    \n
  • Endpoint for minified requests is at /_minified, which can be configured.
  • \n
  • Dependencies hosted on other domains are excluded by default, but this behavior can be changed by filtering the default_exclude_remote_dependencies option via the dependency_minification_options filter, or on a case-by-case basis via the filter previously mentioned.
  • \n
  • Stale minified scripts and stylesheets remain until replaced by refreshed ones; this ensures that full-page caches which reference stale minified sources won’t result in any 404s.
  • \n
  • Transforms relatives paths in stylesheets (e.g. background-images) to absolute ones, so that they don’t 404.
  • \n
\n

WordPress super admins will be glad to know that Dependency Minification is also multisite-compatible. If you want to use it on a multisite network, the plugin’s instructions advise you to install and activate scribu‘s Proper Network Activation plugin before activating it network-wide.

\n

The Dependency Minification plugin is supported by a large group of experienced developers who continue to improve it. They have built a decent amount of flexibility into the plugin with several filters that allow you to control and tweak its default behavior. If you don’t need to modify how it works, the plugin is pretty much plug-and-play. It provides a quick and simple way to concatenate and minify resources on your site, without a ton of options to configure.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Mon, 18 Aug 2014 23:10:55 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Sarah Gooding\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:10;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:61:\"WPTavern: WPChat Relaunches as a Forum Dedicated to WordPress\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=28616\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:166:\"http://wptavern.com/wpchat-relaunches-as-a-forum-dedicated-to-wordpress?utm_source=rss&utm_medium=rss&utm_campaign=wpchat-relaunches-as-a-forum-dedicated-to-wordpress\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:4934:\"

A few years ago, Leland Fiegel created a site called WPChat. The site contained an iFrame with an embedded IRC client pointed to Freenode. It provided easy access to IRC where at anytime during the week, users could chat about WordPress. Here’s what the old site looked like.

\n\"WhatWhat The Old WPChat Used To Look Like\n

After being dormant for the past year or two, Fiegel has turned the site into a dedicated forum devoted to WordPress topics.

\n\"WPChatWPChat Running Discourse\n

The site is powered by Discourse, an open source, GPL licensed, discussion platform created by Jeff Atwood. In a post published on his personal site, Fiegel explains why he chose Discourse over other forum software such as bbPress, or phpBB.

\n

Discourse just has a more modern feel to it. The instant flow of discussions, the notification features, it just feels much more like a chatroom, rather than a more traditional piece of forum software.

\n

I felt it fit much more inline with the “brand” of WPChat, and just thought people would enjoy using it better.

\n

Over the weekend, I had the privilege of being one of the first members to the forum. It loads quick and is intuitive to use. The site works great on mobile devices. I’m able to administer, respond to, and create threads easily from my phone.

\n

Discourse Is a Breath Of Fresh Air

\n

Discourse is a fresh take on using forums for community discussion. One of the unique attributes it has is a trust system. As members spend more time replying to and creating more threads, their trust level increases. Higher trust levels provide more capabilities to the user, allowing them to take on a larger role of moderating the forum. I find this to be an interesting approach and wonder how well it does on large, established forums.

\n

Discourse 1.0 has yet to materialize but according to the blog, it’s right around the corner. Since it’s only a year old, there’s not much in the way of a third-party ecosystem. If you plan to install Discourse on your own server, be aware of the minimum requirements. As Fiegel mentions in his post, it’s not as easy to install as WordPress.

\n

A Forum Outside Of WordPress.org

\n

While there is a Google+ group devoted to WordPress and other watering holes, the closest one that feels like a forum to me is the Advanced WordPress user group on Facebook. However, Facebook groups in general lack significant features that make them useful such as threads and an easy way to locate previous discussions. You’re also tied to Facebook in terms of what you can do with the data.

\n

Ever since the WP Tavern forum disappeared, I’ve been looking for somewhere on the web to hang out and chat about WordPress. Not everything is deserving of a blog post but may be worthy of a discussion. WPChat is attempting to fill a void I think is missing in the WordPress community, a well-managed, diversified forum, devoted to WordPress, outside of what is already available on WordPress.org.

\n

Membership to WPChat is free and at the very least, gives you an opportunity to try out Discourse from a user perspective. You’ll be able to find me on WPChat via the username Jeffro.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Mon, 18 Aug 2014 23:02:33 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Jeff Chandler\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:11;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:57:\"WPTavern: The Problem With Image Attachments In WordPress\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=28598\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:158:\"http://wptavern.com/the-problem-with-image-attachments-in-wordpress?utm_source=rss&utm_medium=rss&utm_campaign=the-problem-with-image-attachments-in-wordpress\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:4783:\"

Something I’ve wanted to see in WordPress for a long time is the ability to determine which posts an image is being used on. WordPress 4.0 is expected to ship by the end of August and contains two subtle changes to image data in the media library. You’ll be able to view the author who uploaded the image and the post parent ID it’s attached to.

\n\"UploadedUploaded By and Uploaded To Information\n

I find this information to be useful, especially for multi-author websites. Although you can view the parent post ID the image is attached to, you can’t locate each post the image is used on. It’s important to note the difference between an image attached to a post and using an image already available in the media library.

\n

Why Knowing Where An Image Is Used Comes In Handy

\n

Let’s say I use a featured image for a post and it’s the featured image for several other posts. If I want to change the featured image in one post and have it change in every other post, I can’t. I also can’t change the image for specific posts automatically, it’s either all or nothing. I can’t determine which posts are using the image because WordPress only sees it being used on the parent post. This is due to the attachment relationship.

\n

In other words, the first post the image is attached to is the only information WordPress has on where it’s being used. I could browse to every post and manually change it but my memory isn’t that good and it’s a tedious process.

\n

The History Behind The Dilemma

\n

In trying to figure out why this is, Justin Tadlock pointed out two Trac tickets, 10657 and 14513. Both contain lengthy, technical discussions, on how to add support for many-to-many relationships between posts and attachments in WordPress. Within the discussions, the Posts 2 Posts plugin is commonly referred to as a top-notch plugin that offers this functionality.

\n

Before the Community Summit in October of 2012, Andrew Nacin and a host of other WordPress developers came together to discuss the subject in detail. The ideas brought forth from that conversation are available on the Make.WordPress.com blog and is a potential roadmap for taxonomy meta and post relationships in WordPress.

\n

It’s Possible But Not Worth The Hassle

\n

WordPress automatically renames files if it detects the same name being used in the media library. This means you can’t upload a new image with the same file name to replace it. An alternative method is to use FTP to locate the original file and overwrite it, keeping the same name. The image will change in all posts using it, regardless of the attachment details. You’ll also need to overwrite any images that were resized automatically by WordPress or else they’ll show up instead of the new ones.

\n

After performing all sorts of tests in my local environment for trying to change one image across multiple posts, I’ve decided it’s too much of a hassle. Not being able to manage these relationships in WordPress doesn’t make sense. Ideally, I’d like to be able to determine which posts are using an image and replace that image across all of those posts at the same time. I also wouldn’t mind the flexibility to change an image for certain posts while leaving the others alone.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Mon, 18 Aug 2014 22:15:08 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Jeff Chandler\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:12;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:85:\"WPTavern: _s_backbone: A WordPress Starter Theme Based on Underscores and Backbone.js\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=28545\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:212:\"http://wptavern.com/_s_backbone-a-wordpress-starter-theme-based-on-underscores-and-backbone-js?utm_source=rss&utm_medium=rss&utm_campaign=_s_backbone-a-wordpress-starter-theme-based-on-underscores-and-backbone-js\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:7139:\"

The Underscores WordPress starter theme has seen a flurry of activity in recent days, adding support for Sass and automated testing with Travis CI. The theme has been forked more than 1300 times on GitHub with many interesting variations created to support various theme features and frameworks.

\n

One fork in particular is getting WordPress theme developers excited about the possibility of bringing in new Javascript-powered features. _s_backbone is a new theme based off of Underscores that incorporates the WordPress REST API Backbone.js client.

\n

\"_s_backbone\"

\n

Taylor Lovett, Director of Web Engineering at @10up, created the theme as a proof of concept but also hopes that it will become a useful tool for theme developers who want to get started using the WP REST API. The API is slated for inclusion in WordPress 4.1.

\n

Advantages of Using Backbone for Infinite Scroll

\n

\"_s_backbone_theme\"

\n

So how is _s_backbone different from vanilla Underscores? The major difference here is that the loops have infinite scroll built in using a “more” button, a feature powered by the Backbone client which grabs posts on the fly without reloading the page. This provides several advantages. “On the web today, people expect reactive, dynamic web applications. I think everyone can agree the web is shifting to a more JavaScript reliant place,” Lovett told the Tavern. “Powering your loops using JSON REST API’s Backbone client is the easiest way for you to add and customize infinite scroll to your website.”

\n

Adding infinite scroll to a theme using other methods can be a frustrating, complicated experience. “There are a few advantages to building infinite scroll with the JSON REST API as opposed to something else,” Lovett said. “The JSON REST API will be merged into WordPress so your code will always be backwards compatible. With the JSON REST API and Backbone client, you don’t have to build your own endpoints which is time consuming. Also, the JSON REST API is, well, RESTful making it extremely easy to use.”

\n

I asked Lovett how _s_backbone’s implementation of infinite scrolling differs from Jetpack’s module. Is this feature something that functions better as part of a theme vs. a plugin?

\n

“I’ve worked extensively with Jetpack’s Infinite Scroll module. In fact, _s_backbone takes some code from it,” he said. “I think valid arguments can be presented for including infinite scroll in either a plugin or a theme. However, I think with the advent of the JSON REST API and Backbone client, adding infinite scroll to the theme makes more sense.”

\n

Although the theme’s main attraction right now is a new way to power infinite scrolling, Lovett hopes that _s_backbone can provide a starting place for developers to create their own Backbone-powered features.

\n

_s_backbone is a starter theme, not a parent theme. Decisions are left to the theme developer. If the developer feels like it, they can rip out infinite scroll completely or put it in a plugin. The goal is to provide the theme developer with a good base with which to start and let them build from there.

\n

In the future, Lovett plans to add post format support to the theme, as it’s currently missing that feature. “I’m hoping to get some feedback on the starter theme to best assess what would be most useful to developers,” he said.

\n

The WP REST API Opens Up New Opportunities for Theme and Plugin Developers

\n

Lovett will be speaking this weekend at WordCamp Boston on the WP JSON REST API where he hopes to use the _s_backbone theme as an example. His largest contribution to the WP REST API project has been the creation of the Backbone.js client. He also contributes on the PHP side, assisting with post meta, comments, and revision endpoints.

\n

“I’m very excited about the implications of the JSON REST API in the backend,” Taylor commented on the future of the project. “I believe the JSON REST API will be incredibly useful internally, especially cross-site (in multisite). I’ve written many endpoints to retrieve different custom post types for backend features that could be dramatically simplified with the JSON REST API. Also, I think it will simplify the code powering the media library.”

\n

Lovett hopes to introduce developers to all the possibilities of using the API while at WordCamp Boston. “First and foremost, I want to show people why the API is useful and how you can use it,” he said. “I want to inspire plugin and theme developers to build amazing things with the API. I believe a RESTful API within WordPress opens up a lot of doors. I’d also like to show people how you can grab data from other websites that use the API instead of parsing feeds.”

\n

If you’re familiar with Underscores, then Lovett’s new _s_backbone theme is a nice starting point for learning more about using the API in a theme. Feel free to leave feedback on the project regarding additional features you’d like to see powered by Backbone. If you’re interested in contributing to the WP API project, the Backbone.js client, or elsewhere, Lovett encourages you to get involved, as the team is always looking for more help.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Mon, 18 Aug 2014 17:57:39 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Sarah Gooding\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:13;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:29:\"Matt: Commercial Whaling Ship\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:21:\"http://ma.tt/?p=44017\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:44:\"http://ma.tt/2014/08/commercial-whalingship/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:347:\"

The Time I Spent On A Commercial Whaling Ship Totally Changed My Perspective On The World — I know the title sounds baity but this is the best writing I’ve read online in a while, almost like it’s from a different time.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Mon, 18 Aug 2014 15:39:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:14:\"Matt Mullenweg\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:14;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:46:\"Akismet: Akismet 3.0.2 for WordPress Available\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"http://blog.akismet.com/?p=1640\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:73:\"http://blog.akismet.com/2014/08/18/akismet-3-0-2-for-wordpress-available/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:931:\"

Version 3.0.2 of the Akismet plugin for WordPress is now available.

\n

In version 3.0.2, we’ve improved performance and fixed a bug that could have negatively affected Akismet’s ability to determine whether a comment is spam.

\n

To upgrade, visit the Updates page of your WordPress dashboard and follow the instructions. If you need to download the plugin zip file directly, links to all versions are available in the WordPress plugins directory.


\"\" \"\"\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Mon, 18 Aug 2014 01:45:48 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:17:\"Christopher Finke\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:15;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Matt: Internet’s Original Sin\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:21:\"http://ma.tt/?p=44015\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:44:\"http://ma.tt/2014/08/internets-original-sin/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:282:\"

Ethan Zuckerman writes for the Atlantic on The Internet’s Original Sin, advertising.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Sun, 17 Aug 2014 14:30:21 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:14:\"Matt Mullenweg\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:16;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:27:\"Matt: Humans Need Not Apply\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:21:\"http://ma.tt/?p=44009\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"http://ma.tt/2014/08/humans-need-not-apply/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:42:\"

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Sat, 16 Aug 2014 17:42:05 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:14:\"Matt Mullenweg\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:17;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:66:\"WPTavern: Time To Move On From The “Is WordPress A CMS” Debate\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=28493\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:164:\"http://wptavern.com/time-to-move-on-from-the-is-wordpress-a-cms-debate?utm_source=rss&utm_medium=rss&utm_campaign=time-to-move-on-from-the-is-wordpress-a-cms-debate\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:3023:\"\"WordPressphoto credit: Cesar Maiacc\n

In the realm of WordPress, there is a particular debate that has been going on for years on whether WordPress is a CMS or not. CMSCritic has a great article by Kaya Ismail, that explains why WordPress is a CMS (Whether You Like it or Not). It’s one of the most refreshing perspectives I’ve read on the subject. The definition of a Content Management System is a web application designed to make it easy for non-technical users to add, edit and manage a website. WordPress fits that definition rather well and in many respects, excels at it. The problem as Ismail explains, is that the acronym has become muddied over the years.

\n

The issue arises when the stripped down, true meaning of “CMS” is blown up with unnecessary jargon. In reality, those definitions hold very little weight, other than when they describe added marketing or administrative extras. The fact of the matter is, WordPress fits the definition of a CMS perfectly.

\n

WordPress has grown up to be far more than just a blogging tool. It’s used to power apps, run large content heavy websites, and e-commerce. The reputation that it’s just a blogging tool and not a CMS is false.

\n

If you’re curious on how to use WordPress as a CMS, read this guide published by Ozh Richards that contains a simple four step process. It’s a process nearly all WordPress users go through everyday.

\n

It isn’t particularly amazing in any niche other than blogging, and it sacrifices being a powerhouse when it comes to things like digital asset management for the sake of simplicity. Yet at the same time, WordPress is a content management system, and a good one at that.

\n

So, maybe it’s time everybody got over it.

\n

Ismail sums it up rather well. I think it’s time to kick this debate to the curb.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 15 Aug 2014 20:38:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Jeff Chandler\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:18;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:79:\"WPTavern: Under the Hood of Semplice: A New Portfolio System Based on WordPress\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=27810\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:200:\"http://wptavern.com/under-the-hood-of-semplice-a-new-portfolio-system-based-on-wordpress?utm_source=rss&utm_medium=rss&utm_campaign=under-the-hood-of-semplice-a-new-portfolio-system-based-on-wordpress\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:7120:\"

Semplice has soft-launched its new WordPress-powered portfolio system. The commercial project popped up on our radar after debuting its extraordinary implementation of the WordPress content editor. Founded by German designers Michael Schmidt and Tobias van Schneider, Semplice is breaking onto the scene with high impact designs and its own radically simplified content editor.

\n

\"semplice\"

\n

“Semplice is and was built based on our own needs to create beautiful case studies and branded pages, mainly for designer and artist portfolios,” Van Schneider told the Tavern. “Our goal is to create a completely new high quality experience on top of WordPress, something you haven’t seen before,” he said. So far they appear to be achieving exactly that. Example portfolios built with Semplice are nothing less than stunning.

\n

\"semplice_adam\"

\n

A Unique Content Editor

\n

Semplice incorporates its own visual content editor which allows users to create unique branded pages or extensive case studies for their projects, without a single line of code. “We aim to create a flexible system, not a template,” Van Schneider said. “With Semplice you start mostly with a white canvas, not a template or theme where you just fill in the blanks.” Every project is 100% responsive and the content editor is completely tailored to creating a portfolio.

\n

\"semplice-content-editor\"

\n

So what’s under the hood?

\n

As beautiful as the front-end results are, we were most curious about what’s under the hood and assumed it was based on custom post types. On the contrary, the Semplice crew has taken a different route to create this unique editing experience.

\n

“For the basic theme options we use Advanced Custom Fields from Elliot Condon,” Van Schneider said. “The Content Editor itself is a combination of a Javascript frontend that uses the WordPress Ajax functions to communicate with the PHP backend.

\n

“As we worked on different Semplice iterations we quickly learned that we need something more than just Custom Post Types, especially since the performance suffered a lot in the beginning,” he explained. The Semplice content editor is optional and can be activated when creating new pages in WordPress. It includes a live preview as you edit on the frontend, as you can see in the video example below.

\n

\n

“What you build is exactly what you get,” he said. “This allows you to create very flexible editorial layouts for designers or artists who want to present their work in the best light possible.”

\n

Semplice also allows users the ability to brand every page with a unique visual look. Instead of having pages follow a set template, elements such as background color, navigation, and typography can be customized for each.

\n

The regular WordPress admin is still in play, for example, when a user adds new work. It starts off in the backend with branding and image options.

\n

\"add-new-work\"

\n

One unique feature of Semplice is the ability to easily add a new custom fontset to WordPress using the web service of your choice. This is especially important for designers who require unique fonts for presenting their work.

\n

\"custom-fontset\"

\n

Semplice is geared toward both experienced WordPress users, as well as those who are totally new to the platform. “Yes, we do aim for people who are familiar with WordPress since they will be able to take Semplice even further than what we offer,” Van Schneider said. “But with our Semplice Content Editor we even aim at people who don’t have that much experience with WordPress itself since you don’t really need it.”

\n

Licensing, Pricing, and Support

\n

Introductory Semplice pricing for a single domain is $69 and $299 for an agency. Semplice will be launching without offering customer support and is unusual in that it doesn’t offer any refunds. Support is limited to the first seven days after purchase. The team will assist with anything related to the default Semplice features and is currently working on establishing a pool of video tutorials for documentation.

\n

While the Semplice team cannot yet offer full product support, they are committed to delivering critical free updates to existing customers. The software is licensed under the GPL. Although Semplice hasn’t launched yet, early adopters can purchase the software now for a reduced price.

\n

While the Semplice content editor appeals to new WordPress users, they will still need to overcome the hurdle of installing and setting up a WordPress site on their own domains. Even with 1-click installers, the process can be more difficult than you might imagine for designers and artists with no WordPress experience. Without a fully hosted Semplice platform, the software is going to have to appeal to seasoned WordPress users who appreciate its unique take on building a fullscreen branded portfolio. Do you think Semplice can win out over other theme and plugin-based options?

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 15 Aug 2014 20:05:51 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Sarah Gooding\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:19;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:64:\"WPTavern: A Survival Guide To WordCamps For First Time Attendees\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=28486\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:172:\"http://wptavern.com/a-survival-guide-to-wordcamps-for-first-time-attendees?utm_source=rss&utm_medium=rss&utm_campaign=a-survival-guide-to-wordcamps-for-first-time-attendees\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:2348:\"\"Survivalphoto credit: Steve Rhodescc\n

WordCamps are excellent opportunities to learn WordPress and have of face-to-face interaction with a lot of different people. They can also be exhausting and possibly stressful for first timers. Carrie Dils has an awesome WordCamp Survival Guide filled with tips and information on how to get the most out of these events.

\n

Tip number five (don’t sit by yourself at lunch) routinely happens to me at WordCamps.

\n

When the last morning session breaks, there will be a mad dash to the lunch line (did someone say “food?!”). You’ll grab a sack lunch lovingly provided by some volunteer and then you’ll stand there, possibly awkward and not sure where to go. It’s lunch on the first day at a new school all over again.

\n

Try this: Head over to any table with open spots and simply ask to sit down. Unless you just really need that lunch break for personal time, don’t miss an opportunity to meet folks over lunch!

\n

I struggle with introducing myself to people I’ve never met before. At WordCamps, I’m generally extroverted but I’ve noticed at larger camps, I become introverted. It’s a personality thing I’ve been fighting with for the past few years with mild success. I keep telling myself that I’m going to introduce myself to everyone I see at a WordCamp but it never works out that way. I end up finding a group of people I’m familiar with and stick with them. Does anyone else struggle with introversion at WordCamps?

\n

The survival guide is filled with great information but I think the most important point is the last and that’s to have fun.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 15 Aug 2014 19:00:40 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Jeff Chandler\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:20;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:92:\"WPTavern: WPWeekly Episode 158 – Interview With Pippin Willamson Of Easy Digital Downloads\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:44:\"http://wptavern.com?p=28482&preview_id=28482\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:220:\"http://wptavern.com/wpweekly-episode-158-interview-with-pippin-willamson-of-easy-digital-downloads?utm_source=rss&utm_medium=rss&utm_campaign=wpweekly-episode-158-interview-with-pippin-willamson-of-easy-digital-downloads\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:3212:\"

Pippin Williamson of Easy Digital Downloads joined Marcus Couch and I to discuss a variety of topics. Williamson tells his story of how he got involved with WordPress. Later in the show, we discuss what it’s like to be a remote worker. Williamson tells us which tools he uses for project management and how important it is for him to have a disciplined routine.

\n

As a volunteer moderator of the WordPress.org plugin directory, he’s seen his fair share of plugin submissions. He tells us which types of plugins are automatically rejected and what it’s like being a gatekeeper for the plugin directory.

\n

Stories Discussed:

\n

WP Site Care Acquires Audit WP
\nNew WordPress Plugin Spell Checks Post Titles Before Publishing

\n

Plugins Picked By Marcus:

\n

HTML5 Slideshow Presentations – With this plugin, you’ll be able to create a presentation in no time using WordPress’ familiar built-in toolset and the best part is, you won’t need to upload to slideshare when you’re done! You host your own presentations allowing you to share or present them at anytime.

\n

Sidebar Automizer – This little plugin will remove the last widget or widgets from the sidebar if the content area height is smaller than the height of the sidebar area.

\n

Update from Bottom – This plug shows two extra buttons (Scroll to top and Publish/Update) in the bottom of the screen when a user scrolls near the bottom of the site. Suitable for posts and pages with a lot of meta boxes or when edit.php just tends to get very long.

\n

WPWeekly Meta:

\n

Next Episode: Wednesday, August 20th 9:30 P.M. Eastern

\n

Subscribe To WPWeekly Via Itunes: Click here to subscribe

\n

Subscribe To WPWeekly Via RSS: Click here to subscribe

\n

Subscribe To WPWeekly Via Stitcher Radio: Click here to subscribe

\n

Listen To Episode #158:
\n

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 15 Aug 2014 18:07:30 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Jeff Chandler\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:21;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Matt: SmartThings & Samsung\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:21:\"http://ma.tt/?p=44005\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:41:\"http://ma.tt/2014/08/smartthings-samsung/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:1419:\"

SmartThings announced (on their WP-powered blog) that they’re joining forces with Samsung to continue working on their mission of becoming an operating system for your home. I’m both an investor and a fan of the company, which I even let take over my home in SF earlier this year for CNN. As a tinkerer most of what I do with SmartThings so far is relatively basic, I feel like it’s still the very early days of the platform and what’s going to come down the line. Samsung makes so much technology (and appliances, and TVs, and…) I can’t wait to see how they open it up and connect. I also wanted to take this opportunity to congratulate other Audrey companies Divide which joined Google and Creative Market which joined Autodesk earlier in 2014. I wasn’t as good about blogging before and didn’t get a chance to publicly congratulate those teams.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 15 Aug 2014 13:49:35 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:14:\"Matt Mullenweg\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:22;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:82:\"WPTavern: Automatically Tweet an Announcement for WordPress Plugin Version Updates\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=28459\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:208:\"http://wptavern.com/automatically-tweet-an-announcement-for-wordpress-plugin-version-updates?utm_source=rss&utm_medium=rss&utm_campaign=automatically-tweet-an-announcement-for-wordpress-plugin-version-updates\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:2517:\"\"photophoto credit: MACSwritercc\n

Here’s a quick tip for WordPress.org plugin authors and users, courtesy of Paul de Wouters: With the help of a task automation service like Zapier or IFTTT, you can automatically send out a tweet every time an updated version of your plugin is available. Simply set up an RSS -> Twitter action, like this one with Zapier:

\n

\"rss-tweet\"

\n

Users of IFTTT can do the same by creating an RSS to Twitter recipe. You’ll want to use the development log feed on the developers tab of the plugin page. Connecting RSS to Twitter via a service will automate the little tasks involved in promoting your plugin and keeping users up-to-date.

\n

Get Notified When a Plugin is Updated

\n

\"rss-to-email\"

\n

Plugin users can also harness the same feed URL to send themselves updates via email. Let’s say you’ve got a few specific plugins that you are watching intently for an update. Perhaps you’ve notified the plugin author of a bug and are waiting for a fix or a new feature that’s in development. Instead of checking your site or the plugin’s page on WordPress.org for updates, you can set up an RSS to Email automated task to pull from the plugin’s development log feed and shoot a notice to your inbox.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 15 Aug 2014 05:14:36 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Sarah Gooding\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:23;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:30:\"Dev Blog: WordPress 4.0 Beta 4\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:33:\"http://wordpress.org/news/?p=3280\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:55:\"http://wordpress.org/news/2014/08/wordpress-4-0-beta-4/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:1990:\"

The fourth and likely final beta for WordPress 4.0 is now available. We’ve made more than 250 changes in the past month, including:

\n
    \n
  • Further improvements to the editor scrolling experience, especially when it comes to the second column of boxes.
  • \n
  • Better handling of small screens in the media library modals.
  • \n
  • A separate bulk selection mode for the media library grid view.
  • \n
  • Improvements to the installation language selector.
  • \n
  • Visual tweaks to plugin details and customizer panels.
  • \n
\n

We need your help. We’re still aiming for a release this month, which means the next week will be critical for identifying and squashing bugs. If you’re just joining us, please see the Beta 1 announcement post for what to look out for.

\n

If you think you’ve found a bug, you can post to the Alpha/Beta area in the support forums, where friendly moderators are standing by. Plugin developers, if you haven’t tested WordPress 4.0 yet, now is the time — and be sure to update the “tested up to” version for your plugins so they’re listed as compatible with 4.0.

\n

This software is still in development, so we don’t recommend you run it on a production site. Consider setting up a test site just to play with the new version. To test WordPress 4.0, try the WordPress Beta Tester plugin (you’ll want “bleeding edge nightlies”). Or you can download the beta here (zip).

\n

We are working hard
\nTo finish up 4.0
\n
Will you help us too?

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 15 Aug 2014 05:06:19 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:15:\"Helen Hou-Sandi\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:24;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:72:\"WPTavern: Clear Tranquil: A Free Minimalist WordPress Theme for Bloggers\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=28368\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:186:\"http://wptavern.com/clear-tranquil-a-free-minimalist-wordpress-theme-for-bloggers?utm_source=rss&utm_medium=rss&utm_campaign=clear-tranquil-a-free-minimalist-wordpress-theme-for-bloggers\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:2956:\"

Clear Tranquil is one of the cleanest, most elegant blogging themes to hit WordPress.org in recent days. The theme was created by Woo Themes designer James Koster as a child theme for his responsive Highwind parent theme.

\n

Clear Tranquil lives up to its name, inspiring a light, peaceful reading experience that is clutter-free. The design puts your content in focus.

\n

\"clear-tranquil\"

\n

Koster gives meticulous attention to typography and highlights the first character of each post with elegant block letter styles. The theme includes a sticky, understated top navigation menu (optional), and zero widget areas. That’s right, Clear Tranquil is a completely widget-free zone.

\n

\"single-post\"

\n

The theme includes a handful of customization options built into WordPress’ native customizer. You can personalize it with a custom header, background, and your own color selections for text, links, and backgrounds.

\n

\"clear-tranquil-customizer\"

\n

Clear Tranquil includes no additional features, because everything has been intentionally stripped back to keep things simple. Koster hasn’t set up a live demo of the theme. Ordinarily, the WordPress.org demo gives an unrealistic representation of what a theme will look like. However, in this case, it’s fairly accurate.

\n

One of the things that I love about the WordPress theme installation process is that it will automatically install the parent theme for a child theme, if you don’t already have it installed. In this scenario, if you install Clear Tranquil without Highwind already in place, it will be automatically downloaded for you.

\n

If your blog has gotten bloated with widgets and is in need of a minimalist makeover, Clear Tranquil might be just the ticket. Download it for free from the WordPress Themes Directory.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Thu, 14 Aug 2014 23:04:24 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Sarah Gooding\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:25;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:71:\"WPTavern: Foster Me: A WordPress Plugin to Help Shelter Animals in Need\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=28267\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:184:\"http://wptavern.com/foster-me-a-wordpress-plugin-to-help-shelter-animals-in-need?utm_source=rss&utm_medium=rss&utm_campaign=foster-me-a-wordpress-plugin-to-help-shelter-animals-in-need\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:5833:\"\"photophoto credit: puck90cc\n

Everybody knows that animals need homes. There are far more pets available for adoption than there are people lining up to adopt them. Call your local animal shelter and they’ll probably tell you that they’re at or over capacity. That’s where foster homes can help to provide quality care for animals in the interim, until they find their forever homes.

\n

Foster Me is a new WordPress plugin designed to help rescues and shelters make available pets more visible and easier to search. It was created by Stephanie Chow, a front-end developer and animal advocate located in Asheville, NC. Her Lending a Paw site features open source plugins and graphics for animal rescue organizations.

\n

Foster Me makes it easy to list and manage animals in WordPress where they can be searched with advanced pet-specific filters, such as age, type, gender, temperament, special needs, etc.

\n

\"foster-me\"

\n

When a visitor clicks on an available pet, the listing launches in a modal window. Individual pet listings display a full description, a slider with multiple photographs, and any applicable pet categories.

\n

\"pet-listing\"

\n

The plugin also makes it easy to list fostering information and to post your foster application. Chow has made every effort to make Foster Me a user-friendly plugin for rescues and shelters that may not have a WordPress expert on staff. The settings page allows you to easily customize the color and appearance of the header, pet options, pet grid and modal window.

\n

\"foster-me-settings\"

\n

Foster Me also includes an image widget for showcasing foster pets as well as a Recently Added widget to display new additions.

\n

\"foster-me-widget\"

\n

The plugin adds a whole suite of pet listing features that are general enough to be used in any kind of shelter or rescue website:

\n
    \n
  • Filterable – filter by Type, Age, Size, Gender, Temperament, and Special Needs
  • \n
  • Searchable – list is narrowed with every letter you type into search bar
  • \n
  • Click On Any Pet – to view more information and photos
  • \n
  • List Your Fostering Info – show how it works what to expect when you foster
  • \n
  • Colors – are completely customizable to match your brand
  • \n
  • Image Widget – place in sidebar to display a linkable, rotating image of foster pets
  • \n
  • Recently Added Widget – place in sidebar to display your most recently added fosters
  • \n
\n

Check out a live demo of Foster Me to test out the pet searching and filtering capabilities.

\n

Chow’s first plugin, Petfinder: Search and Rescue, is very similar to her latest release, except it requires the animals to be listed on Petfinder. If you already have your shelter or rescue pets listed on Petfinder, then this alternative will be a better option for automatically pulling in your existing listings.

\n

Saving Animals with WordPress

\n

The Foster Me plugin is an awesome open source tool that any shelter or rescue can use for free in combination with an existing WordPress site. When it comes to helping animals find their forever homes, open source software may not be the first thing that comes to mind, but Stephanie Chow is knocking it out of the park with her user-friendly tools designed to serve people who are rescuing creatures in need. Open source tools are more accessible to shelters and rescues that are spending every last dime to help animals find homes. If you have WordPress skills and are able to hook up a shelter with a website, then the Foster Me plugin will put you well on your way.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Thu, 14 Aug 2014 20:57:39 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Sarah Gooding\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:26;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:69:\"WPTavern: WebDevStudios Names Dre Armeda Vice President of Operations\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=28328\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:182:\"http://wptavern.com/webdevstudios-names-dre-armeda-vice-president-of-operations?utm_source=rss&utm_medium=rss&utm_campaign=webdevstudios-names-dre-armeda-vice-president-of-operations\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:6086:\"\"DreDre Armeda and Brad Williams Join Forces\n

In the time Dre Armeda spent with Sucuri, he turned a two-person part-time hobby into a multi-million dollar, 30+ employee company. When Armeda left the company he helped found, he didn’t provide any hints as to where he was going.

\n

Three months after leaving Sucuri, Armeda has been named the Vice President of Operations for WebDevStudios. Brad Williams, co-owner of WebDevStudios and Armeda were kind enough to answer a few questions I had regarding the hire.

\n

Interview With Dre Armeda and Brad Williams

\n

What does the Vice President of Operations for WebDevStudios do?

\n

Brad Williams – The Vice President of Operations is a new role at WDS and our first Executive position outside of the original Partners. WDS has been growing quite a bit this year and we knew it was time to start expanding the leadership team. Dre brings a wealth of knowledge and a ton of experience to WDS, specifically around building a very successful distributed company. Some of the primary responsibilities for Dre include business development, improving operational efficiency, marketing, and even sales. Roles at WDS are always evolving, so I certainly expect Dre’s position to really evolve and be defined over the next few months.

\n

In some instances, businesses can ruin friendships. How did you two factor that into the equation before making the hire? Will the fact that you’re now co-workers have an effect on your personal relationship?

\n\"DreImage Courtesy Of Designsimply.com\n

Brad Williams – When we started discussing the possibility of Dre Armeda joining WDS, this was the first item we discussed. We knew from the start that we had to look at this from a business perspective and not because we are close friends. The last thing either of us would ever want would be to ruin the friendship that we have. Dre Armeda is a perfect fit for WDS, not only in the business sense, but also our company culture. We work hard, and play hard, and no one works and plays harder than Dre Armeda!

\n

Out of all the possible places to work in the WordPress ecosystem, why did you choose WebDevStudios?

\n

Dre Armeda – There is certainly a long relationship there with the leadership, the company, and the team. Brad Williams and I of course are the co-hosts of DradCast and have even presented on the topic of security together in years past at WordCamps. While part of Sucuri, we successfully worked with WebDevstudios in various capacities. The direction of the company, and the culture is very much inline with where I want to be, and where I want to go. Along with that connection, our long relationship, and the experience I can bring to the table, I think the decision was easy.

\n

Do you look at this as a long-term (2-3 year) position?

\n

Dre Armeda – One of the key points we talked about as we started looking into the possibility of working together was exactly that. We were looking for a long term situation and we’re excited about what the future brings!

\n

What lessons or experiences did you learn with Sucuri that you’ll be able to apply to improve WebDevStudios?

\n

Dre Armeda – The position will encompass a broad range of responsibilities and oversight ranging from organizational and business development, to talent development and strategy. I’ve had the great opportunity to work in these areas over the past five years as I helped build Sucuri into the successful organization it is today.

\n

I am very passionate about better serving our audience by expanding global reach and I’m certainly excited about increasing overall organizational efficiency through resourcing, process improvement, and business development. I really enjoy helping implement strategies to scale organizations efficiently and ultimately the lessons I have learned from my experience at Sucuri definitely align with the forward vision at WebDevStudios!

\n

What Was Once A Joke Has Become A Reality

\n

Those who know Williams and Armeda have joked that the two would some day work together but it was always a joke. Now, it’s real and it will be interesting to see how it works out. Based on the interview, Armeda is committed to the company for the long-term, something that’s not easily accomplished when hiring remote workers. Does this move surprise you or did you see the writing on the wall?

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Thu, 14 Aug 2014 14:59:14 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Jeff Chandler\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:27;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:58:\"Matt: You Won’t Believe Who Wrote This Product Checklist\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:21:\"http://ma.tt/?p=43998\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:70:\"http://ma.tt/2014/08/you-wont-believe-who-wrote-this-productchecklist/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:1089:\"
\n
    \n
  1. Understand what people need.
  2. \n
  3. Address the whole experience, from start to finish.
  4. \n
  5. Make it simple and intuitive.
  6. \n
  7. Build the service using agile and iterative practices.
  8. \n
  9. Structure budgets and contracts to support delivery.
  10. \n
  11. Assign one leader and hold that person accountable.
  12. \n
  13. Bring in experienced teams.
  14. \n
  15. Choose a modern technology stack.
  16. \n
  17. Deploy in a flexible hosting environment.
  18. \n
  19. Automate testing and deployments.
  20. \n
  21. Manage security and privacy through reusable processes.
  22. \n
  23. Use data to drive decisions.
  24. \n
  25. Default to open.
  26. \n
\n
\n

That sounds like a list anyone creating something online should follow. Would you guess it’s actually from the US government Digital Services Playbook? Great work by Steven VanRoekel and his team, which I had the pleasure of meeting last time I was in DC. Hat tip: Anil Dash.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Thu, 14 Aug 2014 14:10:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:14:\"Matt Mullenweg\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:28;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:86:\"WPTavern: The Simple Criteria That Determines Which Jetpack Modules Are Auto-Activated\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=28360\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:216:\"http://wptavern.com/the-simple-criteria-that-determines-which-jetpack-modules-are-auto-activated?utm_source=rss&utm_medium=rss&utm_campaign=the-simple-criteria-that-determines-which-jetpack-modules-are-auto-activated\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:3233:\"\"Autophoto credit: 2createcc\n

Since the release of Jetpack in 2011, there have been several articles highlighting the fact that it auto activates modules. George Stephanis, a member of the Jetpack development team, has consistently explained that “Jetpack only auto-activates modules that provide enhancements without affecting the front-end layout of the site.”

\n

Earlier today, Stephanis published a post on his blog that goes into detail on how the decision is made to auto-activate a module.

\n

We’ve spoken to many, many users who find a default feature set convenient, and resent having to make a bunch of ‘decision points’ if they had to manually activate each and every module. Good software should run well out of the box. So we’ve set up the defaults as we have. Yes, some people disagree and are vocal about not wanting anything to auto-activate. That’s okay. We try to design for the majority, with the best user experience we can provide.

\n

I appreciate the fact that new modules will not auto-activate if they impact the front end of my site. In this instance, the decisions being made for me are a convenience, not a hassle. If you disagree with the decisions being made, there are several filters you can use to customize the Jetpack experience, including one to deactivate all modules by default.

\n

add_filter( \'jetpack_get_default_modules\', \'__return_empty_array\' );

\n

I doubt his post will resonate with those who have a strong stance against auto-activating anything. As long as the development team stick to their current philosophy, I’m ok with it.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Thu, 14 Aug 2014 01:10:38 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Jeff Chandler\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:29;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:62:\"WPTavern: Carl Hancock Shares Advice On Registering Trademarks\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=28347\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:168:\"http://wptavern.com/carl-hancock-shares-advice-on-registering-trademarks?utm_source=rss&utm_medium=rss&utm_campaign=carl-hancock-shares-advice-on-registering-trademarks\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:1553:\"

Chris Lema published an interview with Carl Hancock of RocketGenius, where he shares his thoughts on why trademarks are important and how they help protect a brand’s identity. While you can register trademarks yourself, Hancock suggests working with a lawyer who knows intellectual property law and does it for a living.

\n

It’s not simple and straightforward.You don’t pay $100 and instantly gain protection for your brand name around the world. It’s why I recommend not doing it yourself – work with a lawyer who knows intellectual property law and does this for a living.

\n

Earlier this year, I wrote about how the GPL doesn’t give people the right to infringe trademarks. As the WordPress product market matures, I think we’ll see more businesses trademark their logo and product names, especially if more sites like GPL Club are created. If you’ve gone through the process of registering or enforcing a trademark for your product or business, share your experience in the comments.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Thu, 14 Aug 2014 01:00:57 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Jeff Chandler\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:30;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:90:\"WPTavern: WPCore App Adds Export Feature: Save Active Plugins to a Collection with 1-Click\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=28318\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:222:\"http://wptavern.com/wpcore-app-adds-export-feature-save-active-plugins-to-a-collection-with-1-click?utm_source=rss&utm_medium=rss&utm_campaign=wpcore-app-adds-export-feature-save-active-plugins-to-a-collection-with-1-click\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:3043:\"

We’ve been following the evolution of the WPCore plugin management app, which recently added favoriting, update notifications, and the ability to add plugins that aren’t hosted on WordPress.org. Today, the app’s developer, Stuart Starr, announced what is perhaps the most convenient feature to date.

\n

With WPCore Plugin Manager installed, users can now export all of their plugins with one click and save them to a new collection on WPcore.com. This is useful if you have a site that already has all the plugins you want to include in a specific collection.

\n

\"export\"

\n

Despite the fact that the plugin makes it convenient to install all your favorite plugins in one click, you may find that building collections requires quite a bit of work. The new export feature makes it possible to build a collection instantly, based on an existing site’s active plugins. Currently, it can only export active plugins hosted on WordPress.org, but Starr plans to expand the feature in the future.

\n

Clone WordPress Plugin Collections

\n

Another new feature that you’ll find on the app side of WPCore is the ability to clone other users’ collections. Perhaps you want most of the plugins in one collection but want to add or remove a few selections. Click on the new clone button to copy the collection to your own account for editing.

\n

\"clone-collection\"

\n

Starr is continuing development on the app and plugin, inspired by positive feedback from users who are saving time with WPCore. “The feedback has been amazing. In terms of users we are getting new users daily,” he said. One satisfied fan dubbed WPCore the “Pinterest for WordPress plugins.”

\n

September will bring a major update to the service. Starr wouldn’t comment on the specifics of features on the way but he did reveal that he is currently working on a referral system. WPCore is moving to a paid subscription model as of August 31st but users who sign up before that time will be grandfathered in as Pro members for life. New free signups will continue to have access to the basic features of the app.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 13 Aug 2014 23:47:51 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Sarah Gooding\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:31;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:73:\"WPTavern: New WordPress Plugin Spell Checks Post Titles Before Publishing\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=28230\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:190:\"http://wptavern.com/new-wordpress-plugin-spell-checks-post-titles-before-publishing?utm_source=rss&utm_medium=rss&utm_campaign=new-wordpress-plugin-spell-checks-post-titles-before-publishing\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:1941:\"

Have you ever published a post in WordPress only to realize the title has a misspelled word? Sure, a quick edit will do the trick but wouldn’t it be nice if the misspelling was caught before the post went live? WordPress doesn’t spell check post titles but you can change that with a new plugin called Post Title Spell Check, developed by Robert Neu and Brady Vercher.

\n\"PostYep, It Works\n

It’s a simple plugin that adds a small bit of code to the WordPress title input field. Activating the plugin allows all post types which support the default WordPress title input field to be spell checked by modern browsers. There are no settings to configure as it’s a set and forget type of plugin.

\n

How To Spell Check Post Titles Without Using A Plugin

\n

If Firefox is your browser of choice, I found a great guide on Rhour.com that explains how to change a value in Firefox’s configuration file to spell check post titles. The downside to this technique is that it’s for Firefox only. The plugin on the other hand, enables post title spell checking across all modern browsers.

\n

Is this something you’d like to see added to the core of WordPress or should it be left to web browsers to handle?

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 13 Aug 2014 21:48:54 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Jeff Chandler\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:32;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:81:\"WPTavern: WordPress Rainbow Hilite Plugin Adds Rainbow.js for Syntax Highlighting\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=28270\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:206:\"http://wptavern.com/wordpress-rainbow-hilite-plugin-adds-rainbow-js-for-syntax-highlighting?utm_source=rss&utm_medium=rss&utm_campaign=wordpress-rainbow-hilite-plugin-adds-rainbow-js-for-syntax-highlighting\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:4034:\"\"photophoto credit: Βethancc\n

If you regularly blog code snippets, adding a syntax highlighter plugin can help make your code more readable and easier to copy. Many plugins use language-specific shortcodes to surround embedded code, but this generally requires you to remember the right way to form the shortcode. The new WordPress Rainbow Hilite plugin uses a different method for embedding code in posts.

\n

The plugin incorporates the lightweight Rainbow.js syntax highlighting library into WordPress and is completely themable via CSS. Rainbow Hilite utilizes the visual editor to add language-specific styles to pre tags.

\n

\"rainbow-hilite-editor\"

\n

The plugin includes support for 18 commonly used languages, which can be enabled or disabled in the settings located in the Writing panel:

\n

\"rainbow-languages\"

\n

It also includes 19 preset visual themes to choose from for making your code beautiful. The settings panel allows you to toggle a sample code block in order to conveniently preview each theme without having to navigate to the frontend.

\n

\"toggle-code\"

\n

Below is an example of how code appears on the frontend using the plugin’s sample code. One handy thing Rainbow Hilite’s output is that the highlighted code can be copy-pasted directly out of the site. There’s no “view raw” button to clutter up the code snippet.

\n

\"rainbow-example\"

\n

Line numbers are optional and when active they are added using rainbow.linenumbers. The plugin also includes some filters, which allow users to load their own language modules and themes and plugins to hook in.

\n

If you ever decide to stop using the plugin, pre tags aren’t as bad as orphaned shortcodes littered throughout your posts. In other words, using it doesn’t mean that you’re married to the plugin for life. If you’d like to suggest any changes, the development version of Rainbow Hilite is available on GitHub. If you want to use the plugin on your site, you can download it from WordPress.org.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 13 Aug 2014 20:03:49 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Sarah Gooding\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:33;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:37:\"Joseph: WordCamp Salt Lake City, 2014\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:32:\"https://josephscott.org/?p=10802\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:70:\"https://josephscott.org/archives/2014/08/wordcamp-salt-lake-city-2014/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:1718:\"

\"wcslc-2014\"

\n

WordCamp SLC 2014 is coming up fast. Just one month away: Saturday 13 September 2014. This is one day that brings together the local WordPress community like no other. We tend to get a wide range of people attending, from those just starting out, to designers, developers, consultants, and people who contribute to the core code of WordPress.

\n

WordCamp SLC is a great opportunity to learn a few things from the presentations. Even more important than that is the chance to get to know other WordPress users in the community.

\n

One really important thing to note for 2014, the location has changed:

\n

\n

City And County Building
\n451 Washington Square,
\nSalt Lake City, Utah

\n

The registration this year is only $15, which includes lunch. The reduced price is to help offset the cost of parking in down town SLC.

\n

If you are interested in speaking there is still time to submit a presentation proposal.

\n

Go register today and be sure to say hi when I see you on September 13th. Then go give a big thank you to Mike Hansen, he is organizing WordCamp SLC 2014.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 13 Aug 2014 15:49:46 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:12:\"Joseph Scott\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:34;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:41:\"Matt: Extrinsic Motivation Doesn’t Work\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:21:\"http://ma.tt/?p=43987\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:53:\"http://ma.tt/2014/08/extrinsic-motivation-doesntwork/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:376:\"

From Kathy Sierra, here’s “One of the longest deep studies on negative impact of external reinforcers (e.g. rewards) on long-term motivation”: Multiple types of motives don’t multiply the motivation of West Point cadets. Academic, but interesting.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 13 Aug 2014 15:37:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:14:\"Matt Mullenweg\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:35;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:82:\"WPTavern: Espied: A Free WordPress Portfolio Theme for Designers and Photographers\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=28131\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:206:\"http://wptavern.com/espied-a-free-wordpress-portfolio-theme-for-designers-and-photographers?utm_source=rss&utm_medium=rss&utm_campaign=espied-a-free-wordpress-portfolio-theme-for-designers-and-photographers\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:3633:\"

If you’re on the hunt for a new design to showcase your work, WordPress.com’s beautiful Espied theme is now available for use on self-hosted sites. This striking minimalist portfolio theme was created with designers, photographers, and artists in mind.

\n

Espied utilizes WordPress.com’s portfolio feature, which was recently added to Jetpack. With this custom content type enabled, users can easily manage and showcase projects with the [portfolio] shortcode.

\n

\"espied\"

\n

Customization options for Espied include support for a 1600 × 320px header image, the ability to set the header text color, and a unique option for setting the thumbnail aspect ratio. Featured image ratio options include landscape (4:3), portrait (3:4), and square (1:1). This setting carries over to archive pages, the portfolio page template, and portfolio shortcodes.

\n

\"espied-archive-page\"

\n

The theme includes a sidebar that slides out to display navigation and widgets. It is hidden until clicked in order to keep the focus on showcasing your work.

\n

\"sidebar\"

\n

Espied also features a beautiful way to display your social links via a custom menu. Add your social URLs as menu items and the theme will automatically display the right icon, if it’s available. It currently includes 22 different icons for various social profiles.

\n

\"social-links\"

\n

Espied showcases images at full width on larger displays so it’s important to use images that are at least 1272px. Although the theme does include beautiful, readable typography for blogging, the design is probably best-suited for sites that are primarily portfolios or other visual showcases. Check out a live demo on WordPress.com to see the theme in action.

\n

With the release of Espied, the folks at Automattic are approaching 50 free themes listed on WordPress.org. This portfolio theme is a home run and responds nicely to any screen size. If you want an easy way to showcase your work without having to configure a ton of options, Espied is an excellent choice. Download it from the WordPress.org or install it directly via your admin themes panel.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 13 Aug 2014 04:42:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Sarah Gooding\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:36;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:101:\"WPTavern: Theme Checklist Helps Prepare Developers To Submit A Theme To The WordPress Theme Directory\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=28095\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:246:\"http://wptavern.com/theme-checklist-helps-prepare-developers-to-submit-a-theme-to-the-wordpress-theme-directory?utm_source=rss&utm_medium=rss&utm_campaign=theme-checklist-helps-prepare-developers-to-submit-a-theme-to-the-wordpress-theme-directory\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:4406:\"

Theme Checklist is a new plugin by Greg Priday of SiteOrigin. The plugin provides a checklist of items to go through before submitting a theme to the WordPress theme directory. Once activated, you’ll find the checklist under Tools > Theme Checklist. Theme developers check off each item that successfully passes a test. Themes need to pass all tests before they can be accepted into the WordPress theme directory.

\n\"CheckCheck List Of Items To Go Through\n

If a test doesn’t pass, you can select the X and a small text area appears allowing you to write and save notes to that item. There are a total of 31 different tests ranging from Code Quality to Security. Each item has a link that takes users to a page on Themechecklist.org with more information. Theme Checklist also contains the ability to import or export tests enabling users to collaborate on testing themes in different environments.

\n

I used Theme Checklist to review the WP Tavern theme and it passed with flying colors.

\n\"RavelWP Tavern Theme Passes With Flying Colors\n

Theme Checklist Is An Alternative Learning Experience

\n\"Themephoto credit: Dr Casecc\n

Although the plugin is not an exact match, Priday will do his best to keep the checklist in line with the official WordPress.org Theme Review Guidelines. “My goal is to make a kind of Dummies Guide to The Theme Review Guidelines” Priday said. “I’ve generally found that the theme review guidelines are really difficult for new theme developers to understand. I’ve tried to make something that makes all the requirements easier to understand.”

\n

Theme Checklist is not meant to be a replacement for the Theme Check plugin. Instead, it’s a collection of the most common snag points witnessed by Priday in the theme review queue. According to Priday, the queue has a five-week backlog. He hopes Theme Checklist helps decrease the queue and gets more theme developers to pass the initial review.

\n

I understand why the theme review guidelines need to be thorough and specific. It’s the WordPress.org theme directory and they help create a consistent user experience. Plugins like Theme Checklist provide an alternative learning experience to accomplish the same goal. However, it has to remain on par with the official guidelines or else it could end up doing more harm than good.

\n

Theme developers, is this a tool you see yourself using? What other tools do you use to increase the likelihood of passing a review on the first try?

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 12 Aug 2014 22:45:08 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Jeff Chandler\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:37;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:89:\"WPTavern: Right Meow Plugin Puts The Super Troopers Cat Game Into Your WordPress Comments\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=28201\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:222:\"http://wptavern.com/right-meow-plugin-puts-the-super-troopers-cat-game-into-your-wordpress-comments?utm_source=rss&utm_medium=rss&utm_campaign=right-meow-plugin-puts-the-super-troopers-cat-game-into-your-wordpress-comments\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:1976:\"

Broken Lizard’s 2001 comedy “Super Troopers” introduced millions of viewers to the “cat game.” In the scene, a highway patrolman pulls Jim Gaffigan over and then tries to insert the word “meow” casually into the conversation as many times as possible. You remember that scene, right? If not, check it out here:

\n

\n

Am I Saying Meow?!

\n

Now, you can also have subliminal meow fun with Right Meow, a WordPress plugin that changes your comments section so that the word “now” automatically becomes “meow,” as shown below:

\n

\"meow\"

\n

The plugin was created by Thomas Leen and is his first submission on WordPress.org. It’s also available on GitHub, should you want to suggest any changes. After testing it, I can confirm that it works as advertised to transform all instances of “now” to “meow” in the comments.

\n

This may not be the most productive tool in the shed but it definitely adds a dash of frivolity and fun to your site by automatically trolling commenters with meows on your behalf. Please note that de-activating the plugin will return all your “meows” back to “nows.” If you want your comments to have a little more entertainment value, I recommend you download this plugin right meow.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 12 Aug 2014 22:20:08 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Sarah Gooding\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:38;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:69:\"Alex King: The Race to the Bottom Benefits Platforms (not Developers)\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://alexking.org/?p=20713\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:60:\"http://alexking.org/blog/2014/08/12/race-to-bottom-platforms\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:3773:\"

There’s been a ton of recent conversation in the iOS world about the inability for most indie developers to create sustainable businesses through the iOS app store. In particular, these devs are talking about apps that require larger development efforts – they want to charge more than “impulse purchase” prices for these, and thus want trials, upgrade pricing, etc. to support that model. They want things to work they way they always have – I don’t blame them.

\n

I think it’s worth considering who wins in this “race to the bottom”. In general, more stuff for free benefits consumers, which in turn benefits the platform.

\n

“But wait!” the developers cry. “When the platform doesn’t support building more sophisticated apps, the consumers ultimately lose!” I know this argument, I’ve made it myself regarding the WordPress ecosystem. I was wrong.

\n

Consumers have been well trained that they can expect incredible value for free. Sure, they may trade off their privacy and be subjected to ads, but they aren’t asked to fork over their cash directly.

\n

VC-backed companies often contribute to the problem as well. As they clamor for users to their platforms, they give everything away – it’s so easy to flip the switch in the future and start the money pouring in. Or if that doesn’t work, they fold up shop and call it a day. Oops!

\n

More complex apps will get made. They just won’t be built using the model that indie developers are used to.

\n

There will be apps supported by alternative revenue streams. Some might have ads or sponsorships, some might mine and sell the data they produce, some (like Evernote and Dropbox) will be a gateway to a commercial service. People will figure out ways to get money out of a large enough user base, and apps will get built.

\n

I’ve seen this happen in the WordPress ecosystem already. It’s a different beast because it’s an Open Source community, but it’s still an interesting parallel.

\n

Basically this happened:

\n
    \n
  1. A bunch of folks built stuff and released it all for free to a small community, largely consisting of fellow developers and tinkerers
  2. \n
  3. A whole bunch more folks started using the platform and the community grew – it wasn’t just developers anymore, it was end users with expectations of support, etc.
  4. \n
  5. Devs wanted to start monetizing the products they were providing
  6. \n
  7. The platform didn’t provide the tools to make money in the way that the devs wanted -instead it invested in tools to promote free products
  8. \n
  9. Eventually a variety of patterns arose to monetize both commercial and “free” products (subscription clubs with access to a bunch of different plugins/themes, free products with commercial add-ons, sponsorships and ads, products that were created to support hosting services, etc.)
  10. \n
\n

It’s not the \":scare:\" pure \":/scare:\" and direct approach of charging directly for the software, but it’s still developers writing code and making money.

\n

The same thing is happening for iOS. There is money to be made. The platform and consumers are winning.

\n

“Adapt or die” is our mantra for those business who are threatened by technology. We have little sympathy for newspapers, the music industry, etc. Perhaps it’s time to include software companies in that list.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 12 Aug 2014 21:53:56 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:4:\"Alex\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:39;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:110:\"WPTavern: Sprout Apps to Launch a Suite of WordPress-Powered Apps Targeted at Freelancers and Small Businesses\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=28141\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:264:\"http://wptavern.com/sprout-apps-to-launch-a-suite-of-wordpress-powered-apps-targeted-at-freelancers-and-small-businesses?utm_source=rss&utm_medium=rss&utm_campaign=sprout-apps-to-launch-a-suite-of-wordpress-powered-apps-targeted-at-freelancers-and-small-businesses\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:6601:\"

\"sprout-apps\"

\n

Sprout Apps will soon be launching a suite of business apps targeted at WordPress freelancers and small businesses. WordPress developer Daniel Cameron is behind the project, which is centered around creating plugins that help business owners work more efficiently with WordPress. Sprout Apps aims to bring tasks like invoicing, estimates, and client tracking into the admin.

\n

Cameron is the creator of Smart eCart, a popular solution for daily deals, crowdfunding and social commerce. For five years he has supported and maintained the plugin, which was originally created for a client project. With the desire to venture out and create something new, Cameron has soft-launched Sprout Apps, starting with Sprout Invoices, now available for purchase.

\n

\"sprout-apps-invoices\"

\n

Sprout Invoicing is an idea that Cameron had cooked up year ago but was hesitant about, due to the fact that other plugin developers had explored it without much success.

\n

“I went back to my original idea that I had years ago, which was a new invoicing app that solved all the problems I’ve had with Freshbooks and Harvest,” he said. “I knew there were already plugins out there which made me reluctant to pursue it further, regardless if their approach was wrong in my opinion.”

\n

Sprout Invoicing Aims to Help Streamline and Brand All Client Communications

\n

In order to sell his product, Cameron will have to convince business owners of the value in using a WordPress-powered invoicing system instead of the many standalone services. He’s counting on customers’ desire to streamline all aspects of their businesses.

\n

“Those other standalone services are silo’d, expensive, limiting and offer limited customization for brand integrity,” Cameron contends. “I want to streamline the estimate and invoicing process. Integrating it within the site that already has the estimate request (contact form) helps tremendously.”

\n

In addition to fully automating estimating and invoicing, the app is designed to help business owners overcome the branding limitations of popular invoicing services, which generally only let you upload a logo to a subdomain. The freedom to fully brand all client communications is a big win for small businesses.

\n

“Sprout Invoice notification emails are sent from your server and your from address,” Cameron said. “No more http://yoursite.harvestbooks.com with a ‘Powered by A Service I Pay For’.”

\n

The invoicing app is built with business owner’s needs in mind. It’s packed full of dashboards and charts, summaries, and dynamic reporting that can be easily sorted and filtered in the WordPress admin.

\n

\"sprout-invoicing-charts\"

\n

Under the hood, Sprout Invoices is a WordPress plugin that uses custom post types, post meta and taxonomies for its data structure. “There are no additional tables created. The entire code base adheres to WordPress coding practices,” Cameron told the Tavern. “There’s hundreds of hooks and filters in SI, I want the entire app to be customizable and I anticipate it’s users to want more control than traditional WP users.”

\n

The apps he plans to build are actually WordPress plugins, though he felt that apps was a more applicable term. “I didn’t want to go with ‘Sprout plugins,’ for example, because I do have ideas that aren’t plugins and I didn’t want to box myself in,” he said. “I also think ‘Apps’ is a better term for these larger premium plugins since they offer more than a traditional plugin that might filter post content.”

\n

Sprout’s next app will be a CRM, followed by a team-based app. Cameron is also considering a PM app and a time tracker, depending on how sales go with the invoicing app. Pricing for Sprouts Invoicing is similar to that of popular invoicing services, with both monthly and yearly subscription rates at $5 and $9 respectively. Subscribers will receive updates, support and add-on discounts. Cameron also plans to launch a free version of the invoicing app later this year.

\n

Sprout Apps is built on the bold premise that your WordPress site can be more than just the marketing face of your business. It can also power the daily tasks of estimating work, billing clients, and charting progress. Cameron is aiming to provide all the business essentials with the added benefit of brand independence, a streamlined workflow, and total control. He’s got a big vision to create a superior suite of apps that will support the many freelancers and small businesses that make up a large segment of the WordPress ecosystem.

\n

Sprout Apps is currently in pre-launch mode and will officially launch at WordCamp LA in early September. A live demo of the app is available to preview and pre-launch subscribers will receive a discount at purchase.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 12 Aug 2014 20:54:38 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Sarah Gooding\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:40;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:40:\"WPTavern: WP Site Care Acquires Audit WP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=28140\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:124:\"http://wptavern.com/wp-site-care-acquires-audit-wp?utm_source=rss&utm_medium=rss&utm_campaign=wp-site-care-acquires-audit-wp\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:1996:\"\"Mergephoto credit: rutlocc\n

Audit WP has been acquired by WP Site Care. According to the announcement, Audit WP will operate under WP Site Care while continuing to offer specialized SEO services. Rob Neu, who owned and operated Audit WP, will become WP Site Care’s Director of Digital Strategy.

\n

Rob will oversee product development as well as making sure that our brand, services, and content align with our ultimate goal of providing top-tier WordPress support, and making WordPress an asset for our clients and people who are new to the platform.

\n

Neu hints that new SEO training packages are being worked on and a new plugin is being developed that will make it easier for WP Site Care customers to receive support from the WordPress dashboard.

\n

Neu cites his passion for wanting to help businesses and individuals as one of the primary reasons for merging with WP Site Care. “At my core, the thing I like the most about everything that I do is that I’m able help people,” Neu said. “I want to help people improve their businesses, make more money, and be more successful.”

\n

By joining WP Site Care, a business dedicated to helping people solve WordPress problems, he’s in a great position to do just that.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 12 Aug 2014 18:26:30 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Jeff Chandler\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:41;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:22:\"Matt: The Great Filter\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:21:\"http://ma.tt/?p=43964\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:36:\"http://ma.tt/2014/08/thegreatfilter/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:423:\"

\n

This is about the Great Filter. (No, not Akismet.) It’s Adam Ford and Robert Hanson on existential risks to humanity, a continuation of the Fermi Paradox discussion I posted about the other day.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 12 Aug 2014 16:39:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:14:\"Matt Mullenweg\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:42;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:78:\"Post Status: Audit WP to become part of WP Site Care with acquihire of Rob Neu\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:30:\"http://www.poststat.us/?p=7078\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:108:\"http://www.poststat.us/wp-site-care-rob-neu/?utm_source=rss&utm_medium=rss&utm_campaign=wp-site-care-rob-neu\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:3669:\"

\"wp-site-care\"

\n

Audit WP had a short, but interesting life span. Started by Rob Neu and Jacob King, the site launched in February, and today it’s been acquired by WP Site Care.

\n

They made an early splash after their launch when Jacob wrote a provocative post about WP Engine’s SEO policies. Aside from that, they set out to productize technical SEO and general website strategy.

\n

Their product was fairly successful, but they learned a valuable lesson; they were limiting their consulting opportunities for larger contracts by productizing — and therefore bracketing themselves at a relatively low price — their entry level services. That said, the product was quite good, and will now be part of WP Site Care’s offering in the form of a la carte SEO consulting, reports, and tools.

\n

I had a call with Rob and Jacob a couple of months ago to demo their product, and because I needed real help from them. I’d been getting clobbered by Google, and they helped me identify some of the reasons why and set about a plan to fix it. I’m still working on it, and was very pleased with what they offered.

\n

\"audit-wp-overview\"

\n

This and other tools were quite nice, and the value I got from a short call and report were pretty enormous. I think this will be a compelling product for WP Site Care’s services, and it will fit in well with their other offerings.

\n

If you know Rob Neu and WP Site Care’s owner, Ryan Sullivan, then you already know they are friends. Rob joining WP Site Care doesn’t come as a shock, and seems to make sense all around. The two are already working on a separate side project together, called Flagship, a theme company. Additionally, WP Site Care was a sponsor and often attendee on WP Bacon, Rob’s old podcast that also unfortunately bit the dust.

\n

Rob and Ryan’s partnership for Flagship will remain separate, and Rob will be the Director of Digital Strategy for WP Site Care, now a team of five full time employees. Rob is a technical guy, and in addition to running strategy and marketing for WP Site Care, he’ll be working on refining some of their product offerings as well.

\n

What is WP Site Care anyway?

\n

I talked about WP Site Care and other WordPress maintenance services earlier this year. Essentially it’s a combination of monthly maintenance and support, and a la carte services. It’s been a wildly successful and growing niche in the WordPress market, and there seem to be new companies popping up every day.

\n

While I don’t know the degree of professionalism and expertise all of them have, I know that at least a few are very good at what they do. WP Site Care adding Rob and the variety of tools he brings to the table is a smart move for them to help set themselves apart in what is quickly becoming a crowded market.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 12 Aug 2014 15:59:47 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:15:\"Brian Krogsgard\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:43;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:85:\"WPTavern: Add Reddit Style Commenting to WordPress With the Comment Popularity Plugin\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=28045\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:214:\"http://wptavern.com/add-reddit-style-commenting-to-wordpress-with-the-comment-popularity-plugin?utm_source=rss&utm_medium=rss&utm_campaign=add-reddit-style-commenting-to-wordpress-with-the-comment-popularity-plugin\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:5010:\"

\"comments\"

\n

Comments are an important aspect of your content and can serve as a vehicle for building community. WordPress site admins put in a hefty amount of work moderating comments and combating spam, just to keep the conversation going with comments open. With all that work invested, admins are looking for new ways to make comment interaction more valuable to those who are participating.

\n

WordPress.com recently added comment likes to the delight of its users. Self-hosted WordPress site admins are hopeful that comment likes will find their way into Jetpack as well. If you’re interested in doing something more with comments, there are many plugins that help to promote interaction on your site.

\n

Comment Popularity is a new one that caught my eye. The plugin, created by Paul de Wouters and his colleagues at Human Made, adds Reddit style commenting to WordPress. Registered site members can vote comments up or down to increase or decrease comment visibility.

\n

\"comment-popularity\"

\n

When the plugin is active, comments are sorted by weight (number of votes) in a descending order. Site members receive karma each time one of their comments is upvoted. Administrators have the option to attribute more weight to “expert” commenters by adding an expert label and additional points on user profiles.

\n

\"user-profile-comment-popularity-settings\"

\n

There’s also an option in the discussion panel for setting a default expert karma.

\n

De Wouters and the folks at Human Made plan to support and maintain the plugin via the forums on WordPress.org. It was originally created for their client, CFO Publishing, who will be listed as a contributor on the next release.

\n

“I have a few ideas for integration with other plugins such as Stream, and our SaaS product WP Remote,” de Wouters said. I asked if he plans to add a UI for showing users their aggregate upvotes/ranks, and he confirmed that this is a possibility. “We’re already storing users voting activity, so it makes sense to offer an admin view for it,” he said. “Maybe a dashboard widget. Also, this is the kind of data we’d send to WP Remote or Stream.”

\n

The plugin is currently restricted to registered users, as it doesn’t make much sense to leave it open for anonymous users to vote. “I do however plan to develop a drop in class that will allow users to authenticate themselves via social networks, which will reduce friction and still provide a way to identify a user with relative reliabilty,” de Wouters commented regarding future development plans. Although he wants to keep it simple and focused on one particular functionality, he is open to suggestions and contributions via the plugin’s GitHub repository.

\n

Comment Popularity gives registered users a way to weigh in on discussions without having to comment. Consequently, there is a greater incentive for readers to register for your site. It gives everyone a chance to influence the conversation. As users attribute value to comments they like, the best comments will float to the top. This saves readers from having to scroll through all the mediocre comments in order to find the highest quality responses.

\n

If you’re looking for a new way to encourage interaction in your comments, the Comment Popularity plugin is simple and intuitive to use. It should work automatically with most standard comment forms. Download the plugin for free from WordPress.org and watch the GitHub repository for updates in development.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 12 Aug 2014 00:14:59 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Sarah Gooding\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:44;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:77:\"WPTavern: Interview With Siobhan McKeown On The Future Of The WordPress Codex\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=28089\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:198:\"http://wptavern.com/interview-with-siobhan-mckeown-on-the-future-of-the-wordpress-codex?utm_source=rss&utm_medium=rss&utm_campaign=interview-with-siobhan-mckeown-on-the-future-of-the-wordpress-codex\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:6798:\"

If you use WordPress, chances are that you’ve run into the WordPress Codex. The Codex is a community maintained collection of documentation, hooks, filters, best practices, and other information related to WordPress. With various handbook projects underway, I’ve been wondering what the future of the Codex is. To find out, I got in touch with Siobhan McKeown, who is a member of the documentation team.

\n

Interview With Siobhan McKeown

\n

Is the roadmap outlined here still accurate and is it being followed? Is it still on time?

\n

The roadmap is still fairly accurate but it’s not on time. The number of contributors to docs is quite small and we’ve faced challenges around getting development work done and finding people to write. That said, the people who are involved are very dedicated and we’re slowly chipping away at things. We have made big strides forward, particularly in the area of inline docs (thanks Drew Jaynes and Kim Parsell) and in building developer.wordpress.org.

\n

Ultimately, is the future of the Codex for it to disappear in favor of all the other documentation resources outlined in the roadmap?

\n

I would like for that to happen, but the decision doesn’t ultimately lie with me and it’s a discussion that we’ll have to return to once new documentation is in place.

\n

Many free software projects in the early stages of their life use a wiki for their documentation. Over time, this can become out-of-date and inaccurate. As a project grows, it often out-grows a wiki, requiring more targeted documentation for both users and developers. Firefox and Ruby on Rails are good examples of FOSS projects that provide the types of targeted documentation that WordPress should be providing. I would hope that we can eventually get there ourselves, and keep the Codex as a historical archive.

\n\"MozillaMozilla FireFox Targeted Documentation\n

Is it a waste of effort and energy for folks to continue to edit and update the Codex?

\n

No. For two reasons: First of all, while all of the docs work is going on, we need to ensure that the Codex stays up-to-date and accurate. It remains WordPress’ primary source of documentation and will be for some time, so contributions are still valuable there. When a new version of WordPress is released, the docs team usually does a sprint to get the Codex up-to-date.

\n

Secondly, the main problem with the Codex is its navigation and structure. There’s a lot of good content in there mixed with a lot of out-of-date content. As we create new resources, we look at the content in the Codex and migrate good-quality content. If you fix a page in the Codex, then it’s likely that will end up somewhere in a new documentation resource.

\n

How can folks get involved with helping the roadmap move along?

\n

We particularly need help in two areas:

\n
    \n
  1. Someone to help with ongoing development of WP-Parser (the parser used to generate the Code Reference). A lot of things are on hold until we get someone helping there.
  2. \n
  3. Writing the theme and plugin developer handbooks. These have been around for a long time and we really want to get them finished off so that we can move on to focusing on user support.
  4. \n
\n

To Some, Google Is The WordPress Codex

\n

It may be the largest collection of WordPress documentation but I bet it doesn’t compare to the amount of WordPress content published on sites across the web. The paradox of publishing content on the Codex for the benefit of everyone versus a personal site for the benefit of a small audience has existed since it was created.

\n

I think it would be awesome if content from sites like Justin Tadlock found a home on the Codex but perhaps we don’t need one at all. Maybe all we need is Google. When I asked the Tavern’s Twitter followers what aspect of WordPress do they take for granted, Jared Novack submitted the following answer:

\n

@wptavern You can type anything into google followed by \"WordPress\" and someone has already asked (and answered) it

\n

— Jared Novack (@jaredNova) July 30, 2014

\n

\n

If the Codex ever goes offline, it will be a sad day. However, if it’s replaced with easy to navigate, skill level targeted documentation, with a solid code reference, I think a lot of users and developers will be happy with its replacement. Has the Codex saved your bacon once or twice? Let us know in the comments.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Mon, 11 Aug 2014 22:20:27 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Jeff Chandler\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:45;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:57:\"WPTavern: WPWeekly Episode 157 – Jeffro Tells His Story\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:44:\"http://wptavern.com?p=28075&preview_id=28075\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:150:\"http://wptavern.com/wpweekly-episode-157-jeffro-tells-his-story?utm_source=rss&utm_medium=rss&utm_campaign=wpweekly-episode-157-jeffro-tells-his-story\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:2274:\"

The past 156 episodes of WordPress Weekly are filled with stories of people who are doing exciting things with WordPress. For this episode, I decided to try something a little different. I handed the show over to Marcus Couch, who interviewed me. In the show, I describe how I became interested in computers and the events that lead me to where I am today. It’s a lengthy episode but one I hope you enjoy.

\n

A reminder that beginning this week, WordPress Weekly will be recorded live on Wednesdays at 9:30 PM Eastern. The change better accommodates my schedule and the new day and time is also more compatible with guests.

\n

Stories Discussed:

\n

WordPress 3.9.2 Fixes Security Vulnerabilities, Users Strongly Encouraged To Update
\nCrowd Favorite Announces Chris Lema As New CTO
\nHow to Change Jetpack Accounts Without Losing Your Stats or Subscribers

\n

WPWeekly Meta:

\n

Next Episode: Wednesday, August 13th 3 P.M. Eastern – Special Guest, Pippin Williamson

\n

Subscribe To WPWeekly Via Itunes: Click here to subscribe

\n

Subscribe To WPWeekly Via RSS: Click here to subscribe

\n

Subscribe To WPWeekly Via Stitcher Radio: Click here to subscribe

\n

Listen To Episode #157:
\n

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Mon, 11 Aug 2014 20:05:12 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Jeff Chandler\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:46;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:67:\"WPTavern: Underscores WordPress Starter Theme Adds Support for Sass\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://wptavern.com/?p=28061\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:178:\"http://wptavern.com/underscores-wordpress-starter-theme-adds-support-for-sass?utm_source=rss&utm_medium=rss&utm_campaign=underscores-wordpress-starter-theme-adds-support-for-sass\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:3186:\"

Underscores community project contributors announced today that the theme now includes support for Sass. The popular WordPress starter theme is an open source project maintained by Automattic, and many of its users requested Sass support, according to contributor Tammie Lister. “The community firstly asked for Sass. As Sass is in core, this makes sense. It was already part of most themers’ workflow.”

\n

If you visit Underscores.me and click on “Advanced Options”, you’ll now find that you can check a box to add Sass support:

\n

\"add-sass\"

\n

Lister emphasized in the announcement that support for Sass is included in a way that gives developers the freedom to use it as they please:

\n

Not everyone compiles or uses Sass the same, so _s shouldn’t force anyone to follow one path or another. In this sense, the Sass provided takes a pure approach, not requiring Compass or any other scripts.

\n

Sass support came about from a combination of numerous pull requests and forks of the project on GitHub. However, the project’s contributors do not wish to limit everyone to Sass and are open to other CSS preprocessors. “I’d still love to see a fork of Less for _s. We’re keen it opens up the way to other preprocessors,” Lister told the Tavern regarding the Sass support announced today.

\n

Earlier this year, WordPress.com formally opened up its marketplace to theme developers. Theme submission guidelines are fairly strict and developers are encouraged to use the _s theme for a head start. While many theme authors appreciate the ability to save time with mixins and variables, using a preprocessor is not required for submitting to WordPress.com.

\n

Every WordPress themer has a unique workflow that may or may not involve a preprocessor, and the Underscores project contributors plan to respect that. “_s doesn’t tell you how to do things, it gives you a start. Anything we add to it should also do that,” Lister said.

\n

The addition of Sass support marks another turning point for the project, as Lister notes that the GitHub repository will now be used solely for development. If you want to use Underscores in a project, the team encourages you to download it directly from Underscores.me.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Mon, 11 Aug 2014 19:00:58 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Sarah Gooding\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:47;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:93:\"Post Status: Week in review: theme shops, hub and spoke, you can’t afford me, and much more\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:30:\"http://www.poststat.us/?p=7070\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:168:\"http://www.poststat.us/week-review-theme-shops-hub-spoke-cant-afford-much/?utm_source=rss&utm_medium=rss&utm_campaign=week-review-theme-shops-hub-spoke-cant-afford-much\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:10330:\"

\"week-in-review\"

\n

Welcome to the seventh “Week in Review” on Post Status, where I hope to offer up some of the things you may have missed in the last week or so. A whole bunch of good stuff to read from the last week, so let’s get to it:

\n

Theme shops sorted by their Alexa rank

\n

Devin Price has updated his list of WordPress theme shops, sorted by Alexa rank, for 2014. This is a really interesting list that’s sure to enlighten you to some theme shops that you’ve never heard of. I’ve referenced the 2013 version many times in the past. I’m glad Devin put time into doing this again.

\n

Alexa isn’t a perfect way to rank theme shops, obviously, but it does offer good insight to see what average Joes unfamiliar with the WordPress theme landscape probably stumble upon as they search for WordPress themes. As Devin notes, the order of the top shops haven’t changed a whole lot in the past year, though pretty much all have gained ground, and WPMU Dev jumped all the way to number 1 from number 6.

\n

Hub and spoke versus distributed teams

\n

Jeff Chandler blogged about Crowd Favorite’s hub and spoke office (edit: it’s actually a constellation model; no “hub”) model (a central office + many smaller offices). Jake Goldman responded with his case for a fully distributed team (10up’s model). Both offer quality insight into how some of the larger WordPress consultancies operate.

\n

You can’t afford the plugin you want

\n

Chris Lema has written an excellent post about custom plugin development, and why you just can’t get the exact thing you want off the shelf (unless you get real lucky).

\n

That plugin that does everything you ever wanted? It doesn’t exist. And if it did, if someone built it, it would cost you thousands and thousands of dollars.

\n

Because what you often describe isn’t a plugin. It’s a system.

\n

And since you don’t want to connect several focused plugins, that each do the one thing they were made to do, you won’t really find the perfect plugin sitting there waiting for you.

\n

SSL all the things

\n

\n

Google spoke from on high, declaring SSL to be a portion of their ranking algorithm. The SEOs and the SSL sellers rejoiced. Tim Nash has a nice primer on the nerdy details of SSL. Joost de Valk also has some practical tips for switching over to SSL. And Zack Tollman has a great performance post over at The Theme Foundry about SPDY and SSL.

\n

Now, all that said, seriously don’t freak out about SSL. It is great, that’s true, but just because Google says it’s part of their algorithm doesn’t mean you have to have it no matter what. Still though, having SSL enabled is probably a good thing for most sites, if you can afford it. Just be smart about it, and not purely reactionary to Google’s whims.

\n

Some hosts start to support Clef, the password-less login app

\n

SiteGround and three other hosts announced default support for Clef last week. New installs on those platforms will enable the password-less login app. Clef works as a form of two-factor authentication, since you have to have your phone on you and scan the login screen to access the site.

\n

It’s obviously past time to rely purely on passwords, so it’s good to see folks supporting Clef and other two-factor methods out of the box.

\n

WordPress-based portfolio templates, with Semplice

\n

Semplice is a WordPress portfolio template product, that’s still in development, but it’s definitely outside of the normal WordPress themes you see. I got in touch with the folks behind Semplice and they expect to have something ready in a few weeks for beta testing. It seems you can already buy it though, so I don’t know what that’s about. Either way, this may be a product to keep an eye on.

\n

The WordPress security “delimma”

\n

Tony Perez, CEO of Sucuri, write about what he considers to be a delimma with WordPress security. I don’t personally agree with some of Tony’s conclusions here, but they are worth reading, as your mileage may vary. He takes some folks’ words to task (including my own), but I think in the end there is a more a difference in opinion on how to delivery the security message versus actual differences in implementing security measures.

\n

I believe the Drupal vs WordPress method for highlighting last week’s security release was a reflection of how WordPress and Drupal communicate in general; WordPress said it as if speaking to regular site owners and Drupal spoke to developers. To me, making WordPress accessible to regular people is paramount — related to security issues or not.

\n

I have a lot more I can say about this, but I have no desire to get in a pointless battle when I think we mostly agree on the goal, just not the message. But I do have one more note. Tony finishes his post with this:

\n

You can’t own 22% of the market and not expect issues. Is it best to fight it and blindly convince yourself that they don’t exist, or is it better to embrace it?

\n

I take exception to this. I don’t know anyone in a significant position within the WordPress project that takes such a “blind” stance. You can’t say WordPress core developers don’t take security seriously, because they absolutely do.

\n

Stellar and international payments

\n

Stellar is a “a decentralized protocol for sending and receiving money in any pair of currencies” with some big backers, like Stripe. Brent and Kirby, at Prospress, nerded out over Stellar when it launched, and then wrote up a great post about what this could mean for big savings in international eCommerce.

\n

Tablesaw: responsive tables, by Filament Group

\n

Responsive tables are a pain. The Filament Group really attacked them with Tablesaw. This is a really nice solution that you may consider for implementation with certain types of themes and websites.

\n

Comment likes on WordPress.com

\n

WordPress.com has introduced comment likes. This could be great for some sites with heavy amounts of comments, especially if they add some sorting options to bring good comments to the top. It might be a while before this one hits Jetpack though; apparently there are some technical challenges there.

\n

Get news of new WordPress.com themes

\n

Also in WordPress.com land, it turns out they aren’t really blogging about every theme release any more. So Luke McDonald put together a Twitter account to help keep you informed.

\n

http://t.co/unxO0Vbjaz no longer promotes or announces Premium theme releases, so I spent some time to do this: https://t.co/Cenf4RW0Ed

\n

— Luke McDonald (@thelukemcdonald) August 8, 2014

\n

\n

Why attend WordPress conferences (and updates on some of them)

\n

Andy Leverenz puts some good reasons together on the Elegant Themes blog about why you should attend WordPress conferences, and he highlights some of those coming up.

\n

Speaking of, if you want to go to PressNomics (the attendee list is awesome so far), you better act soon; that conference could sell out really soon.

\n

The first and second batches of WordCamp San Francisco speakers have been announced.

\n

WordCamp Europe’s speaker list is also dripping out, and it’s pretty amazing; that’s going to be an incredible event in Sofia.

\n

Finally, if you’re in the south, WordCamp Birmingham (my local camp — #WPYall!) is this Saturday. It’s going to be a great time, and I hope I get to meet some of you there. You can still register, so do that and come learn with us.

\n
\n

Have a great week, y’all. Make some news, and I’ll write it. Be on the lookout too, I’ve got my own news to share in the next month or so. Which means it’s probably a good time to subscribe to my newsletter.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Mon, 11 Aug 2014 17:22:44 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:15:\"Brian Krogsgard\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:48;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:26:\"Matt: Mosquito Preferences\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:21:\"http://ma.tt/?p=43977\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:42:\"http://ma.tt/2014/08/mosquito-preferences/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:340:\"

Why Do Mosquitoes Bite Some People More Than Others? I’m pretty lucky in the mosquito-biting department, they tend to go for others around me. So this article is for those that take one for the team.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Mon, 11 Aug 2014 14:10:54 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:14:\"Matt Mullenweg\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:49;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:74:\"Lorelle on WP: Find, Search, Replace, and Delete in the WordPress Database\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:37:\"http://lorelle.wordpress.com/?p=11808\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:97:\"http://lorelle.wordpress.com/2014/08/10/find-search-replace-and-delete-in-the-wordpress-database/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:545:\"The following was originally published on WordCast and authored by Lorelle VanFossen. It is reprinted here as a reference guide. You’ve moved your WordPress installation from one server to another. You’ve changed domain names. You’ve moved images around on your server and now they don’t load. You’ve changed your WordPress installation and now images show […]\"\"\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Sun, 10 Aug 2014 23:36:42 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:17:\"Lorelle VanFossen\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}}}}}}}}}}}}s:4:\"type\";i:128;s:7:\"headers\";a:10:{s:6:\"server\";s:5:\"nginx\";s:4:\"date\";s:29:\"Wed, 20 Aug 2014 22:26:17 GMT\";s:12:\"content-type\";s:8:\"text/xml\";s:14:\"content-length\";s:6:\"206367\";s:10:\"connection\";s:5:\"close\";s:4:\"vary\";s:15:\"Accept-Encoding\";s:13:\"last-modified\";s:29:\"Wed, 20 Aug 2014 22:15:13 GMT\";s:15:\"x-frame-options\";s:10:\"SAMEORIGIN\";s:4:\"x-nc\";s:11:\"HIT lax 250\";s:13:\"accept-ranges\";s:5:\"bytes\";}s:5:\"build\";s:14:\"20140820222237\";}','no'); -INSERT INTO `wp_options` (`option_id`, `option_name`, `option_value`, `autoload`) +INSERT INTO `options` (`option_id`, `option_name`, `option_value`, `autoload`) VALUES (121,'_transient_timeout_feed_mod_867bd5c64f85878d03a060509cd2f92c','1408616778','no'), (122,'_transient_feed_mod_867bd5c64f85878d03a060509cd2f92c','1408573578','no'), @@ -252,16 +252,16 @@ VALUES (131,'can_compress_scripts','1','yes'), (132,'category_children','a:0:{}','yes'); -/*!40000 ALTER TABLE `wp_options` ENABLE KEYS */; +/*!40000 ALTER TABLE `options` ENABLE KEYS */; UNLOCK TABLES; -# Dump of table wp_postmeta +# Dump of table postmeta # ------------------------------------------------------------ -DROP TABLE IF EXISTS `wp_postmeta`; +DROP TABLE IF EXISTS `postmeta`; -CREATE TABLE `wp_postmeta` ( +CREATE TABLE `postmeta` ( `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `post_id` bigint(20) unsigned NOT NULL DEFAULT '0', `meta_key` varchar(255) DEFAULT NULL, @@ -271,10 +271,10 @@ CREATE TABLE `wp_postmeta` ( KEY `meta_key` (`meta_key`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -LOCK TABLES `wp_postmeta` WRITE; -/*!40000 ALTER TABLE `wp_postmeta` DISABLE KEYS */; +LOCK TABLES `postmeta` WRITE; +/*!40000 ALTER TABLE `postmeta` DISABLE KEYS */; -INSERT INTO `wp_postmeta` (`meta_id`, `post_id`, `meta_key`, `meta_value`) +INSERT INTO `postmeta` (`meta_id`, `post_id`, `meta_key`, `meta_value`) VALUES (1,2,'_wp_page_template','default'), (2,2,'username','juniorgrossi'), @@ -331,16 +331,16 @@ VALUES (55, 18, '_menu_item_xfn', ''), (56, 18, '_menu_item_url', 'http://google.com'); -/*!40000 ALTER TABLE `wp_postmeta` ENABLE KEYS */; +/*!40000 ALTER TABLE `postmeta` ENABLE KEYS */; UNLOCK TABLES; -# Dump of table wp_posts +# Dump of table posts # ------------------------------------------------------------ -DROP TABLE IF EXISTS `wp_posts`; +DROP TABLE IF EXISTS `posts`; -CREATE TABLE `wp_posts` ( +CREATE TABLE `posts` ( `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `post_author` bigint(20) unsigned NOT NULL DEFAULT '0', `post_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', @@ -371,10 +371,10 @@ CREATE TABLE `wp_posts` ( KEY `post_author` (`post_author`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -LOCK TABLES `wp_posts` WRITE; -/*!40000 ALTER TABLE `wp_posts` DISABLE KEYS */; +LOCK TABLES `posts` WRITE; +/*!40000 ALTER TABLE `posts` DISABLE KEYS */; -INSERT INTO `wp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) +INSERT INTO `posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES (1,1,'2014-08-20 22:25:54','2014-08-20 22:25:54','Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!','Hello world!','','publish','open','open','','hello-world','','','2014-08-20 22:30:27','2014-08-20 22:30:27','',0,'http://localhost:8000/?p=1',0,'post','',1), (2,1,'2014-08-20 22:25:54','2014-08-20 22:25:54','This is an example page. It\'s different from a blog post because it will stay in one place and will show up in your site navigation (in most themes). Most people start with an About page that introduces them to potential site visitors. It might say something like this:\n\n
Hi there! I\'m a bike messenger by day, aspiring actor by night, and this is my blog. I live in Los Angeles, have a great dog named Jack, and I like piña coladas. (And gettin\' caught in the rain.)
\n\n...or something like this:\n\n
The XYZ Doohickey Company was founded in 1971, and has been providing quality doohickeys to the public ever since. Located in Gotham City, XYZ employs over 2,000 people and does all kinds of awesome things for the Gotham community.
\n\nAs a new WordPress user, you should go to your dashboard to delete this page and create new pages for your content. Have fun!','Sample Page','','publish','open','open','','sample-page','','','2014-08-20 22:25:54','2014-08-20 22:25:54','',0,'http://localhost:8000/?page_id=2',0,'page','',0), @@ -397,16 +397,16 @@ VALUES ; -/*!40000 ALTER TABLE `wp_posts` ENABLE KEYS */; +/*!40000 ALTER TABLE `posts` ENABLE KEYS */; UNLOCK TABLES; -# Dump of table wp_term_relationships +# Dump of table term_relationships # ------------------------------------------------------------ -DROP TABLE IF EXISTS `wp_term_relationships`; +DROP TABLE IF EXISTS `term_relationships`; -CREATE TABLE `wp_term_relationships` ( +CREATE TABLE `term_relationships` ( `object_id` bigint(20) unsigned NOT NULL DEFAULT '0', `term_taxonomy_id` bigint(20) unsigned NOT NULL DEFAULT '0', `term_order` int(11) NOT NULL DEFAULT '0', @@ -414,26 +414,26 @@ CREATE TABLE `wp_term_relationships` ( KEY `term_taxonomy_id` (`term_taxonomy_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -LOCK TABLES `wp_term_relationships` WRITE; -/*!40000 ALTER TABLE `wp_term_relationships` DISABLE KEYS */; +LOCK TABLES `term_relationships` WRITE; +/*!40000 ALTER TABLE `term_relationships` DISABLE KEYS */; -INSERT INTO `wp_term_relationships` (`object_id`, `term_taxonomy_id`, `term_order`) +INSERT INTO `term_relationships` (`object_id`, `term_taxonomy_id`, `term_order`) VALUES (1,2,0), (16,3,0), (17,3,0), (18,3,0); -/*!40000 ALTER TABLE `wp_term_relationships` ENABLE KEYS */; +/*!40000 ALTER TABLE `term_relationships` ENABLE KEYS */; UNLOCK TABLES; -# Dump of table wp_term_taxonomy +# Dump of table term_taxonomy # ------------------------------------------------------------ -DROP TABLE IF EXISTS `wp_term_taxonomy`; +DROP TABLE IF EXISTS `term_taxonomy`; -CREATE TABLE `wp_term_taxonomy` ( +CREATE TABLE `term_taxonomy` ( `term_taxonomy_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `term_id` bigint(20) unsigned NOT NULL DEFAULT '0', `taxonomy` varchar(32) NOT NULL DEFAULT '', @@ -445,25 +445,25 @@ CREATE TABLE `wp_term_taxonomy` ( KEY `taxonomy` (`taxonomy`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -LOCK TABLES `wp_term_taxonomy` WRITE; -/*!40000 ALTER TABLE `wp_term_taxonomy` DISABLE KEYS */; +LOCK TABLES `term_taxonomy` WRITE; +/*!40000 ALTER TABLE `term_taxonomy` DISABLE KEYS */; -INSERT INTO `wp_term_taxonomy` (`term_taxonomy_id`, `term_id`, `taxonomy`, `description`, `parent`, `count`) +INSERT INTO `term_taxonomy` (`term_taxonomy_id`, `term_id`, `taxonomy`, `description`, `parent`, `count`) VALUES (1,1,'category','',0,0), (2,2,'category','',0,1), (3,3,'nav_menu','',0,3); -/*!40000 ALTER TABLE `wp_term_taxonomy` ENABLE KEYS */; +/*!40000 ALTER TABLE `term_taxonomy` ENABLE KEYS */; UNLOCK TABLES; -# Dump of table wp_terms +# Dump of table terms # ------------------------------------------------------------ -DROP TABLE IF EXISTS `wp_terms`; +DROP TABLE IF EXISTS `terms`; -CREATE TABLE `wp_terms` ( +CREATE TABLE `terms` ( `term_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(200) NOT NULL DEFAULT '', `slug` varchar(200) NOT NULL DEFAULT '', @@ -473,25 +473,25 @@ CREATE TABLE `wp_terms` ( KEY `name` (`name`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -LOCK TABLES `wp_terms` WRITE; -/*!40000 ALTER TABLE `wp_terms` DISABLE KEYS */; +LOCK TABLES `terms` WRITE; +/*!40000 ALTER TABLE `terms` DISABLE KEYS */; -INSERT INTO `wp_terms` (`term_id`, `name`, `slug`, `term_group`) +INSERT INTO `terms` (`term_id`, `name`, `slug`, `term_group`) VALUES (1,'Uncategorized','uncategorized',0), (2,'php','php',0), (3,'Menu1','menu1',0); -/*!40000 ALTER TABLE `wp_terms` ENABLE KEYS */; +/*!40000 ALTER TABLE `terms` ENABLE KEYS */; UNLOCK TABLES; -# Dump of table wp_usermeta +# Dump of table usermeta # ------------------------------------------------------------ -DROP TABLE IF EXISTS `wp_usermeta`; +DROP TABLE IF EXISTS `usermeta`; -CREATE TABLE `wp_usermeta` ( +CREATE TABLE `usermeta` ( `umeta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `user_id` bigint(20) unsigned NOT NULL DEFAULT '0', `meta_key` varchar(255) DEFAULT NULL, @@ -501,10 +501,10 @@ CREATE TABLE `wp_usermeta` ( KEY `meta_key` (`meta_key`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -LOCK TABLES `wp_usermeta` WRITE; -/*!40000 ALTER TABLE `wp_usermeta` DISABLE KEYS */; +LOCK TABLES `usermeta` WRITE; +/*!40000 ALTER TABLE `usermeta` DISABLE KEYS */; -INSERT INTO `wp_usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) +INSERT INTO `usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES (1,1,'first_name',''), (2,1,'last_name',''), @@ -525,16 +525,16 @@ VALUES (17,2,'wp_capabilities','a:1:{s:13:\"administrator\";b:1;}'), (18,2,'wp_user_level','10'); -/*!40000 ALTER TABLE `wp_usermeta` ENABLE KEYS */; +/*!40000 ALTER TABLE `usermeta` ENABLE KEYS */; UNLOCK TABLES; -# Dump of table wp_users +# Dump of table users # ------------------------------------------------------------ -DROP TABLE IF EXISTS `wp_users`; +DROP TABLE IF EXISTS `users`; -CREATE TABLE `wp_users` ( +CREATE TABLE `users` ( `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `user_login` varchar(60) NOT NULL DEFAULT '', `user_pass` varchar(64) NOT NULL DEFAULT '', @@ -550,15 +550,15 @@ CREATE TABLE `wp_users` ( KEY `user_nicename` (`user_nicename`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -LOCK TABLES `wp_users` WRITE; -/*!40000 ALTER TABLE `wp_users` DISABLE KEYS */; +LOCK TABLES `users` WRITE; +/*!40000 ALTER TABLE `users` DISABLE KEYS */; -INSERT INTO `wp_users` (`ID`, `user_login`, `user_pass`, `user_nicename`, `user_email`, `user_url`, `user_registered`, `user_activation_key`, `user_status`, `display_name`) +INSERT INTO `users` (`ID`, `user_login`, `user_pass`, `user_nicename`, `user_email`, `user_url`, `user_registered`, `user_activation_key`, `user_status`, `display_name`) VALUES (1,'admin','$P$B2Lceeosw6Md2kOTwY1QAOq0XPG7kl.','admin','juniorgro@gmail.com','','2014-08-20 22:25:54','',0,'admin'), (2,'testuser','$P$B3XVcWLhmJ49k38ZJAf3ckouIIl1xZ.','testuser','testuser@gmail.com','','2015-08-20 22:25:54','',0,'testuser'); -/*!40000 ALTER TABLE `wp_users` ENABLE KEYS */; +/*!40000 ALTER TABLE `users` ENABLE KEYS */; UNLOCK TABLES; From bbcf086e987d52a3ee12a17960af98d4a69bcbb6 Mon Sep 17 00:00:00 2001 From: Junior Grossi Date: Thu, 17 Mar 2016 13:39:19 -0300 Subject: [PATCH 14/14] Remove no-prefix sql file --- tests/config/corcel-dev-without-prefix.sql | 497 --------------------- 1 file changed, 497 deletions(-) delete mode 100644 tests/config/corcel-dev-without-prefix.sql diff --git a/tests/config/corcel-dev-without-prefix.sql b/tests/config/corcel-dev-without-prefix.sql deleted file mode 100644 index 26ea44d2..00000000 --- a/tests/config/corcel-dev-without-prefix.sql +++ /dev/null @@ -1,497 +0,0 @@ -# ************************************************************ -# Sequel Pro SQL dump -# Version 4096 -# -# http://www.sequelpro.com/ -# http://code.google.com/p/sequel-pro/ -# -# Host: 127.0.0.1 (MySQL 5.6.25-log) -# Database: corcel-dev -# Generation Time: 2016-03-04 13:27:10 +0000 -# ************************************************************ - - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; - - -# Dump of table commentmeta -# ------------------------------------------------------------ - -DROP TABLE IF EXISTS `commentmeta`; - -CREATE TABLE `commentmeta` ( - `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `comment_id` bigint(20) unsigned NOT NULL DEFAULT '0', - `meta_key` varchar(255) DEFAULT NULL, - `meta_value` longtext, - PRIMARY KEY (`meta_id`), - KEY `comment_id` (`comment_id`), - KEY `meta_key` (`meta_key`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - - - -# Dump of table comments -# ------------------------------------------------------------ - -DROP TABLE IF EXISTS `comments`; - -CREATE TABLE `comments` ( - `comment_ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `comment_post_ID` bigint(20) unsigned NOT NULL DEFAULT '0', - `comment_author` tinytext NOT NULL, - `comment_author_email` varchar(100) NOT NULL DEFAULT '', - `comment_author_url` varchar(200) NOT NULL DEFAULT '', - `comment_author_IP` varchar(100) NOT NULL DEFAULT '', - `comment_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `comment_date_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `comment_content` text NOT NULL, - `comment_karma` int(11) NOT NULL DEFAULT '0', - `comment_approved` varchar(20) NOT NULL DEFAULT '1', - `comment_agent` varchar(255) NOT NULL DEFAULT '', - `comment_type` varchar(20) NOT NULL DEFAULT '', - `comment_parent` bigint(20) unsigned NOT NULL DEFAULT '0', - `user_id` bigint(20) unsigned NOT NULL DEFAULT '0', - PRIMARY KEY (`comment_ID`), - KEY `comment_post_ID` (`comment_post_ID`), - KEY `comment_approved_date_gmt` (`comment_approved`,`comment_date_gmt`), - KEY `comment_date_gmt` (`comment_date_gmt`), - KEY `comment_parent` (`comment_parent`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - - - -# Dump of table links -# ------------------------------------------------------------ - -DROP TABLE IF EXISTS `links`; - -CREATE TABLE `links` ( - `link_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `link_url` varchar(255) NOT NULL DEFAULT '', - `link_name` varchar(255) NOT NULL DEFAULT '', - `link_image` varchar(255) NOT NULL DEFAULT '', - `link_target` varchar(25) NOT NULL DEFAULT '', - `link_description` varchar(255) NOT NULL DEFAULT '', - `link_visible` varchar(20) NOT NULL DEFAULT 'Y', - `link_owner` bigint(20) unsigned NOT NULL DEFAULT '1', - `link_rating` int(11) NOT NULL DEFAULT '0', - `link_updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `link_rel` varchar(255) NOT NULL DEFAULT '', - `link_notes` mediumtext NOT NULL, - `link_rss` varchar(255) NOT NULL DEFAULT '', - PRIMARY KEY (`link_id`), - KEY `link_visible` (`link_visible`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - - - -# Dump of table options -# ------------------------------------------------------------ - -DROP TABLE IF EXISTS `options`; - -CREATE TABLE `options` ( - `option_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `option_name` varchar(64) NOT NULL DEFAULT '', - `option_value` longtext NOT NULL, - `autoload` varchar(20) NOT NULL DEFAULT 'yes', - PRIMARY KEY (`option_id`), - UNIQUE KEY `option_name` (`option_name`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - - - -# Dump of table postmeta -# ------------------------------------------------------------ - -DROP TABLE IF EXISTS `postmeta`; - -CREATE TABLE `postmeta` ( - `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `post_id` bigint(20) unsigned NOT NULL DEFAULT '0', - `meta_key` varchar(255) DEFAULT NULL, - `meta_value` longtext, - PRIMARY KEY (`meta_id`), - KEY `post_id` (`post_id`), - KEY `meta_key` (`meta_key`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - - - -# Dump of table posts -# ------------------------------------------------------------ - -DROP TABLE IF EXISTS `posts`; - -CREATE TABLE `posts` ( - `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `post_author` bigint(20) unsigned NOT NULL DEFAULT '0', - `post_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `post_date_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `post_content` longtext NOT NULL, - `post_title` text NOT NULL, - `post_excerpt` text NOT NULL, - `post_status` varchar(20) NOT NULL DEFAULT 'publish', - `comment_status` varchar(20) NOT NULL DEFAULT 'open', - `ping_status` varchar(20) NOT NULL DEFAULT 'open', - `post_password` varchar(20) NOT NULL DEFAULT '', - `post_name` varchar(200) NOT NULL DEFAULT '', - `to_ping` text NOT NULL, - `pinged` text NOT NULL, - `post_modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `post_modified_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `post_content_filtered` longtext NOT NULL, - `post_parent` bigint(20) unsigned NOT NULL DEFAULT '0', - `guid` varchar(255) NOT NULL DEFAULT '', - `menu_order` int(11) NOT NULL DEFAULT '0', - `post_type` varchar(20) NOT NULL DEFAULT 'post', - `post_mime_type` varchar(100) NOT NULL DEFAULT '', - `comment_count` bigint(20) NOT NULL DEFAULT '0', - PRIMARY KEY (`ID`), - KEY `post_name` (`post_name`), - KEY `type_status_date` (`post_type`,`post_status`,`post_date`,`ID`), - KEY `post_parent` (`post_parent`), - KEY `post_author` (`post_author`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - - - -# Dump of table relationships -# ------------------------------------------------------------ - -DROP TABLE IF EXISTS `relationships`; - -CREATE TABLE `relationships` ( - `object_id` bigint(20) unsigned NOT NULL DEFAULT '0', - `term_taxonomy_id` bigint(20) unsigned NOT NULL DEFAULT '0', - `term_order` int(11) NOT NULL DEFAULT '0', - PRIMARY KEY (`object_id`,`term_taxonomy_id`), - KEY `term_taxonomy_id` (`term_taxonomy_id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - - - -# Dump of table taxonomy -# ------------------------------------------------------------ - -DROP TABLE IF EXISTS `taxonomy`; - -CREATE TABLE `taxonomy` ( - `term_taxonomy_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `term_id` bigint(20) unsigned NOT NULL DEFAULT '0', - `taxonomy` varchar(32) NOT NULL DEFAULT '', - `description` longtext NOT NULL, - `parent` bigint(20) unsigned NOT NULL DEFAULT '0', - `count` bigint(20) NOT NULL DEFAULT '0', - PRIMARY KEY (`term_taxonomy_id`), - UNIQUE KEY `term_id_taxonomy` (`term_id`,`taxonomy`), - KEY `taxonomy` (`taxonomy`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - - - -# Dump of table terms -# ------------------------------------------------------------ - -DROP TABLE IF EXISTS `terms`; - -CREATE TABLE `terms` ( - `term_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `name` varchar(200) NOT NULL DEFAULT '', - `slug` varchar(200) NOT NULL DEFAULT '', - `term_group` bigint(10) NOT NULL DEFAULT '0', - PRIMARY KEY (`term_id`), - UNIQUE KEY `slug` (`slug`), - KEY `name` (`name`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - - - -# Dump of table usermeta -# ------------------------------------------------------------ - -DROP TABLE IF EXISTS `usermeta`; - -CREATE TABLE `usermeta` ( - `umeta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `user_id` bigint(20) unsigned NOT NULL DEFAULT '0', - `meta_key` varchar(255) DEFAULT NULL, - `meta_value` longtext, - PRIMARY KEY (`umeta_id`), - KEY `user_id` (`user_id`), - KEY `meta_key` (`meta_key`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - - - -# Dump of table users -# ------------------------------------------------------------ - -DROP TABLE IF EXISTS `users`; - -CREATE TABLE `users` ( - `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `user_login` varchar(60) NOT NULL DEFAULT '', - `user_pass` varchar(64) NOT NULL DEFAULT '', - `user_nicename` varchar(50) NOT NULL DEFAULT '', - `user_email` varchar(100) NOT NULL DEFAULT '', - `user_url` varchar(100) NOT NULL DEFAULT '', - `user_registered` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `user_activation_key` varchar(60) NOT NULL DEFAULT '', - `user_status` int(11) NOT NULL DEFAULT '0', - `display_name` varchar(250) NOT NULL DEFAULT '', - PRIMARY KEY (`ID`), - KEY `user_login_key` (`user_login`), - KEY `user_nicename` (`user_nicename`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - - - -# Dump of table wp_commentmeta -# ------------------------------------------------------------ - -DROP TABLE IF EXISTS `wp_commentmeta`; - -CREATE TABLE `wp_commentmeta` ( - `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `comment_id` bigint(20) unsigned NOT NULL DEFAULT '0', - `meta_key` varchar(255) DEFAULT NULL, - `meta_value` longtext, - PRIMARY KEY (`meta_id`), - KEY `comment_id` (`comment_id`), - KEY `meta_key` (`meta_key`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - - - -# Dump of table wp_comments -# ------------------------------------------------------------ - -DROP TABLE IF EXISTS `wp_comments`; - -CREATE TABLE `wp_comments` ( - `comment_ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `comment_post_ID` bigint(20) unsigned NOT NULL DEFAULT '0', - `comment_author` tinytext NOT NULL, - `comment_author_email` varchar(100) NOT NULL DEFAULT '', - `comment_author_url` varchar(200) NOT NULL DEFAULT '', - `comment_author_IP` varchar(100) NOT NULL DEFAULT '', - `comment_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `comment_date_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `comment_content` text NOT NULL, - `comment_karma` int(11) NOT NULL DEFAULT '0', - `comment_approved` varchar(20) NOT NULL DEFAULT '1', - `comment_agent` varchar(255) NOT NULL DEFAULT '', - `comment_type` varchar(20) NOT NULL DEFAULT '', - `comment_parent` bigint(20) unsigned NOT NULL DEFAULT '0', - `user_id` bigint(20) unsigned NOT NULL DEFAULT '0', - PRIMARY KEY (`comment_ID`), - KEY `comment_post_ID` (`comment_post_ID`), - KEY `comment_approved_date_gmt` (`comment_approved`,`comment_date_gmt`), - KEY `comment_date_gmt` (`comment_date_gmt`), - KEY `comment_parent` (`comment_parent`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - - - -# Dump of table wp_links -# ------------------------------------------------------------ - -DROP TABLE IF EXISTS `wp_links`; - -CREATE TABLE `wp_links` ( - `link_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `link_url` varchar(255) NOT NULL DEFAULT '', - `link_name` varchar(255) NOT NULL DEFAULT '', - `link_image` varchar(255) NOT NULL DEFAULT '', - `link_target` varchar(25) NOT NULL DEFAULT '', - `link_description` varchar(255) NOT NULL DEFAULT '', - `link_visible` varchar(20) NOT NULL DEFAULT 'Y', - `link_owner` bigint(20) unsigned NOT NULL DEFAULT '1', - `link_rating` int(11) NOT NULL DEFAULT '0', - `link_updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `link_rel` varchar(255) NOT NULL DEFAULT '', - `link_notes` mediumtext NOT NULL, - `link_rss` varchar(255) NOT NULL DEFAULT '', - PRIMARY KEY (`link_id`), - KEY `link_visible` (`link_visible`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - - - -# Dump of table wp_options -# ------------------------------------------------------------ - -DROP TABLE IF EXISTS `wp_options`; - -CREATE TABLE `wp_options` ( - `option_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `option_name` varchar(64) NOT NULL DEFAULT '', - `option_value` longtext NOT NULL, - `autoload` varchar(20) NOT NULL DEFAULT 'yes', - PRIMARY KEY (`option_id`), - UNIQUE KEY `option_name` (`option_name`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - - - -# Dump of table wp_postmeta -# ------------------------------------------------------------ - -DROP TABLE IF EXISTS `wp_postmeta`; - -CREATE TABLE `wp_postmeta` ( - `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `post_id` bigint(20) unsigned NOT NULL DEFAULT '0', - `meta_key` varchar(255) DEFAULT NULL, - `meta_value` longtext, - PRIMARY KEY (`meta_id`), - KEY `post_id` (`post_id`), - KEY `meta_key` (`meta_key`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - - - -# Dump of table wp_posts -# ------------------------------------------------------------ - -DROP TABLE IF EXISTS `wp_posts`; - -CREATE TABLE `wp_posts` ( - `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `post_author` bigint(20) unsigned NOT NULL DEFAULT '0', - `post_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `post_date_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `post_content` longtext NOT NULL, - `post_title` text NOT NULL, - `post_excerpt` text NOT NULL, - `post_status` varchar(20) NOT NULL DEFAULT 'publish', - `comment_status` varchar(20) NOT NULL DEFAULT 'open', - `ping_status` varchar(20) NOT NULL DEFAULT 'open', - `post_password` varchar(20) NOT NULL DEFAULT '', - `post_name` varchar(200) NOT NULL DEFAULT '', - `to_ping` text NOT NULL, - `pinged` text NOT NULL, - `post_modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `post_modified_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `post_content_filtered` longtext NOT NULL, - `post_parent` bigint(20) unsigned NOT NULL DEFAULT '0', - `guid` varchar(255) NOT NULL DEFAULT '', - `menu_order` int(11) NOT NULL DEFAULT '0', - `post_type` varchar(20) NOT NULL DEFAULT 'post', - `post_mime_type` varchar(100) NOT NULL DEFAULT '', - `comment_count` bigint(20) NOT NULL DEFAULT '0', - PRIMARY KEY (`ID`), - KEY `post_name` (`post_name`), - KEY `type_status_date` (`post_type`,`post_status`,`post_date`,`ID`), - KEY `post_parent` (`post_parent`), - KEY `post_author` (`post_author`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - - - -# Dump of table wp_term_relationships -# ------------------------------------------------------------ - -DROP TABLE IF EXISTS `wp_term_relationships`; - -CREATE TABLE `wp_term_relationships` ( - `object_id` bigint(20) unsigned NOT NULL DEFAULT '0', - `term_taxonomy_id` bigint(20) unsigned NOT NULL DEFAULT '0', - `term_order` int(11) NOT NULL DEFAULT '0', - PRIMARY KEY (`object_id`,`term_taxonomy_id`), - KEY `term_taxonomy_id` (`term_taxonomy_id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - - - -# Dump of table wp_term_taxonomy -# ------------------------------------------------------------ - -DROP TABLE IF EXISTS `wp_term_taxonomy`; - -CREATE TABLE `wp_term_taxonomy` ( - `term_taxonomy_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `term_id` bigint(20) unsigned NOT NULL DEFAULT '0', - `taxonomy` varchar(32) NOT NULL DEFAULT '', - `description` longtext NOT NULL, - `parent` bigint(20) unsigned NOT NULL DEFAULT '0', - `count` bigint(20) NOT NULL DEFAULT '0', - PRIMARY KEY (`term_taxonomy_id`), - UNIQUE KEY `term_id_taxonomy` (`term_id`,`taxonomy`), - KEY `taxonomy` (`taxonomy`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - - - -# Dump of table wp_terms -# ------------------------------------------------------------ - -DROP TABLE IF EXISTS `wp_terms`; - -CREATE TABLE `wp_terms` ( - `term_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `name` varchar(200) NOT NULL DEFAULT '', - `slug` varchar(200) NOT NULL DEFAULT '', - `term_group` bigint(10) NOT NULL DEFAULT '0', - PRIMARY KEY (`term_id`), - UNIQUE KEY `slug` (`slug`), - KEY `name` (`name`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - - - -# Dump of table wp_usermeta -# ------------------------------------------------------------ - -DROP TABLE IF EXISTS `wp_usermeta`; - -CREATE TABLE `wp_usermeta` ( - `umeta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `user_id` bigint(20) unsigned NOT NULL DEFAULT '0', - `meta_key` varchar(255) DEFAULT NULL, - `meta_value` longtext, - PRIMARY KEY (`umeta_id`), - KEY `user_id` (`user_id`), - KEY `meta_key` (`meta_key`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - - - -# Dump of table wp_users -# ------------------------------------------------------------ - -DROP TABLE IF EXISTS `wp_users`; - -CREATE TABLE `wp_users` ( - `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `user_login` varchar(60) NOT NULL DEFAULT '', - `user_pass` varchar(64) NOT NULL DEFAULT '', - `user_nicename` varchar(50) NOT NULL DEFAULT '', - `user_email` varchar(100) NOT NULL DEFAULT '', - `user_url` varchar(100) NOT NULL DEFAULT '', - `user_registered` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `user_activation_key` varchar(60) NOT NULL DEFAULT '', - `user_status` int(11) NOT NULL DEFAULT '0', - `display_name` varchar(250) NOT NULL DEFAULT '', - PRIMARY KEY (`ID`), - KEY `user_login_key` (`user_login`), - KEY `user_nicename` (`user_nicename`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - - - - -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;