- File:
-
- 1 edited
-
trunk/wp-admin/includes/theme-install.php (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/wp-admin/includes/theme-install.php
r17149 r14818 20 20 ); 21 21 22 23 /** 24 * Retrieve theme installer pages from WordPress Themes API. 25 * 26 * It is possible for a theme to override the Themes API result with three 27 * filters. Assume this is for themes, which can extend on the Theme Info to 28 * offer more choices. This is very powerful and must be used with care, when 29 * overridding the filters. 30 * 31 * The first filter, 'themes_api_args', is for the args and gives the action as 32 * the second parameter. The hook for 'themes_api_args' must ensure that an 33 * object is returned. 34 * 35 * The second filter, 'themes_api', is the result that would be returned. 36 * 37 * @since 2.8.0 38 * 39 * @param string $action 40 * @param array|object $args Optional. Arguments to serialize for the Theme Info API. 41 * @return mixed 42 */ 43 function themes_api($action, $args = null) { 44 45 if ( is_array($args) ) 46 $args = (object)$args; 47 48 if ( !isset($args->per_page) ) 49 $args->per_page = 24; 50 51 $args = apply_filters('themes_api_args', $args, $action); //NOTE: Ensure that an object is returned via this filter. 52 $res = apply_filters('themes_api', false, $action, $args); //NOTE: Allows a theme to completely override the builtin WordPress.org API. 53 54 if ( ! $res ) { 55 $request = wp_remote_post('http://api.wordpress.org/themes/info/1.0/', array( 'body' => array('action' => $action, 'request' => serialize($args))) ); 56 if ( is_wp_error($request) ) { 57 $res = new WP_Error('themes_api_failed', __('An Unexpected HTTP Error occured during the API request.</p> <p><a href="?" onclick="document.location.reload(); return false;">Try again</a>'), $request->get_error_message() ); 58 } else { 59 $res = unserialize($request['body']); 60 if ( ! $res ) 61 $res = new WP_Error('themes_api_failed', __('An unknown error occured'), $request['body']); 62 } 63 } 64 //var_dump(array($args, $res)); 65 return apply_filters('themes_api_result', $res, $action, $args); 66 } 67 22 68 /** 23 69 * Retrieve list of WordPress theme features (aka theme tags) 24 70 * 25 71 * @since 2.8.0 26 *27 * @deprecated since 3.1.0 Use get_theme_feature_list() instead.28 72 * 29 73 * @return array … … 43 87 44 88 return $feature_list; 89 } 90 91 add_action('install_themes_search', 'install_theme_search', 10, 1); 92 /** 93 * Display theme search results 94 * 95 * @since 2.8.0 96 * 97 * @param string $page 98 */ 99 function install_theme_search($page) { 100 global $theme_field_defaults; 101 102 $type = isset($_REQUEST['type']) ? stripslashes( $_REQUEST['type'] ) : ''; 103 $term = isset($_REQUEST['s']) ? stripslashes( $_REQUEST['s'] ) : ''; 104 105 $args = array(); 106 107 switch( $type ){ 108 case 'tag': 109 $terms = explode(',', $term); 110 $terms = array_map('trim', $terms); 111 $terms = array_map('sanitize_title_with_dashes', $terms); 112 $args['tag'] = $terms; 113 break; 114 case 'term': 115 $args['search'] = $term; 116 break; 117 case 'author': 118 $args['author'] = $term; 119 break; 120 } 121 122 $args['page'] = $page; 123 $args['fields'] = $theme_field_defaults; 124 125 if ( !empty( $_POST['features'] ) ) { 126 $terms = $_POST['features']; 127 $terms = array_map( 'trim', $terms ); 128 $terms = array_map( 'sanitize_title_with_dashes', $terms ); 129 $args['tag'] = $terms; 130 $_REQUEST['s'] = implode( ',', $terms ); 131 $_REQUEST['type'] = 'tag'; 132 } 133 134 $api = themes_api('query_themes', $args); 135 136 if ( is_wp_error($api) ) 137 wp_die($api); 138 139 add_action('install_themes_table_header', 'install_theme_search_form'); 140 141 display_themes($api->themes, $api->info['page'], $api->info['pages']); 45 142 } 46 143 … … 56 153 <p class="install-help"><?php _e('Search for themes by keyword, author, or tag.') ?></p> 57 154 58 <form id="search-themes" method="get" action=""> 59 <input type="hidden" name="tab" value="search" /> 155 <form id="search-themes" method="post" action="<?php echo admin_url( 'theme-install.php?tab=search' ); ?>"> 60 156 <select name="type" id="typeselector"> 61 157 <option value="term" <?php selected('term', $type) ?>><?php _e('Term'); ?></option> … … 64 160 </select> 65 161 <input type="text" name="s" size="30" value="<?php echo esc_attr($term) ?>" /> 66 < ?php submit_button( __( 'Search' ), 'button', 'search', false ); ?>162 <input type="submit" name="search" value="<?php esc_attr_e('Search'); ?>" class="button" /> 67 163 </form> 68 164 <?php 69 165 } 70 166 167 add_action('install_themes_dashboard', 'install_themes_dashboard'); 71 168 /** 72 169 * Display tags filter for themes. … … 78 175 ?> 79 176 <h4><?php _e('Feature Filter') ?></h4> 80 <form method="post" action="<?php echo self_admin_url( 'theme-install.php?tab=search' ); ?>">177 <form method="post" action="<?php echo admin_url( 'theme-install.php?tab=search' ); ?>"> 81 178 <p class="install-help"><?php _e('Find a theme based on specific features') ?></p> 82 179 <?php 83 $feature_list = get_theme_feature_list( );180 $feature_list = install_themes_feature_list( ); 84 181 echo '<div class="feature-filter">'; 182 $trans = array ('Colors' => __('Colors'), 'black' => __('Black'), 'blue' => __('Blue'), 'brown' => __('Brown'), 183 'green' => __('Green'), 'orange' => __('Orange'), 'pink' => __('Pink'), 'purple' => __('Purple'), 'red' => __('Red'), 184 'silver' => __('Silver'), 'tan' => __('Tan'), 'white' => __('White'), 'yellow' => __('Yellow'), 'dark' => __('Dark'), 185 'light' => __('Light'), 'Columns' => __('Columns'), 'one-column' => __('One Column'), 'two-columns' => __('Two Columns'), 186 'three-columns' => __('Three Columns'), 'four-columns' => __('Four Columns'), 'left-sidebar' => __('Left Sidebar'), 187 'right-sidebar' => __('Right Sidebar'), 'Width' => __('Width'), 'fixed-width' => __('Fixed Width'), 'flexible-width' => __('Flexible Width'), 188 'Features' => __('Features'), 'custom-colors' => __('Custom Colors'), 'custom-header' => __('Custom Header'), 'theme-options' => __('Theme Options'), 189 'threaded-comments' => __('Threaded Comments'), 'sticky-post' => __('Sticky Post'), 'microformats' => __('Microformats'), 190 'Subject' => __('Subject'), 'holiday' => __('Holiday'), 'photoblogging' => __('Photoblogging'), 'seasonal' => __('Seasonal'), 191 ); 85 192 86 193 foreach ( (array) $feature_list as $feature_name => $features ) { 194 if ( isset($trans[$feature_name]) ) 195 $feature_name = $trans[$feature_name]; 87 196 $feature_name = esc_html( $feature_name ); 88 197 echo '<div class="feature-name">' . $feature_name . '</div>'; 89 198 90 echo '<ol class="feature-group">'; 91 foreach ( $features as $feature => $feature_name ) { 199 echo '<ol style="float: left; width: 725px;" class="feature-group">'; 200 foreach ( $features as $feature ) { 201 $feature_name = $feature; 202 if ( isset($trans[$feature]) ) 203 $feature_name = $trans[$feature]; 92 204 $feature_name = esc_html( $feature_name ); 93 205 $feature = esc_attr($feature); … … 107 219 </div> 108 220 <br class="clear" /> 109 < ?php submit_button( __( 'Find Themes' ), 'button', 'search' ); ?>221 <p><input type="submit" name="search" value="<?php esc_attr_e('Find Themes'); ?>" class="button" /></p> 110 222 </form> 111 223 <?php 112 224 } 113 add_action('install_themes_dashboard', 'install_themes_dashboard'); 114 225 226 add_action('install_themes_featured', 'install_themes_featured', 10, 1); 227 /** 228 * Display featured themes. 229 * 230 * @since 2.8.0 231 * 232 * @param string $page 233 */ 234 function install_themes_featured($page = 1) { 235 global $theme_field_defaults; 236 $args = array('browse' => 'featured', 'page' => $page, 'fields' => $theme_field_defaults); 237 $api = themes_api('query_themes', $args); 238 if ( is_wp_error($api) ) 239 wp_die($api); 240 display_themes($api->themes, $api->info['page'], $api->info['pages']); 241 } 242 243 add_action('install_themes_new', 'install_themes_new', 10, 1); 244 /** 245 * Display new themes/ 246 * 247 * @since 2.8.0 248 * 249 * @param string $page 250 */ 251 function install_themes_new($page = 1) { 252 global $theme_field_defaults; 253 $args = array('browse' => 'new', 'page' => $page, 'fields' => $theme_field_defaults); 254 $api = themes_api('query_themes', $args); 255 if ( is_wp_error($api) ) 256 wp_die($api); 257 display_themes($api->themes, $api->info['page'], $api->info['pages']); 258 } 259 260 add_action('install_themes_updated', 'install_themes_updated', 10, 1); 261 /** 262 * Display recently updated themes. 263 * 264 * @since 2.8.0 265 * 266 * @param string $page 267 */ 268 function install_themes_updated($page = 1) { 269 global $theme_field_defaults; 270 $args = array('browse' => 'updated', 'page' => $page, 'fields' => $theme_field_defaults); 271 $api = themes_api('query_themes', $args); 272 display_themes($api->themes, $api->info['page'], $api->info['pages']); 273 } 274 275 add_action('install_themes_upload', 'install_themes_upload', 10, 1); 115 276 function install_themes_upload($page = 1) { 116 277 ?> 117 278 <h4><?php _e('Install a theme in .zip format') ?></h4> 118 279 <p class="install-help"><?php _e('If you have a theme in a .zip format, you may install it by uploading it here.') ?></p> 119 <form method="post" enctype="multipart/form-data" action="<?php echo self_admin_url('update.php?action=upload-theme') ?>">280 <form method="post" enctype="multipart/form-data" action="<?php echo admin_url('update.php?action=upload-theme') ?>"> 120 281 <?php wp_nonce_field( 'theme-upload') ?> 121 282 <input type="file" name="themezip" /> 122 <?php submit_button( __( 'Install Now' ), 'button', 'install-theme-submit', false ); ?> 283 <input type="submit" 284 class="button" value="<?php esc_attr_e('Install Now') ?>" /> 123 285 </form> 124 286 <?php 125 287 } 126 add_action('install_themes_upload', 'install_themes_upload', 10, 1);127 288 128 289 function display_theme($theme, $actions = null, $show_details = true) { … … 140 301 if ( !is_array($actions) ) { 141 302 $actions = array(); 142 $actions[] = '<a href="' . self_admin_url('theme-install.php?tab=theme-information&theme=' . $theme->slug .303 $actions[] = '<a href="' . admin_url('theme-install.php?tab=theme-information&theme=' . $theme->slug . 143 304 '&TB_iframe=true&tbWidth=500&tbHeight=385') . '" class="thickbox thickbox-preview onclick" title="' . esc_attr(sprintf(__('Install “%s”'), $name)) . '">' . __('Install') . '</a>'; 144 if ( !is_network_admin() ) 145 $actions[] = '<a href="' . $preview_link . '" class="thickbox thickbox-preview onclick previewlink" title="' . esc_attr(sprintf(__('Preview “%s”'), $name)) . '">' . __('Preview') . '</a>'; 305 $actions[] = '<a href="' . $preview_link . '" class="thickbox thickbox-preview onclick previewlink" title="' . esc_attr(sprintf(__('Preview “%s”'), $name)) . '">' . __('Preview') . '</a>'; 146 306 $actions = apply_filters('theme_install_action_links', $actions, $theme); 147 307 } … … 201 361 * 202 362 * @since 2.8.0 203 */ 204 function display_themes() { 205 global $wp_list_table; 206 207 $wp_list_table->display(); 208 } 209 add_action('install_themes_search', 'display_themes'); 210 add_action('install_themes_featured', 'display_themes'); 211 add_action('install_themes_new', 'display_themes'); 212 add_action('install_themes_updated', 'display_themes'); 363 * 364 * @param array $themes List of themes. 365 * @param string $page 366 * @param int $totalpages Number of pages. 367 */ 368 function display_themes($themes, $page = 1, $totalpages = 1) { 369 $type = isset($_REQUEST['type']) ? stripslashes( $_REQUEST['type'] ) : ''; 370 $term = isset($_REQUEST['s']) ? stripslashes( $_REQUEST['s'] ) : ''; 371 ?> 372 <div class="tablenav"> 373 <div class="alignleft actions"><?php do_action('install_themes_table_header'); ?></div> 374 <?php 375 $url = esc_url($_SERVER['REQUEST_URI']); 376 if ( ! empty($term) ) 377 $url = add_query_arg('s', $term, $url); 378 if ( ! empty($type) ) 379 $url = add_query_arg('type', $type, $url); 380 381 $page_links = paginate_links( array( 382 'base' => add_query_arg('paged', '%#%', $url), 383 'format' => '', 384 'prev_text' => __('«'), 385 'next_text' => __('»'), 386 'total' => $totalpages, 387 'current' => $page 388 )); 389 390 if ( $page_links ) 391 echo "\t\t<div class='tablenav-pages'>$page_links</div>"; 392 ?> 393 </div> 394 <br class="clear" /> 395 <?php 396 if ( empty($themes) ) { 397 _e('No themes found'); 398 return; 399 } 400 ?> 401 <table id="availablethemes" cellspacing="0" cellpadding="0"> 402 <?php 403 $rows = ceil(count($themes) / 3); 404 $table = array(); 405 $theme_keys = array_keys($themes); 406 for ( $row = 1; $row <= $rows; $row++ ) 407 for ( $col = 1; $col <= 3; $col++ ) 408 $table[$row][$col] = array_shift($theme_keys); 409 410 foreach ( $table as $row => $cols ) { 411 ?> 412 <tr> 413 <?php 414 415 foreach ( $cols as $col => $theme_index ) { 416 $class = array('available-theme'); 417 if ( $row == 1 ) $class[] = 'top'; 418 if ( $col == 1 ) $class[] = 'left'; 419 if ( $row == $rows ) $class[] = 'bottom'; 420 if ( $col == 3 ) $class[] = 'right'; 421 ?> 422 <td class="<?php echo join(' ', $class); ?>"><?php 423 if ( isset($themes[$theme_index]) ) 424 display_theme($themes[$theme_index]); 425 ?></td> 426 <?php } // end foreach $cols ?> 427 </tr> 428 <?php } // end foreach $table ?> 429 </table> 430 431 <div class="tablenav"><?php if ( $page_links ) 432 echo "\t\t<div class='tablenav-pages'>$page_links</div>"; ?> <br 433 class="clear" /> 434 </div> 435 436 <?php 437 } 438 439 add_action('install_themes_pre_theme-information', 'install_theme_information'); 213 440 214 441 /** … … 289 516 case 'install': 290 517 if ( current_user_can('install_themes') ) : 291 $buttons .= '<a class="button-primary" id="install" href="' . wp_nonce_url( self_admin_url('update.php?action=install-theme&theme=' . $api->slug), 'install-theme_' . $api->slug) . '" target="_parent">' . __('Install Now') . '</a>';518 $buttons .= '<a class="button-primary" id="install" href="' . wp_nonce_url(admin_url('update.php?action=install-theme&theme=' . $api->slug), 'install-theme_' . $api->slug) . '" target="_parent">' . __('Install Now') . '</a>'; 292 519 endif; 293 520 break; 294 521 case 'update_available': 295 522 if ( current_user_can('update_themes') ) : 296 $buttons .= '<a class="button-primary" id="install" href="' . wp_nonce_url( self_admin_url('update.php?action=upgrade-theme&theme=' . $update_file), 'upgrade-theme_' . $update_file) . '" target="_parent">' . __('Install Update Now') . '</a>';523 $buttons .= '<a class="button-primary" id="install" href="' . wp_nonce_url(admin_url('update.php?action=upgrade-theme&theme=' . $update_file), 'upgrade-theme_' . $update_file) . '" target="_parent">' . __('Install Update Now') . '</a>'; 297 524 endif; 298 525 break; … … 320 547 exit; 321 548 } 322 add_action('install_themes_pre_theme-information', 'install_theme_information');323
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)