$tag, ] ); if ( ! is_wp_error( $plugins_api ) ) { $plugins = $plugins_api->plugins; $plugins_allowedtags = [ 'a' => [ 'href' => [], 'title' => [], 'target' => [], ], 'abbr' => [ 'title' => [] ], 'acronym' => [ 'title' => [] ], 'code' => [], 'pre' => [], 'em' => [], 'strong' => [], 'ul' => [], 'ol' => [], 'li' => [], 'p' => [], 'br' => [], ]; $plugins_group_titles = [ 'Performance' => _x( 'Performance', 'Plugin installer group title', 'opalestate-pro' ), 'Social' => _x( 'Social', 'Plugin installer group title', 'opalestate-pro' ), 'Tools' => _x( 'Tools', 'Plugin installer group title', 'opalestate-pro' ), ]; $group = null; ?>
groups[ $plugin['group'] ] ) ) { $group_name = $this->groups[ $plugin['group'] ]; if ( isset( $plugins_group_titles[ $group_name ] ) ) { $group_name = $plugins_group_titles[ $group_name ]; } } else { $group_name = $plugin['group']; } // Starting a new group, close off the divs of the last one if ( ! empty( $group ) ) { echo '
'; } echo '

' . esc_html( $group_name ) . '

'; // needs an extra wrapping div for nth-child selectors to work echo '
'; $group = $plugin['group']; } $title = wp_kses( $plugin['name'], $plugins_allowedtags ); // Remove any HTML from the description. $description = strip_tags( $plugin['short_description'] ); $version = wp_kses( $plugin['version'], $plugins_allowedtags ); $name = strip_tags( $title . ' ' . $version ); $author = wp_kses( $plugin['author'], $plugins_allowedtags ); if ( ! empty( $author ) ) { $author = ' ' . sprintf( __( 'By %s', 'opalestate-pro' ), $author ) . ''; } $requires_php = isset( $plugin['requires_php'] ) ? $plugin['requires_php'] : null; $requires_wp = isset( $plugin['requires'] ) ? $plugin['requires'] : null; $compatible_php = is_php_version_compatible( $requires_php ); $compatible_wp = is_wp_version_compatible( $requires_wp ); $tested_wp = ( empty( $plugin['tested'] ) || version_compare( get_bloginfo( 'version' ), $plugin['tested'], '<=' ) ); $action_links = []; if ( current_user_can( 'install_plugins' ) || current_user_can( 'update_plugins' ) ) { $status = install_plugin_install_status( $plugin ); switch ( $status['status'] ) { case 'install': if ( $status['url'] ) { if ( $compatible_php && $compatible_wp ) { $action_links[] = sprintf( '%s', esc_attr( $plugin['slug'] ), esc_url( $status['url'] ), /* translators: %s: plugin name and version */ esc_attr( sprintf( __( 'Install %s now', 'opalestate-pro' ), $name ) ), esc_attr( $name ), __( 'Install Now', 'opalestate-pro' ) ); } else { $action_links[] = sprintf( '', _x( 'Cannot Install', 'plugin', 'opalestate-pro' ) ); } } break; case 'update_available': if ( $status['url'] ) { if ( $compatible_php && $compatible_wp ) { $action_links[] = sprintf( '%s', esc_attr( $status['file'] ), esc_attr( $plugin['slug'] ), esc_url( $status['url'] ), /* translators: %s: plugin name and version */ esc_attr( sprintf( __( 'Update %s now', 'opalestate-pro' ), $name ) ), esc_attr( $name ), __( 'Update Now', 'opalestate-pro' ) ); } else { $action_links[] = sprintf( '', _x( 'Cannot Update', 'plugin', 'opalestate-pro' ) ); } } break; case 'latest_installed': case 'newer_installed': if ( is_plugin_active( $status['file'] ) ) { $action_links[] = sprintf( '', _x( 'Active', 'plugin', 'opalestate-pro' ) ); } elseif ( current_user_can( 'activate_plugin', $status['file'] ) ) { $button_text = __( 'Activate', 'opalestate-pro' ); /* translators: %s: plugin name */ $button_label = _x( 'Activate %s', 'plugin', 'opalestate-pro' ); $activate_url = add_query_arg( [ '_wpnonce' => wp_create_nonce( 'activate-plugin_' . $status['file'] ), 'action' => 'activate', 'plugin' => $status['file'], ], network_admin_url( 'plugins.php' ) ); if ( is_network_admin() ) { $button_text = __( 'Network Activate', 'opalestate-pro' ); /* translators: %s: plugin name */ $button_label = _x( 'Network Activate %s', 'plugin', 'opalestate-pro' ); $activate_url = add_query_arg( [ 'networkwide' => 1 ], $activate_url ); } $action_links[] = sprintf( '%3$s', esc_url( $activate_url ), esc_attr( sprintf( $button_label, $plugin['name'] ) ), $button_text ); } else { $action_links[] = sprintf( '', _x( 'Installed', 'plugin', 'opalestate-pro' ) ); } break; } } $details_link = self_admin_url( 'plugin-install.php?tab=plugin-information&plugin=' . $plugin['slug'] . '&TB_iframe=true&width=600&height=550' ); $action_links[] = sprintf( '%s', esc_url( $details_link ), /* translators: %s: plugin name and version */ esc_attr( sprintf( __( 'More information about %s', 'opalestate-pro' ), $name ) ), esc_attr( $name ), __( 'More Details', 'opalestate-pro' ) ); if ( ! empty( $plugin['icons']['svg'] ) ) { $plugin_icon_url = $plugin['icons']['svg']; } elseif ( ! empty( $plugin['icons']['2x'] ) ) { $plugin_icon_url = $plugin['icons']['2x']; } elseif ( ! empty( $plugin['icons']['1x'] ) ) { $plugin_icon_url = $plugin['icons']['1x']; } else { $plugin_icon_url = $plugin['icons']['default']; } /** * Filters the install action links for a plugin. * * @param string[] $action_links An array of plugin action links. Defaults are links to Details and Install Now. * @param array $plugin The plugin currently being listed. * @since 2.7.0 * */ $action_links = apply_filters( 'plugin_install_action_links', $action_links, $plugin ); $last_updated_timestamp = strtotime( $plugin['last_updated'] ); ?>

'; if ( ! $compatible_php && ! $compatible_wp ) { _e( 'This plugin doesn’t work with your versions of WordPress and PHP.', 'opalestate-pro' ); if ( current_user_can( 'update_core' ) && current_user_can( 'update_php' ) ) { printf( /* translators: 1: "Update WordPress" screen URL, 2: "Update PHP" page URL */ ' ' . __( 'Please update WordPress, and then learn more about updating PHP.', 'opalestate-pro' ), self_admin_url( 'update-core.php' ), esc_url( wp_get_update_php_url() ) ); wp_update_php_annotation( '

', '' ); } elseif ( current_user_can( 'update_core' ) ) { printf( /* translators: %s: "Update WordPress" screen URL */ ' ' . __( 'Please update WordPress.', 'opalestate-pro' ), self_admin_url( 'update-core.php' ) ); } elseif ( current_user_can( 'update_php' ) ) { printf( /* translators: %s: "Update PHP" page URL */ ' ' . __( 'Learn more about updating PHP.', 'opalestate-pro' ), esc_url( wp_get_update_php_url() ) ); wp_update_php_annotation( '

', '' ); } } elseif ( ! $compatible_wp ) { _e( 'This plugin doesn’t work with your version of WordPress.', 'opalestate-pro' ); if ( current_user_can( 'update_core' ) ) { printf( /* translators: %s: "Update WordPress" screen URL */ ' ' . __( 'Please update WordPress.', 'opalestate-pro' ), self_admin_url( 'update-core.php' ) ); } } elseif ( ! $compatible_php ) { _e( 'This plugin doesn’t work with your version of PHP.', 'opalestate-pro' ); if ( current_user_can( 'update_php' ) ) { printf( /* translators: %s: "Update PHP" page URL */ ' ' . __( 'Learn more about updating PHP.', 'opalestate-pro' ), esc_url( wp_get_update_php_url() ) ); wp_update_php_annotation( '

', '' ); } } echo '

'; } ?>

$plugin['rating'], 'type' => 'percent', 'number' => $plugin['num_ratings'], ] ); ?>
= 1000000 ) { $active_installs_millions = floor( $plugin['active_installs'] / 1000000 ); $active_installs_text = sprintf( _nx( '%s+ Million', '%s+ Million', $active_installs_millions, 'Active plugin installations', 'opalestate-pro' ), number_format_i18n( $active_installs_millions ) ); } elseif ( 0 == $plugin['active_installs'] ) { $active_installs_text = _x( 'Less Than 10', 'Active plugin installations', 'opalestate-pro' ); } else { $active_installs_text = number_format_i18n( $plugin['active_installs'] ) . '+'; } printf( __( '%s Active Installations', 'opalestate-pro' ), $active_installs_text ); ?>
' . __( 'Untested with your version of WordPress', 'opalestate-pro' ) . ''; } elseif ( ! $compatible_wp ) { echo '' . __( 'Incompatible with your version of WordPress', 'opalestate-pro' ) . ''; } else { echo '' . __( 'Compatible with your version of WordPress', 'opalestate-pro' ) . ''; } ?>

' . esc_html__( 'There was an error retrieving the Opalestate Add-ons list from the server. Please try again later.', 'opalestate-pro' ) . ''; } ?>