diff --git src/wp-admin/includes/plugin.php src/wp-admin/includes/plugin.php
index 233d990..f26637c 100644
|
|
|
46 | 46 | * - 'TextDomain' - Plugin's text domain for localization. |
47 | 47 | * - 'DomainPath' - Plugin's relative directory path to .mo files. |
48 | 48 | * - 'Network' - Boolean. Whether the plugin can only be activated network wide. |
| 49 | * - 'Private' - Boolean. Whether the plugin should be excluded from update checks. |
49 | 50 | * |
50 | 51 | * Some users have issues with opening large files and manipulating the contents |
51 | 52 | * for want is usually the first 1kiB or 2kiB. This function stops pulling in |
… |
… |
function get_plugin_data( $plugin_file, $markup = true, $translate = true ) { |
81 | 82 | 'TextDomain' => 'Text Domain', |
82 | 83 | 'DomainPath' => 'Domain Path', |
83 | 84 | 'Network' => 'Network', |
| 85 | 'Private' => 'Private', |
84 | 86 | // Site Wide Only is deprecated in favor of Network. |
85 | 87 | '_sitewide' => 'Site Wide Only', |
86 | 88 | ); |
… |
… |
function get_plugin_data( $plugin_file, $markup = true, $translate = true ) { |
95 | 97 | $plugin_data['Network'] = ( 'true' == strtolower( $plugin_data['Network'] ) ); |
96 | 98 | unset( $plugin_data['_sitewide'] ); |
97 | 99 | |
| 100 | $plugin_data['Private'] = ( 'true' == strtolower( $plugin_data['Private'] ) ); |
| 101 | |
98 | 102 | if ( $markup || $translate ) { |
99 | 103 | $plugin_data = _get_plugin_data_markup_translate( $plugin_file, $plugin_data, $markup, $translate ); |
100 | 104 | } else { |
diff --git src/wp-includes/class-wp-theme.php src/wp-includes/class-wp-theme.php
index ad70a4b..223040a 100644
|
|
final class WP_Theme implements ArrayAccess { |
27 | 27 | 'Tags' => 'Tags', |
28 | 28 | 'TextDomain' => 'Text Domain', |
29 | 29 | 'DomainPath' => 'Domain Path', |
| 30 | 'Private' => 'Private', |
30 | 31 | ); |
31 | 32 | |
32 | 33 | /** |
… |
… |
final class WP_Theme implements ArrayAccess { |
565 | 566 | * @since 3.4.0 |
566 | 567 | * @access public |
567 | 568 | * |
568 | | * @param string $header Theme header. Name, Description, Author, Version, ThemeURI, AuthorURI, Status, Tags. |
| 569 | * @param string $header Theme header. Name, Description, Author, Version, ThemeURI, AuthorURI, Status, Tags, Private. |
569 | 570 | * @return string|false String on success, false on failure. |
570 | 571 | */ |
571 | 572 | public function get( $header ) { |
… |
… |
final class WP_Theme implements ArrayAccess { |
670 | 671 | case 'AuthorURI' : |
671 | 672 | $value = esc_url_raw( $value ); |
672 | 673 | break; |
| 674 | case 'Private' : |
| 675 | $value = 'true' === strtolower( $value ); |
| 676 | break; |
673 | 677 | case 'Tags' : |
674 | 678 | $value = array_filter( array_map( 'trim', explode( ',', strip_tags( $value ) ) ) ); |
675 | 679 | break; |
diff --git src/wp-includes/update.php src/wp-includes/update.php
index c39322e..19ceef5 100644
|
|
function wp_update_plugins( $extra_stats = array() ) { |
200 | 200 | require_once( ABSPATH . 'wp-admin/includes/plugin.php' ); |
201 | 201 | |
202 | 202 | $plugins = get_plugins(); |
| 203 | |
| 204 | // Omit private plugins |
| 205 | foreach ( $plugins as $file => $p ) { |
| 206 | if ( $p['Private'] ) { |
| 207 | unset( $plugins[$file] ); |
| 208 | } |
| 209 | } |
| 210 | |
203 | 211 | $translations = wp_get_installed_translations( 'plugins' ); |
204 | 212 | |
205 | 213 | $active = get_option( 'active_plugins', array() ); |
… |
… |
function wp_update_themes( $extra_stats = array() ) { |
366 | 374 | foreach ( $installed_themes as $theme ) { |
367 | 375 | $checked[ $theme->get_stylesheet() ] = $theme->get('Version'); |
368 | 376 | |
| 377 | // Omit private themes |
| 378 | if ( $theme->get('Private') ) { |
| 379 | continue; |
| 380 | } |
| 381 | |
369 | 382 | $themes[ $theme->get_stylesheet() ] = array( |
370 | 383 | 'Name' => $theme->get('Name'), |
371 | 384 | 'Title' => $theme->get('Name'), |