$themes = array(
/**
- * Filter the full array of WP_Theme objects to list in the Multisite
+ * Filters the full array of WP_Theme objects to list in the Multisite
* themes list table.
*
* @since 3.1.0
$this->has_items = ! empty( $themes['all'] );
$total_this_page = $totals[ $status ];
+ wp_localize_script( 'updates', '_wpUpdatesItemCounts', array(
+ 'themes' => $totals,
+ 'totals' => wp_get_update_data(),
+ ) );
+
if ( $orderby ) {
$orderby = ucfirst( $orderby );
$order = strtoupper( $order );
if ( ! $allowed ) {
if ( ! $theme->errors() ) {
- $actions['enable'] = '<a href="' . esc_url( wp_nonce_url($url . 'action=enable&theme=' . $theme_key . '&paged=' . $page . '&s=' . $s, 'enable-theme_' . $stylesheet ) ) . '" title="' . esc_attr__('Enable this theme') . '" class="edit">' . ( $this->is_site_themes ? __( 'Enable' ) : __( 'Network Enable' ) ) . '</a>';
+ $url = add_query_arg( array(
+ 'action' => 'enable',
+ 'theme' => $theme_key,
+ 'paged' => $page,
+ 's' => $s,
+ ), $url );
+
+ if ( $this->is_site_themes ) {
+ /* translators: %s: theme name */
+ $aria_label = sprintf( __( 'Enable %s' ), $theme->display( 'Name' ) );
+ } else {
+ /* translators: %s: theme name */
+ $aria_label = sprintf( __( 'Network Enable %s' ), $theme->display( 'Name' ) );
+ }
+
+ $actions['enable'] = sprintf( '<a href="%s" class="edit" aria-label="%s">%s</a>',
+ esc_url( wp_nonce_url( $url, 'enable-theme_' . $stylesheet ) ),
+ esc_attr( $aria_label ),
+ ( $this->is_site_themes ? __( 'Enable' ) : __( 'Network Enable' ) )
+ );
}
} else {
- $actions['disable'] = '<a href="' . esc_url( wp_nonce_url($url . 'action=disable&theme=' . $theme_key . '&paged=' . $page . '&s=' . $s, 'disable-theme_' . $stylesheet ) ) . '" title="' . esc_attr__('Disable this theme') . '">' . ( $this->is_site_themes ? __( 'Disable' ) : __( 'Network Disable' ) ) . '</a>';
+ $url = add_query_arg( array(
+ 'action' => 'disable',
+ 'theme' => $theme_key,
+ 'paged' => $page,
+ 's' => $s,
+ ), $url );
+
+ if ( $this->is_site_themes ) {
+ /* translators: %s: theme name */
+ $aria_label = sprintf( __( 'Disable %s' ), $theme->display( 'Name' ) );
+ } else {
+ /* translators: %s: theme name */
+ $aria_label = sprintf( __( 'Network Disable %s' ), $theme->display( 'Name' ) );
+ }
+
+ $actions['disable'] = sprintf( '<a href="%s" aria-label="%s">%s</a>',
+ esc_url( wp_nonce_url( $url, 'disable-theme_' . $stylesheet ) ),
+ esc_attr( $aria_label ),
+ ( $this->is_site_themes ? __( 'Disable' ) : __( 'Network Disable' ) )
+ );
}
if ( current_user_can('edit_themes') ) {
- $actions['edit'] = '<a href="' . esc_url('theme-editor.php?theme=' . $theme_key ) . '" title="' . esc_attr__('Open this theme in the Theme Editor') . '" class="edit">' . __('Edit') . '</a>';
+ $url = add_query_arg( array(
+ 'theme' => $theme_key,
+ ), 'theme-editor.php' );
+
+ /* translators: %s: theme name */
+ $aria_label = sprintf( __( 'Open %s in the Theme Editor' ), $theme->display( 'Name' ) );
+
+ $actions['edit'] = sprintf( '<a href="%s" class="edit" aria-label="%s">%s</a>',
+ esc_url( $url ),
+ esc_attr( $aria_label ),
+ __( 'Edit' )
+ );
}
if ( ! $allowed && current_user_can( 'delete_themes' ) && ! $this->is_site_themes && $stylesheet != get_option( 'stylesheet' ) && $stylesheet != get_option( 'template' ) ) {
- $actions['delete'] = '<a href="' . esc_url( wp_nonce_url( 'themes.php?action=delete-selected&checked[]=' . $theme_key . '&theme_status=' . $context . '&paged=' . $page . '&s=' . $s, 'bulk-themes' ) ) . '" title="' . esc_attr__( 'Delete this theme' ) . '" class="delete">' . __( 'Delete' ) . '</a>';
+ $url = add_query_arg( array(
+ 'action' => 'delete-selected',
+ 'checked[]' => $theme_key,
+ 'theme_status' => $context,
+ 'paged' => $page,
+ 's' => $s,
+ ), 'themes.php' );
+
+ /* translators: %s: theme name */
+ $aria_label = sprintf( _x( 'Delete %s', 'theme' ), $theme->display( 'Name' ) );
+
+ $actions['delete'] = sprintf( '<a href="%s" class="delete" aria-label="%s">%s</a>',
+ esc_url( wp_nonce_url( $url, 'bulk-themes' ) ),
+ esc_attr( $aria_label ),
+ __( 'Delete' )
+ );
}
/**
- * Filter the action links displayed for each theme in the Multisite
+ * Filters the action links displayed for each theme in the Multisite
* themes list table.
*
* The action links displayed are determined by the theme's status, and
$actions = apply_filters( 'theme_action_links', array_filter( $actions ), $theme, $context );
/**
- * Filter the action links of a specific theme in the Multisite themes
+ * Filters the action links of a specific theme in the Multisite themes
* list table.
*
* The dynamic portion of the hook name, `$stylesheet`, refers to the
* @param WP_Theme $theme The current WP_Theme object.
* @param string $context Status of the theme.
*/
- $actions = apply_filters( "theme_action_links_$stylesheet", $actions, $theme, $context );
+ $actions = apply_filters( "theme_action_links_{$stylesheet}", $actions, $theme, $context );
echo $this->row_actions( $actions, true );
}
$theme_meta[] = sprintf( __( 'By %s' ), $theme->display('Author') );
if ( $theme->get('ThemeURI') ) {
- $theme_meta[] = '<a href="' . $theme->display('ThemeURI') . '" title="' . esc_attr__( 'Visit theme homepage' ) . '">' . __( 'Visit Theme Site' ) . '</a>';
+ /* translators: %s: theme name */
+ $aria_label = sprintf( __( 'Visit %s homepage' ), $theme->display( 'Name' ) );
+
+ $theme_meta[] = sprintf( '<a href="%s" aria-label="%s">%s</a>',
+ $theme->display( 'ThemeURI' ),
+ esc_attr( $aria_label ),
+ __( 'Visit Theme Site' )
+ );
}
/**
- * Filter the array of row meta for each theme in the Multisite themes
+ * Filters the array of row meta for each theme in the Multisite themes
* list table.
*
* @since 3.1.0
$stylesheet = $theme->get_stylesheet();
$class = ! $allowed ? 'inactive' : 'active';
-
- $id = sanitize_html_class( $theme->get_stylesheet() );
-
if ( ! empty( $totals['upgrade'] ) && ! empty( $theme->update ) ) {
$class .= ' update';
}
- echo "<tr id='$id' class='$class'>";
+ printf( '<tr class="%s" data-slug="%s">',
+ esc_attr( $class ),
+ esc_attr( $stylesheet )
+ );
$this->single_row_columns( $theme );
* @param WP_Theme $theme Current WP_Theme object.
* @param string $status Status of the theme.
*/
- do_action( "after_theme_row_$stylesheet", $stylesheet, $theme, $status );
+ do_action( "after_theme_row_{$stylesheet}", $stylesheet, $theme, $status );
}
}