Child Themify - Version 1.0.3

Version Description

  • Released: 2014-04-15
  • Standardized theme action links shim. See https://github.com/johnpbloch/child-themify/issues/2 for more information
  • Maintenance, code cleanup, bug fixes
Download this release

Release Info

Developer JohnPBloch
Plugin Icon wp plugin Child Themify
Version 1.0.3
Comparing to
See all releases

Code changes from version 1.0.2 to 1.0.3

assets/js/child-themify.js DELETED
@@ -1,78 +0,0 @@
1
- (function (window, l10n, undefined) {
2
- var $ = window.jQuery,
3
- themes = window.wp.themes,
4
- themesView,
5
- themeViews = {};
6
-
7
- function createUrl(theme) {
8
- var link = window.location.href;
9
- if (link.indexOf('?')) {
10
- link = link.substr(0, link.indexOf('?'));
11
- }
12
- link += '?action=child-themify';
13
- link += '&theme=' + theme;
14
- link += '&_ctf_nonce=' + l10n.nonce;
15
-
16
- return link;
17
- }
18
-
19
- function injectLinks(into, model) {
20
- if (model.get('parent')) {
21
- return;
22
- }
23
- var className = '.theme-actions .' + (model.get('active') ? '' : 'in') + 'active-theme',
24
- links = into.find(className),
25
- link = createUrl(model.id);
26
- if (links.length) {
27
- links.first().append('<a href="' + link + '" class="button button-secondary">' +
28
- l10n.createAChildTheme +
29
- '</a>');
30
- }
31
- }
32
-
33
- function onExpand() {
34
- window.setTimeout(function () {
35
- injectLinks(themesView.overlay.$el, themesView.model);
36
- }, 30);
37
- }
38
-
39
- function initialize() {
40
- var index,
41
- obj,
42
- listeners = themesView._listeners,
43
- count = 0;
44
- for (index in listeners) {
45
- if (listeners.hasOwnProperty(index)) {
46
- obj = listeners[index];
47
- if (obj instanceof themes.view.Theme) {
48
- themeViews[obj.model.id] = obj;
49
- count += 1;
50
- }
51
- }
52
- }
53
-
54
- if (count === 1) {
55
- injectLinks(themesView.singleTheme.$el, themesView.model);
56
- } else if (count > 0) {
57
- for (index in themeViews) {
58
- if (themeViews.hasOwnProperty(index)) {
59
- themesView.listenTo(themeViews[index], 'theme:expand', onExpand);
60
- }
61
- }
62
- }
63
- }
64
-
65
- function onLoad() {
66
- themesView = themes.Run.view.view;
67
-
68
- initialize();
69
-
70
- if (undefined !== themes.data.settings.theme && '' !== themes.data.settings.theme) {
71
- injectLinks(themesView.overlay.$el, themesView.model);
72
- }
73
-
74
- themesView.listenTo(themesView.collection, 'update', initialize);
75
- }
76
-
77
- $(onLoad);
78
- }(window, window.childThemify));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/child-themify.min.js DELETED
@@ -1,2 +0,0 @@
1
- /*! Child Themify - v1.0.2
2
- * Copyright (c) 2014 John P. Bloch */!function(a,b,c){function d(c){var d=a.location.href;return d.indexOf("?")&&(d=d.substr(0,d.indexOf("?"))),d+="?action=child-themify",d+="&theme="+c,d+="&_ctf_nonce="+b.nonce}function e(a,c){if(!c.get("parent")){var e=".theme-actions ."+(c.get("active")?"":"in")+"active-theme",f=a.find(e),g=d(c.id);f.length&&f.first().append('<a href="'+g+'" class="button button-secondary">'+b.createAChildTheme+"</a>")}}function f(){a.setTimeout(function(){e(i.overlay.$el,i.model)},30)}function g(){var a,b,c=i._listeners,d=0;for(a in c)c.hasOwnProperty(a)&&(b=c[a],b instanceof k.view.Theme&&(l[b.model.id]=b,d+=1));if(1===d)e(i.singleTheme.$el,i.model);else if(d>0)for(a in l)l.hasOwnProperty(a)&&i.listenTo(l[a],"theme:expand",f)}function h(){i=k.Run.view.view,g(),c!==k.data.settings.theme&&""!==k.data.settings.theme&&e(i.overlay.$el,i.model),i.listenTo(i.collection,"update",g)}var i,j=a.jQuery,k=a.wp.themes,l={};j(h)}(window,window.childThemify);
 
 
assets/js/legacy.js CHANGED
@@ -1,3 +1,5 @@
 
 
1
  (function (window, l10n) {
2
  if (typeof l10n.link !== 'string' || l10n.link.length < 1) {
3
  return;
1
+ /*! Child Themify - v1.0.3
2
+ * Copyright (c) 2014 John P. Bloch */
3
  (function (window, l10n) {
4
  if (typeof l10n.link !== 'string' || l10n.link.length < 1) {
5
  return;
assets/js/legacy.min.js CHANGED
@@ -1,2 +1,3 @@
1
- /*! Child Themify - v1.0.2
2
- * Copyright (c) 2014 John P. Bloch */!function(a,b){if(!("string"!=typeof b.link||b.link.length<1)){var c,d,e,f,g=a.document,h=g.getElementById("customize-current-theme-link");if(h){h=h.parentNode;for(c in h.childNodes)if(h.childNodes.hasOwnProperty(c)&&void 0!==h.childNodes[c].nodeName&&"UL"===h.childNodes[c].nodeName.toUpperCase()){d=h.childNodes[c];break}d&&(f=g.createElement("a"),f.appendChild(g.createTextNode(b.createAChildTheme)),f.href=b.link,e=g.createElement("li"),e.appendChild(f),d.appendChild(e))}}}(window,window.childThemify);
 
1
+ /*! Child Themify - v1.0.3
2
+ * Copyright (c) 2014 John P. Bloch */
3
+ !function(a,b){if(!("string"!=typeof b.link||b.link.length<1)){var c,d,e,f,g=a.document,h=g.getElementById("customize-current-theme-link");if(h){h=h.parentNode;for(c in h.childNodes)if(h.childNodes.hasOwnProperty(c)&&void 0!==h.childNodes[c].nodeName&&"UL"===h.childNodes[c].nodeName.toUpperCase()){d=h.childNodes[c];break}d&&(f=g.createElement("a"),f.appendChild(g.createTextNode(b.createAChildTheme)),f.href=b.link,e=g.createElement("li"),e.appendChild(f),d.appendChild(e))}}}(window,window.childThemify);
child-themify.php CHANGED
@@ -1,16 +1,16 @@
1
  <?php
2
  /*
3
  * Plugin Name: Child Themify
4
- * Description: Enables the quick creation of child themes from any non-child theme you have installed.
5
- * Version: 1.0.2
6
  * Plugin URI: https://github.com/johnpbloch/child-themify
7
  * Author: John P. Bloch
8
- * License: GPLv2 or later
9
  */
10
 
11
  define( 'CTF_PATH', WP_PLUGIN_DIR . '/' . basename( dirname( __FILE__ ) ) . '/' . basename( __FILE__ ) );
12
  define( 'CTF_URL', WP_PLUGIN_URL . '/' . basename( dirname( __FILE__ ) ) . '/' . basename( __FILE__ ) );
13
- define( 'CTF_VERSION', '1.0.2' );
14
 
15
 
16
  function ctf_plugins_loaded() {
1
  <?php
2
  /*
3
  * Plugin Name: Child Themify
4
+ * Description: Create child themes at the click of a button.
5
+ * Version: 1.0.3
6
  * Plugin URI: https://github.com/johnpbloch/child-themify
7
  * Author: John P. Bloch
8
+ * License: GPL-2.0+
9
  */
10
 
11
  define( 'CTF_PATH', WP_PLUGIN_DIR . '/' . basename( dirname( __FILE__ ) ) . '/' . basename( __FILE__ ) );
12
  define( 'CTF_URL', WP_PLUGIN_URL . '/' . basename( dirname( __FILE__ ) ) . '/' . basename( __FILE__ ) );
13
+ define( 'CTF_VERSION', '1.0.3' );
14
 
15
 
16
  function ctf_plugins_loaded() {
includes/plugin.php CHANGED
@@ -30,17 +30,25 @@ class Child_Themify {
30
  }
31
 
32
  /**
 
 
33
  * @return string
34
  */
35
- public function nonce() {
36
- return wp_create_nonce( $this->nonceName() );
37
  }
38
 
39
  /**
 
 
40
  * @return string
41
  */
42
- public function nonceName() {
43
- return "child_themify";
 
 
 
 
44
  }
45
 
46
  public function showInterface() {
@@ -187,16 +195,12 @@ EOF;
187
  }
188
 
189
  public function loadThemesPage() {
190
- if ( ! $this->isChildThemifyPage() ) {
191
- if ( ! is_multisite() ) {
192
- add_action( 'admin_footer', array( $this, 'linkThemes' ) );
193
- }
194
- return;
195
  }
196
- $this->loadFile( ABSPATH . 'wp-admin/admin-header.php' );
197
- $this->showInterface();
198
- $this->loadFile( ABSPATH . 'wp-admin/admin-footer.php' );
199
- exit;
200
  }
201
 
202
  public function loadFile( $file ) {
@@ -207,23 +211,113 @@ EOF;
207
  return ( ! empty( $_GET['action'] ) && $_GET['action'] === 'child-themify' );
208
  }
209
 
210
- public function linkThemes() {
211
- if ( ! $this->checkCapability() ) {
212
- return;
213
- }
214
- $js = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? 'js' : 'min.js';
215
- $filename = "assets/js/child-themify.$js";
216
- wp_enqueue_script( 'child-themify', plugins_url( $filename, CTF_PATH ), array( 'theme' ), CTF_VERSION, true );
217
- wp_localize_script( 'child-themify', 'childThemify', array(
218
- 'createAChildTheme' => __( 'Create a child theme', 'child-themify' ),
219
- 'nonce' => $this->nonce(),
220
- ) );
221
- }
222
-
223
  public function init() {
224
  load_plugin_textdomain( 'child-themify', false, basename( dirname( __FILE__ ) ) . '/languages' );
225
  add_filter( 'theme_action_links', array( $this, 'addActionLink' ), 10, 2 );
226
  add_action( 'load-themes.php', array( $this, 'loadThemesPage' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
227
  }
228
 
229
  }
30
  }
31
 
32
  /**
33
+ * @param WP_Theme $theme
34
+ *
35
  * @return string
36
  */
37
+ public function nonce( WP_Theme $theme = null ) {
38
+ return wp_create_nonce( $this->nonceName( $theme ) );
39
  }
40
 
41
  /**
42
+ * @param WP_Theme $theme
43
+ *
44
  * @return string
45
  */
46
+ public function nonceName( WP_Theme $theme = null ) {
47
+ $nonce_name = 'child_themify';
48
+ if ( $theme ) {
49
+ $nonce_name .= '_' . $theme->get_stylesheet();
50
+ }
51
+ return $nonce_name;
52
  }
53
 
54
  public function showInterface() {
195
  }
196
 
197
  public function loadThemesPage() {
198
+ if ( $this->isChildThemifyPage() ) {
199
+ $this->loadFile( ABSPATH . 'wp-admin/admin-header.php' );
200
+ $this->showInterface();
201
+ $this->loadFile( ABSPATH . 'wp-admin/admin-footer.php' );
202
+ exit;
203
  }
 
 
 
 
204
  }
205
 
206
  public function loadFile( $file ) {
211
  return ( ! empty( $_GET['action'] ) && $_GET['action'] === 'child-themify' );
212
  }
213
 
 
 
 
 
 
 
 
 
 
 
 
 
 
214
  public function init() {
215
  load_plugin_textdomain( 'child-themify', false, basename( dirname( __FILE__ ) ) . '/languages' );
216
  add_filter( 'theme_action_links', array( $this, 'addActionLink' ), 10, 2 );
217
  add_action( 'load-themes.php', array( $this, 'loadThemesPage' ) );
218
+ if ( version_compare( $GLOBALS['wp_version'], '3.9.9', '<' ) ) {
219
+ add_action( 'admin_footer-themes.php', array( $this, 'override_tmpl_theme_single' ) );
220
+ }
221
+ add_action( 'tmpl-theme-single_actions', array( $this, 'tmpl_theme_single_actions' ) );
222
+ add_filter( 'wp_prepare_themes_for_js', array( $this, 'prepare_themes' ) );
223
+ }
224
+
225
+ public function override_tmpl_theme_single() {
226
+ ?>
227
+ <script>
228
+ var tts = document.getElementById('tmpl-theme-single');
229
+ if (tts.parentNode) {
230
+ tts.parentNode.removeChild(tts);
231
+ }
232
+ </script>
233
+ <script id="tmpl-theme-single" type="text/template">
234
+ <div class="theme-backdrop"></div>
235
+ <div class="theme-wrap">
236
+ <div class="theme-header">
237
+ <button class="left dashicons dashicons-no"><span class="screen-reader-text"><?php _e( 'Show previous theme' ); ?></span></button>
238
+ <button class="right dashicons dashicons-no"><span class="screen-reader-text"><?php _e( 'Show next theme' ); ?></span></button>
239
+ <button class="close dashicons dashicons-no"><span class="screen-reader-text"><?php _e( 'Close overlay' ); ?></span></button>
240
+ </div>
241
+ <div class="theme-about">
242
+ <div class="theme-screenshots">
243
+ <# if ( data.screenshot[0] ) { #>
244
+ <div class="screenshot">
245
+ <img src="{{ data.screenshot[0] }}" alt="" />
246
+ </div>
247
+ <# } else { #>
248
+ <div class="screenshot blank"></div>
249
+ <# } #>
250
+ </div>
251
+
252
+ <div class="theme-info">
253
+ <# if ( data.active ) { #>
254
+ <span class="current-label"><?php _e( 'Current Theme' ); ?></span>
255
+ <# } #>
256
+ <h3 class="theme-name">{{{ data.name }}}<span class="theme-version"><?php printf( __( 'Version: %s' ), '{{{ data.version }}}' ); ?></span></h3>
257
+ <h4 class="theme-author"><?php printf( __( 'By %s' ), '{{{ data.authorAndUri }}}' ); ?></h4>
258
+
259
+ <# if ( data.hasUpdate ) { #>
260
+ <div class="theme-update-message">
261
+ <h4 class="theme-update"><?php _e( 'Update Available' ); ?></h4>
262
+ {{{ data.update }}}
263
+ </div>
264
+ <# } #>
265
+ <p class="theme-description">{{{ data.description }}}</p>
266
+
267
+ <# if ( data.parent ) { #>
268
+ <p class="parent-theme"><?php printf( __( 'This is a child theme of %s.' ), '<strong>{{{ data.parent }}}</strong>' ); ?></p>
269
+ <# } #>
270
+
271
+ <# if ( data.tags ) { #>
272
+ <p class="theme-tags"><span><?php _e( 'Tags:' ); ?></span> {{{ data.tags }}}</p>
273
+ <# } #>
274
+ </div>
275
+ </div>
276
+
277
+ <div class="theme-actions">
278
+ <div class="active-theme">
279
+ <a href="{{{ data.actions.customize }}}" class="button button-primary customize load-customize hide-if-no-customize"><?php _e( 'Customize' ); ?></a>
280
+ <?php echo implode( ' ', $GLOBALS['current_theme_actions'] ); ?>
281
+ <?php do_action( 'tmpl-theme-single_actions', 'active' ); ?>
282
+ </div>
283
+ <div class="inactive-theme">
284
+ <# if ( data.actions.activate ) { #>
285
+ <a href="{{{ data.actions.activate }}}" class="button button-primary activate"><?php _e( 'Activate' ); ?></a>
286
+ <# } #>
287
+ <a href="{{{ data.actions.customize }}}" class="button button-secondary load-customize hide-if-no-customize"><?php _e( 'Live Preview' ); ?></a>
288
+ <a href="{{{ data.actions.preview }}}" class="button button-secondary hide-if-customize"><?php _e( 'Preview' ); ?></a>
289
+ <?php do_action( 'tmpl-theme-single_actions', 'inactive' ); ?>
290
+ </div>
291
+
292
+ <# if ( ! data.active && data.actions['delete'] ) { #>
293
+ <a href="{{{ data.actions['delete'] }}}" class="button button-secondary delete-theme"><?php _e( 'Delete' ); ?></a>
294
+ <# } #>
295
+ </div>
296
+ </div>
297
+ </script>
298
+ <?php
299
+ // End single theme template shim
300
+ }
301
+
302
+ public function tmpl_theme_single_actions() {
303
+ ?>
304
+ <# if ( data.actions.childThemify ) { #>
305
+ <a href="{{{ data.actions.childThemify }}}" class="button button-secondary" title="<?php esc_attr_e( 'Create a child theme', 'child-themify' ); ?>"><?php esc_attr_e( 'Create a child theme', 'child-themify' ); ?></a>
306
+ <# } #>
307
+ <?php
308
+ // End single action for CTF
309
+ }
310
+
311
+ public function prepare_themes( $themes ) {
312
+ if ( $this->checkCapability() ) {
313
+ foreach ( $themes as $slug => $data ) {
314
+ $theme = wp_get_theme( $slug );
315
+ $download_link = $this->getLink( $theme );
316
+
317
+ $themes[$slug]['actions']['childThemify'] = $download_link ? $download_link : false;
318
+ }
319
+ }
320
+ return $themes;
321
  }
322
 
323
  }
languages/child-themify.pot CHANGED
@@ -1,46 +1,103 @@
1
- # Copyright (C) 2012 Child Themify
2
  # This file is distributed under the same license as the Child Themify package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Child Themify 0.1-alpha\n"
6
- "Report-Msgid-Bugs-To: http://wordpress.org/tag/child-themify\n"
7
- "POT-Creation-Date: 2012-12-31 17:13:34+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2012-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
  "Language-Team: LANGUAGE <LL@li.org>\n"
14
 
15
- #: child-themify.php:21
16
  msgid "You do not have permission to do that!"
17
  msgstr ""
18
 
19
- #: child-themify.php:47
20
  msgctxt "The placeholder is for a theme's name"
21
  msgid "Create a child theme from %s"
22
  msgstr ""
23
 
24
- #: child-themify.php:49
25
  msgid "Name your child theme"
26
  msgstr ""
27
 
28
- #: child-themify.php:51
29
  msgid "Let's go!"
30
  msgstr ""
31
 
32
- #: child-themify.php:111 child-themify.php:171
 
33
  msgid "Create a child theme"
34
  msgstr ""
35
 
36
- #: child-themify.php:128
37
  msgid "Could not access the filesystem!"
38
  msgstr ""
39
 
40
- #: child-themify.php:149
41
  msgid "Your child theme was created successfully."
42
  msgstr ""
43
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  #. Plugin Name of the plugin/theme
45
  msgid "Child Themify"
46
  msgstr ""
@@ -50,9 +107,7 @@ msgid "https://github.com/johnpbloch/child-themify"
50
  msgstr ""
51
 
52
  #. Description of the plugin/theme
53
- msgid ""
54
- "Enables the quick creation of child themes from any non-child theme you have "
55
- "installed."
56
  msgstr ""
57
 
58
  #. Author of the plugin/theme
1
+ # Copyright (C) 2014 Child Themify
2
  # This file is distributed under the same license as the Child Themify package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Child Themify 1.0.3\n"
6
+ "Report-Msgid-Bugs-To: http://wordpress.org/support/plugin/child-themify\n"
7
+ "POT-Creation-Date: 2014-04-15 15:22:30+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2014-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
  "Language-Team: LANGUAGE <LL@li.org>\n"
14
 
15
+ #: includes/legacy.php:13 includes/plugin.php:14
16
  msgid "You do not have permission to do that!"
17
  msgstr ""
18
 
19
+ #: includes/legacy.php:39 includes/plugin.php:70
20
  msgctxt "The placeholder is for a theme's name"
21
  msgid "Create a child theme from %s"
22
  msgstr ""
23
 
24
+ #: includes/legacy.php:42 includes/plugin.php:73
25
  msgid "Name your child theme"
26
  msgstr ""
27
 
28
+ #: includes/legacy.php:44 includes/plugin.php:75
29
  msgid "Let's go!"
30
  msgstr ""
31
 
32
+ #: includes/legacy.php:106 includes/legacy.php:169 includes/plugin.php:153
33
+ #: includes/plugin.php:305
34
  msgid "Create a child theme"
35
  msgstr ""
36
 
37
+ #: includes/legacy.php:125 includes/plugin.php:173
38
  msgid "Could not access the filesystem!"
39
  msgstr ""
40
 
41
+ #: includes/legacy.php:146 includes/plugin.php:194
42
  msgid "Your child theme was created successfully."
43
  msgstr ""
44
 
45
+ #: includes/plugin.php:237
46
+ msgid "Show previous theme"
47
+ msgstr ""
48
+
49
+ #: includes/plugin.php:238
50
+ msgid "Show next theme"
51
+ msgstr ""
52
+
53
+ #: includes/plugin.php:239
54
+ msgid "Close overlay"
55
+ msgstr ""
56
+
57
+ #: includes/plugin.php:254
58
+ msgid "Current Theme"
59
+ msgstr ""
60
+
61
+ #: includes/plugin.php:256
62
+ msgid "Version: %s"
63
+ msgstr ""
64
+
65
+ #: includes/plugin.php:257
66
+ msgid "By %s"
67
+ msgstr ""
68
+
69
+ #: includes/plugin.php:261
70
+ msgid "Update Available"
71
+ msgstr ""
72
+
73
+ #: includes/plugin.php:268
74
+ msgid "This is a child theme of %s."
75
+ msgstr ""
76
+
77
+ #: includes/plugin.php:272
78
+ msgid "Tags:"
79
+ msgstr ""
80
+
81
+ #: includes/plugin.php:279
82
+ msgid "Customize"
83
+ msgstr ""
84
+
85
+ #: includes/plugin.php:285
86
+ msgid "Activate"
87
+ msgstr ""
88
+
89
+ #: includes/plugin.php:287
90
+ msgid "Live Preview"
91
+ msgstr ""
92
+
93
+ #: includes/plugin.php:288
94
+ msgid "Preview"
95
+ msgstr ""
96
+
97
+ #: includes/plugin.php:293
98
+ msgid "Delete"
99
+ msgstr ""
100
+
101
  #. Plugin Name of the plugin/theme
102
  msgid "Child Themify"
103
  msgstr ""
107
  msgstr ""
108
 
109
  #. Description of the plugin/theme
110
+ msgid "Create child themes at the click of a button."
 
 
111
  msgstr ""
112
 
113
  #. Author of the plugin/theme
readme.txt CHANGED
@@ -2,9 +2,9 @@
2
  Contributors: JohnPBloch
3
  Tags: themes, child, theme
4
  Requires at least: 3.4.2
5
- Tested up to: 3.8
6
- Stable tag: 1.0.2
7
- License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
10
  Create child themes at the click of a button.
@@ -18,8 +18,8 @@ This plugin is multisite compatible; if used on a multisite network, controls fo
18
  == Installation ==
19
 
20
  1. Upload the `child-themify` directory and its contents to the `/wp-content/plugins/` directory (or your custom location if you manually changed the location).
21
- 1. Activate the plugin through the 'Plugins' menu in WordPress
22
- 1. You can now create a child theme of any non-child theme you have installed by going to the themes page and clicking "Create a child theme" from the actions links of the theme of your choice.
23
 
24
  == Frequently Asked Questions ==
25
 
@@ -32,19 +32,24 @@ None yet.
32
 
33
  == Changelog ==
34
 
 
 
 
 
 
35
  = 1.0.2 =
 
36
  * Added support for WP 3.8
37
 
38
  = 1.0.1 =
 
39
  * Add a semicolon to the end of the @import line in the stylesheet. Props to Luis Alejandre (wpthemedetector.com) for finding and solving.
40
 
41
  = 1.0 =
 
42
  * Initial Release
43
 
44
  == Upgrade Notice ==
45
 
46
- = 1.0.2 =
47
- This version fixes the plugin in WordPress 3.8
48
 
49
- = 1.0.1 =
50
- This version fixes a bug that will prevent some users' css from taking effect in new child themes.
2
  Contributors: JohnPBloch
3
  Tags: themes, child, theme
4
  Requires at least: 3.4.2
5
+ Tested up to: 3.9
6
+ Stable tag: 1.0.3
7
+ License: GPL-2.0+
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
10
  Create child themes at the click of a button.
18
  == Installation ==
19
 
20
  1. Upload the `child-themify` directory and its contents to the `/wp-content/plugins/` directory (or your custom location if you manually changed the location).
21
+ 2. Activate the plugin through the 'Plugins' menu in WordPress
22
+ 3. You can now create a child theme of any non-child theme you have installed by going to the themes page and clicking "Create a child theme" from the actions links of the theme of your choice.
23
 
24
  == Frequently Asked Questions ==
25
 
32
 
33
  == Changelog ==
34
 
35
+ = 1.0.3 =
36
+ * Released: 2014-04-15
37
+ * Standardized theme action links shim. See https://github.com/johnpbloch/child-themify/issues/2 for more information
38
+ * Maintenance, code cleanup, bug fixes
39
+
40
  = 1.0.2 =
41
+ * Released: 2014-01-13
42
  * Added support for WP 3.8
43
 
44
  = 1.0.1 =
45
+ * Released: 2013-01-18
46
  * Add a semicolon to the end of the @import line in the stylesheet. Props to Luis Alejandre (wpthemedetector.com) for finding and solving.
47
 
48
  = 1.0 =
49
+ * Released: 2012-12-31
50
  * Initial Release
51
 
52
  == Upgrade Notice ==
53
 
54
+ This version cleans up 3.8+ compatibility and ensures 3.9 compatibility
 
55