[ Index ]

PHP Cross Reference of WordPress

title

Body

[close]

/wp-admin/ -> theme-install.php (source)

   1  <?php
   2  /**
   3   * Install theme administration panel.
   4   *
   5   * @package WordPress
   6   * @subpackage Administration
   7   */
   8  
   9  /** WordPress Administration Bootstrap */
  10  require_once  __DIR__ . '/admin.php';
  11  require ABSPATH . 'wp-admin/includes/theme-install.php';
  12  
  13  wp_reset_vars( array( 'tab' ) );
  14  
  15  if ( ! current_user_can( 'install_themes' ) ) {
  16      wp_die( __( 'Sorry, you are not allowed to install themes on this site.' ) );
  17  }
  18  
  19  if ( is_multisite() && ! is_network_admin() ) {
  20      wp_redirect( network_admin_url( 'theme-install.php' ) );
  21      exit;
  22  }
  23  
  24  $title       = __( 'Add Themes' );
  25  $parent_file = 'themes.php';
  26  
  27  if ( ! is_network_admin() ) {
  28      $submenu_file = 'themes.php';
  29  }
  30  
  31  $installed_themes = search_theme_directories();
  32  
  33  if ( false === $installed_themes ) {
  34      $installed_themes = array();
  35  }
  36  
  37  foreach ( $installed_themes as $k => $v ) {
  38      if ( false !== strpos( $k, '/' ) ) {
  39          unset( $installed_themes[ $k ] );
  40      }
  41  }
  42  
  43  wp_localize_script(
  44      'theme',
  45      '_wpThemeSettings',
  46      array(
  47          'themes'          => false,
  48          'settings'        => array(
  49              'isInstall'  => true,
  50              'canInstall' => current_user_can( 'install_themes' ),
  51              'installURI' => current_user_can( 'install_themes' ) ? self_admin_url( 'theme-install.php' ) : null,
  52              'adminUrl'   => parse_url( self_admin_url(), PHP_URL_PATH ),
  53          ),
  54          'l10n'            => array(
  55              'addNew'              => __( 'Add New Theme' ),
  56              'search'              => __( 'Search Themes' ),
  57              'searchPlaceholder'   => __( 'Search themes...' ), // Placeholder (no ellipsis).
  58              'upload'              => __( 'Upload Theme' ),
  59              'back'                => __( 'Back' ),
  60              'error'               => sprintf(
  61                  /* translators: %s: Support forums URL. */
  62                  __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server&#8217;s configuration. If you continue to have problems, please try the <a href="%s">support forums</a>.' ),
  63                  __( 'https://wordpress.org/support/forums/' )
  64              ),
  65              'tryAgain'            => __( 'Try Again' ),
  66              /* translators: %d: Number of themes. */
  67              'themesFound'         => __( 'Number of Themes found: %d' ),
  68              'noThemesFound'       => __( 'No themes found. Try a different search.' ),
  69              'collapseSidebar'     => __( 'Collapse Sidebar' ),
  70              'expandSidebar'       => __( 'Expand Sidebar' ),
  71              /* translators: Accessibility text. */
  72              'selectFeatureFilter' => __( 'Select one or more Theme features to filter by' ),
  73          ),
  74          'installedThemes' => array_keys( $installed_themes ),
  75          'activeTheme'     => get_stylesheet(),
  76      )
  77  );
  78  
  79  wp_enqueue_script( 'theme' );
  80  wp_enqueue_script( 'updates' );
  81  
  82  if ( $tab ) {
  83      /**
  84       * Fires before each of the tabs are rendered on the Install Themes page.
  85       *
  86       * The dynamic portion of the hook name, `$tab`, refers to the current
  87       * theme installation tab. Possible values are 'dashboard', 'search', 'upload',
  88       * 'featured', 'new', or 'updated'.
  89       *
  90       * @since 2.8.0
  91       */
  92      do_action( "install_themes_pre_{$tab}" );
  93  }
  94  
  95  $help_overview =
  96      '<p>' . sprintf(
  97          /* translators: %s: Theme Directory URL. */
  98          __( 'You can find additional themes for your site by using the Theme Browser/Installer on this screen, which will display themes from the <a href="%s">WordPress Theme Directory</a>. These themes are designed and developed by third parties, are available free of charge, and are compatible with the license WordPress uses.' ),
  99          __( 'https://wordpress.org/themes/' )
 100      ) . '</p>' .
 101      '<p>' . __( 'You can Search for themes by keyword, author, or tag, or can get more specific and search by criteria listed in the feature filter.' ) . ' <span id="live-search-desc">' . __( 'The search results will be updated as you type.' ) . '</span></p>' .
 102      '<p>' . __( 'Alternately, you can browse the themes that are Featured, Popular, or Latest. When you find a theme you like, you can preview it or install it.' ) . '</p>' .
 103      '<p>' . sprintf(
 104          /* translators: %s: /wp-content/themes */
 105          __( 'You can Upload a theme manually if you have already downloaded its ZIP archive onto your computer (make sure it is from a trusted and original source). You can also do it the old-fashioned way and copy a downloaded theme&#8217;s folder via FTP into your %s directory.' ),
 106          '<code>/wp-content/themes</code>'
 107      ) . '</p>';
 108  
 109  get_current_screen()->add_help_tab(
 110      array(
 111          'id'      => 'overview',
 112          'title'   => __( 'Overview' ),
 113          'content' => $help_overview,
 114      )
 115  );
 116  
 117  $help_installing =
 118      '<p>' . __( 'Once you have generated a list of themes, you can preview and install any of them. Click on the thumbnail of the theme you&#8217;re interested in previewing. It will open up in a full-screen Preview page to give you a better idea of how that theme will look.' ) . '</p>' .
 119      '<p>' . __( 'To install the theme so you can preview it with your site&#8217;s content and customize its theme options, click the "Install" button at the top of the left-hand pane. The theme files will be downloaded to your website automatically. When this is complete, the theme is now available for activation, which you can do by clicking the "Activate" link, or by navigating to your Manage Themes screen and clicking the "Live Preview" link under any installed theme&#8217;s thumbnail image.' ) . '</p>';
 120  
 121  get_current_screen()->add_help_tab(
 122      array(
 123          'id'      => 'installing',
 124          'title'   => __( 'Previewing and Installing' ),
 125          'content' => $help_installing,
 126      )
 127  );
 128  
 129  get_current_screen()->set_help_sidebar(
 130      '<p><strong>' . __( 'For more information:' ) . '</strong></p>' .
 131      '<p>' . __( '<a href="https://wordpress.org/support/article/using-themes/#adding-new-themes">Documentation on Adding New Themes</a>' ) . '</p>' .
 132      '<p>' . __( '<a href="https://wordpress.org/support/">Support</a>' ) . '</p>'
 133  );
 134  
 135  require_once ABSPATH . 'wp-admin/admin-header.php';
 136  
 137  ?>
 138  <div class="wrap">
 139      <h1 class="wp-heading-inline"><?php echo esc_html( $title ); ?></h1>
 140  
 141      <?php
 142  
 143      /**
 144       * Filters the tabs shown on the Add Themes screen.
 145       *
 146       * This filter is for backward compatibility only, for the suppression of the upload tab.
 147       *
 148       * @since 2.8.0
 149       *
 150       * @param string[] $tabs Associative array of the tabs shown on the Add Themes screen. Default is 'upload'.
 151       */
 152      $tabs = apply_filters( 'install_themes_tabs', array( 'upload' => __( 'Upload Theme' ) ) );
 153      if ( ! empty( $tabs['upload'] ) && current_user_can( 'upload_themes' ) ) {
 154          echo ' <button type="button" class="upload-view-toggle page-title-action hide-if-no-js" aria-expanded="false">' . __( 'Upload Theme' ) . '</button>';
 155      }
 156      ?>
 157  
 158      <hr class="wp-header-end">
 159  
 160      <div class="error hide-if-js">
 161          <p><?php _e( 'The Theme Installer screen requires JavaScript.' ); ?></p>
 162      </div>
 163  
 164      <div class="upload-theme">
 165      <?php install_themes_upload(); ?>
 166      </div>
 167  
 168      <h2 class="screen-reader-text hide-if-no-js"><?php _e( 'Filter themes list' ); ?></h2>
 169  
 170      <div class="wp-filter hide-if-no-js">
 171          <div class="filter-count">
 172              <span class="count theme-count"></span>
 173          </div>
 174  
 175          <ul class="filter-links">
 176              <li><a href="#" data-sort="featured"><?php _ex( 'Featured', 'themes' ); ?></a></li>
 177              <li><a href="#" data-sort="popular"><?php _ex( 'Popular', 'themes' ); ?></a></li>
 178              <li><a href="#" data-sort="new"><?php _ex( 'Latest', 'themes' ); ?></a></li>
 179              <li><a href="#" data-sort="favorites"><?php _ex( 'Favorites', 'themes' ); ?></a></li>
 180          </ul>
 181  
 182          <button type="button" class="button drawer-toggle" aria-expanded="false"><?php _e( 'Feature Filter' ); ?></button>
 183  
 184          <form class="search-form"></form>
 185  
 186          <div class="favorites-form">
 187              <?php
 188              $action = 'save_wporg_username_' . get_current_user_id();
 189              if ( isset( $_GET['_wpnonce'] ) && wp_verify_nonce( wp_unslash( $_GET['_wpnonce'] ), $action ) ) {
 190                  $user = isset( $_GET['user'] ) ? wp_unslash( $_GET['user'] ) : get_user_option( 'wporg_favorites' );
 191                  update_user_meta( get_current_user_id(), 'wporg_favorites', $user );
 192              } else {
 193                  $user = get_user_option( 'wporg_favorites' );
 194              }
 195              ?>
 196              <p class="install-help"><?php _e( 'If you have marked themes as favorites on WordPress.org, you can browse them here.' ); ?></p>
 197  
 198              <p>
 199                  <label for="wporg-username-input"><?php _e( 'Your WordPress.org username:' ); ?></label>
 200                  <input type="hidden" id="wporg-username-nonce" name="_wpnonce" value="<?php echo esc_attr( wp_create_nonce( $action ) ); ?>" />
 201                  <input type="search" id="wporg-username-input" value="<?php echo esc_attr( $user ); ?>" />
 202                  <input type="button" class="button favorites-form-submit" value="<?php esc_attr_e( 'Get Favorites' ); ?>" />
 203              </p>
 204          </div>
 205  
 206          <div class="filter-drawer">
 207              <div class="buttons">
 208                  <button type="button" class="apply-filters button"><?php _e( 'Apply Filters' ); ?><span></span></button>
 209                  <button type="button" class="clear-filters button" aria-label="<?php esc_attr_e( 'Clear current filters' ); ?>"><?php _e( 'Clear' ); ?></button>
 210              </div>
 211          <?php
 212          // Use the core list, rather than the .org API, due to inconsistencies
 213          // and to ensure tags are translated.
 214          $feature_list = get_theme_feature_list( false );
 215  
 216          foreach ( $feature_list as $feature_name => $features ) {
 217              echo '<fieldset class="filter-group">';
 218              $feature_name = esc_html( $feature_name );
 219              echo '<legend>' . $feature_name . '</legend>';
 220              echo '<div class="filter-group-feature">';
 221              foreach ( $features as $feature => $feature_name ) {
 222                  $feature = esc_attr( $feature );
 223                  echo '<input type="checkbox" id="filter-id-' . $feature . '" value="' . $feature . '" /> ';
 224                  echo '<label for="filter-id-' . $feature . '">' . $feature_name . '</label>';
 225              }
 226              echo '</div>';
 227              echo '</fieldset>';
 228          }
 229          ?>
 230              <div class="buttons">
 231                  <button type="button" class="apply-filters button"><?php _e( 'Apply Filters' ); ?><span></span></button>
 232                  <button type="button" class="clear-filters button" aria-label="<?php esc_attr_e( 'Clear current filters' ); ?>"><?php _e( 'Clear' ); ?></button>
 233              </div>
 234              <div class="filtered-by">
 235                  <span><?php _e( 'Filtering by:' ); ?></span>
 236                  <div class="tags"></div>
 237                  <button type="button" class="button-link edit-filters"><?php _e( 'Edit Filters' ); ?></button>
 238              </div>
 239          </div>
 240      </div>
 241      <h2 class="screen-reader-text hide-if-no-js"><?php _e( 'Themes list' ); ?></h2>
 242      <div class="theme-browser content-filterable"></div>
 243      <div class="theme-install-overlay wp-full-overlay expanded"></div>
 244  
 245      <p class="no-themes"><?php _e( 'No themes found. Try a different search.' ); ?></p>
 246      <span class="spinner"></span>
 247  
 248  <?php
 249  if ( $tab ) {
 250      /**
 251       * Fires at the top of each of the tabs on the Install Themes page.
 252       *
 253       * The dynamic portion of the hook name, `$tab`, refers to the current
 254       * theme installation tab. Possible values are 'dashboard', 'search', 'upload',
 255       * 'featured', 'new', or 'updated'.
 256       *
 257       * @since 2.8.0
 258       *
 259       * @param int $paged Number of the current page of results being viewed.
 260       */
 261      do_action( "install_themes_{$tab}", $paged );
 262  }
 263  ?>
 264  </div>
 265  
 266  <script id="tmpl-theme" type="text/template">
 267      <# if ( data.screenshot_url ) { #>
 268          <div class="theme-screenshot">
 269              <img src="{{ data.screenshot_url }}" alt="" />
 270          </div>
 271      <# } else { #>
 272          <div class="theme-screenshot blank"></div>
 273      <# } #>
 274  
 275      <# if ( data.installed ) { #>
 276          <div class="notice notice-success notice-alt"><p><?php _ex( 'Installed', 'theme' ); ?></p></div>
 277      <# } #>
 278  
 279      <# if ( ! data.compatible_wp || ! data.compatible_php ) { #>
 280          <div class="notice notice-error notice-alt"><p>
 281              <# if ( ! data.compatible_wp && ! data.compatible_php ) { #>
 282                  <?php
 283                  _e( 'This theme doesn&#8217;t work with your versions of WordPress and PHP.' );
 284                  if ( current_user_can( 'update_core' ) && current_user_can( 'update_php' ) ) {
 285                      printf(
 286                          /* translators: 1: URL to WordPress Updates screen, 2: URL to Update PHP page. */
 287                          ' ' . __( '<a href="%1$s">Please update WordPress</a>, and then <a href="%2$s">learn more about updating PHP</a>.' ),
 288                          self_admin_url( 'update-core.php' ),
 289                          esc_url( wp_get_update_php_url() )
 290                      );
 291                      wp_update_php_annotation( '</p><p><em>', '</em>' );
 292                  } elseif ( current_user_can( 'update_core' ) ) {
 293                      printf(
 294                          /* translators: %s: URL to WordPress Updates screen. */
 295                          ' ' . __( '<a href="%s">Please update WordPress</a>.' ),
 296                          self_admin_url( 'update-core.php' )
 297                      );
 298                  } elseif ( current_user_can( 'update_php' ) ) {
 299                      printf(
 300                          /* translators: %s: URL to Update PHP page. */
 301                          ' ' . __( '<a href="%s">Learn more about updating PHP</a>.' ),
 302                          esc_url( wp_get_update_php_url() )
 303                      );
 304                      wp_update_php_annotation( '</p><p><em>', '</em>' );
 305                  }
 306                  ?>
 307              <# } else if ( ! data.compatible_wp ) { #>
 308                  <?php
 309                  _e( 'This theme doesn&#8217;t work with your version of WordPress.' );
 310                  if ( current_user_can( 'update_core' ) ) {
 311                      printf(
 312                          /* translators: %s: URL to WordPress Updates screen. */
 313                          ' ' . __( '<a href="%s">Please update WordPress</a>.' ),
 314                          self_admin_url( 'update-core.php' )
 315                      );
 316                  }
 317                  ?>
 318              <# } else if ( ! data.compatible_php ) { #>
 319                  <?php
 320                  _e( 'This theme doesn&#8217;t work with your version of PHP.' );
 321                  if ( current_user_can( 'update_php' ) ) {
 322                      printf(
 323                          /* translators: %s: URL to Update PHP page. */
 324                          ' ' . __( '<a href="%s">Learn more about updating PHP</a>.' ),
 325                          esc_url( wp_get_update_php_url() )
 326                      );
 327                      wp_update_php_annotation( '</p><p><em>', '</em>' );
 328                  }
 329                  ?>
 330              <# } #>
 331          </p></div>
 332      <# } #>
 333  
 334      <span class="more-details"><?php _ex( 'Details &amp; Preview', 'theme' ); ?></span>
 335      <div class="theme-author">
 336          <?php
 337          /* translators: %s: Theme author name. */
 338          printf( __( 'By %s' ), '{{ data.author }}' );
 339          ?>
 340      </div>
 341  
 342      <div class="theme-id-container">
 343          <h3 class="theme-name">{{ data.name }}</h3>
 344  
 345          <div class="theme-actions">
 346              <# if ( data.installed ) { #>
 347                  <# if ( data.compatible_wp && data.compatible_php ) { #>
 348                      <?php
 349                      /* translators: %s: Theme name. */
 350                      $aria_label = sprintf( _x( 'Activate %s', 'theme' ), '{{ data.name }}' );
 351                      ?>
 352                      <# if ( data.activate_url ) { #>
 353                          <# if ( ! data.active ) { #>
 354                              <a class="button button-primary activate" href="{{ data.activate_url }}" aria-label="<?php echo esc_attr( $aria_label ); ?>"><?php _e( 'Activate' ); ?></a>
 355                          <# } else { #>
 356                              <button class="button button-primary disabled"><?php _ex( 'Activated', 'theme' ); ?></button>
 357                          <# } #>
 358                      <# } #>
 359                      <# if ( data.customize_url ) { #>
 360                          <# if ( ! data.active ) { #>
 361                              <a class="button load-customize" href="{{ data.customize_url }}"><?php _e( 'Live Preview' ); ?></a>
 362                          <# } else { #>
 363                              <a class="button load-customize" href="{{ data.customize_url }}"><?php _e( 'Customize' ); ?></a>
 364                          <# } #>
 365                      <# } else { #>
 366                          <button class="button preview install-theme-preview"><?php _e( 'Preview' ); ?></button>
 367                      <# } #>
 368                  <# } else { #>
 369                      <?php
 370                      /* translators: %s: Theme name. */
 371                      $aria_label = sprintf( _x( 'Cannot Activate %s', 'theme' ), '{{ data.name }}' );
 372                      ?>
 373                      <# if ( data.activate_url ) { #>
 374                          <a class="button button-primary disabled" aria-label="<?php echo esc_attr( $aria_label ); ?>"><?php _ex( 'Cannot Activate', 'theme' ); ?></a>
 375                      <# } #>
 376                      <# if ( data.customize_url ) { #>
 377                          <a class="button disabled"><?php _e( 'Live Preview' ); ?></a>
 378                      <# } else { #>
 379                          <button class="button disabled"><?php _e( 'Preview' ); ?></button>
 380                      <# } #>
 381                  <# } #>
 382              <# } else { #>
 383                  <# if ( data.compatible_wp && data.compatible_php ) { #>
 384                      <?php
 385                      /* translators: %s: Theme name. */
 386                      $aria_label = sprintf( _x( 'Install %s', 'theme' ), '{{ data.name }}' );
 387                      ?>
 388                      <a class="button button-primary theme-install" data-name="{{ data.name }}" data-slug="{{ data.id }}" href="{{ data.install_url }}" aria-label="<?php echo esc_attr( $aria_label ); ?>"><?php _e( 'Install' ); ?></a>
 389                      <button class="button preview install-theme-preview"><?php _e( 'Preview' ); ?></button>
 390                  <# } else { #>
 391                      <?php
 392                      /* translators: %s: Theme name. */
 393                      $aria_label = sprintf( _x( 'Cannot Install %s', 'theme' ), '{{ data.name }}' );
 394                      ?>
 395                      <a class="button button-primary disabled" data-name="{{ data.name }}" aria-label="<?php echo esc_attr( $aria_label ); ?>"><?php _ex( 'Cannot Install', 'theme' ); ?></a>
 396                      <button class="button disabled"><?php _e( 'Preview' ); ?></button>
 397                  <# } #>
 398              <# } #>
 399          </div>
 400      </div>
 401  </script>
 402  
 403  <script id="tmpl-theme-preview" type="text/template">
 404      <div class="wp-full-overlay-sidebar">
 405          <div class="wp-full-overlay-header">
 406              <button class="close-full-overlay"><span class="screen-reader-text"><?php _e( 'Close' ); ?></span></button>
 407              <button class="previous-theme"><span class="screen-reader-text"><?php _e( 'Previous theme' ); ?></span></button>
 408              <button class="next-theme"><span class="screen-reader-text"><?php _e( 'Next theme' ); ?></span></button>
 409              <# if ( data.installed ) { #>
 410                  <# if ( data.compatible_wp && data.compatible_php ) { #>
 411                      <?php
 412                      /* translators: %s: Theme name. */
 413                      $aria_label = sprintf( _x( 'Activate %s', 'theme' ), '{{ data.name }}' );
 414                      ?>
 415                      <# if ( ! data.active ) { #>
 416                          <a class="button button-primary activate" href="{{ data.activate_url }}" aria-label="<?php echo esc_attr( $aria_label ); ?>"><?php _e( 'Activate' ); ?></a>
 417                      <# } else { #>
 418                          <button class="button button-primary disabled"><?php _ex( 'Activated', 'theme' ); ?></button>
 419                      <# } #>
 420                  <# } else { #>
 421                      <a class="button button-primary disabled" ><?php _ex( 'Cannot Activate', 'theme' ); ?></a>
 422                  <# } #>
 423              <# } else { #>
 424                  <# if ( data.compatible_wp && data.compatible_php ) { #>
 425                      <a href="{{ data.install_url }}" class="button button-primary theme-install" data-name="{{ data.name }}" data-slug="{{ data.id }}"><?php _e( 'Install' ); ?></a>
 426                  <# } else { #>
 427                      <a class="button button-primary disabled" ><?php _ex( 'Cannot Install', 'theme' ); ?></a>
 428                  <# } #>
 429              <# } #>
 430          </div>
 431          <div class="wp-full-overlay-sidebar-content">
 432              <div class="install-theme-info">
 433                  <h3 class="theme-name">{{ data.name }}</h3>
 434                      <span class="theme-by">
 435                          <?php
 436                          /* translators: %s: Theme author name. */
 437                          printf( __( 'By %s' ), '{{ data.author }}' );
 438                          ?>
 439                      </span>
 440  
 441                      <img class="theme-screenshot" src="{{ data.screenshot_url }}" alt="" />
 442  
 443                      <div class="theme-details">
 444                          <# if ( data.rating ) { #>
 445                              <div class="theme-rating">
 446                                  {{{ data.stars }}}
 447                                  <a class="num-ratings" href="{{ data.reviews_url }}">
 448                                      <?php
 449                                      /* translators: %s: Number of ratings. */
 450                                      printf( __( '(%s ratings)' ), '{{ data.num_ratings }}' );
 451                                      ?>
 452                                  </a>
 453                              </div>
 454                          <# } else { #>
 455                              <span class="no-rating"><?php _e( 'This theme has not been rated yet.' ); ?></span>
 456                          <# } #>
 457  
 458                          <div class="theme-version">
 459                              <?php
 460                              /* translators: %s: Theme version. */
 461                              printf( __( 'Version: %s' ), '{{ data.version }}' );
 462                              ?>
 463                          </div>
 464  
 465                          <# if ( ! data.compatible_wp || ! data.compatible_php ) { #>
 466                              <div class="notice notice-error notice-alt notice-large"><p>
 467                                  <# if ( ! data.compatible_wp && ! data.compatible_php ) { #>
 468                                      <?php
 469                                      _e( 'This theme doesn&#8217;t work with your versions of WordPress and PHP.' );
 470                                      if ( current_user_can( 'update_core' ) && current_user_can( 'update_php' ) ) {
 471                                          printf(
 472                                              /* translators: 1: URL to WordPress Updates screen, 2: URL to Update PHP page. */
 473                                              ' ' . __( '<a href="%1$s">Please update WordPress</a>, and then <a href="%2$s">learn more about updating PHP</a>.' ),
 474                                              self_admin_url( 'update-core.php' ),
 475                                              esc_url( wp_get_update_php_url() )
 476                                          );
 477                                          wp_update_php_annotation( '</p><p><em>', '</em>' );
 478                                      } elseif ( current_user_can( 'update_core' ) ) {
 479                                          printf(
 480                                              /* translators: %s: URL to WordPress Updates screen. */
 481                                              ' ' . __( '<a href="%s">Please update WordPress</a>.' ),
 482                                              self_admin_url( 'update-core.php' )
 483                                          );
 484                                      } elseif ( current_user_can( 'update_php' ) ) {
 485                                          printf(
 486                                              /* translators: %s: URL to Update PHP page. */
 487                                              ' ' . __( '<a href="%s">Learn more about updating PHP</a>.' ),
 488                                              esc_url( wp_get_update_php_url() )
 489                                          );
 490                                          wp_update_php_annotation( '</p><p><em>', '</em>' );
 491                                      }
 492                                      ?>
 493                                  <# } else if ( ! data.compatible_wp ) { #>
 494                                      <?php
 495                                      _e( 'This theme doesn&#8217;t work with your version of WordPress.' );
 496                                      if ( current_user_can( 'update_core' ) ) {
 497                                          printf(
 498                                              /* translators: %s: URL to WordPress Updates screen. */
 499                                              ' ' . __( '<a href="%s">Please update WordPress</a>.' ),
 500                                              self_admin_url( 'update-core.php' )
 501                                          );
 502                                      }
 503                                      ?>
 504                                  <# } else if ( ! data.compatible_php ) { #>
 505                                      <?php
 506                                      _e( 'This theme doesn&#8217;t work with your version of PHP.' );
 507                                      if ( current_user_can( 'update_php' ) ) {
 508                                          printf(
 509                                              /* translators: %s: URL to Update PHP page. */
 510                                              ' ' . __( '<a href="%s">Learn more about updating PHP</a>.' ),
 511                                              esc_url( wp_get_update_php_url() )
 512                                          );
 513                                          wp_update_php_annotation( '</p><p><em>', '</em>' );
 514                                      }
 515                                      ?>
 516                                  <# } #>
 517                              </p></div>
 518                          <# } #>
 519  
 520                          <div class="theme-description">{{{ data.description }}}</div>
 521                      </div>
 522                  </div>
 523              </div>
 524              <div class="wp-full-overlay-footer">
 525                  <button type="button" class="collapse-sidebar button" aria-expanded="true" aria-label="<?php esc_attr_e( 'Collapse Sidebar' ); ?>">
 526                      <span class="collapse-sidebar-arrow"></span>
 527                      <span class="collapse-sidebar-label"><?php _e( 'Collapse' ); ?></span>
 528                  </button>
 529              </div>
 530          </div>
 531          <div class="wp-full-overlay-main">
 532          <iframe src="{{ data.preview_url }}" title="<?php esc_attr_e( 'Preview' ); ?>"></iframe>
 533      </div>
 534  </script>
 535  
 536  <?php
 537  wp_print_request_filesystem_credentials_modal();
 538  wp_print_admin_notice_templates();
 539  
 540  require_once ABSPATH . 'wp-admin/admin-footer.php';


Generated: Thu Oct 1 01:00:03 2020 Cross-referenced by PHPXref 0.7.1