Switch to native WordPress plugin installer: - Use WP_Plugin_Install_List_Table for plugin browser - Filter plugins API results for curated lists - Remove custom plugin card styles - Keep category filter buttons
This commit is contained in:
@ -174,13 +174,7 @@
|
||||
box-shadow: 0 2px 4px rgba(0,0,0,0.3);
|
||||
}
|
||||
|
||||
/* Settings content spacing */
|
||||
.wpa-settings-content {
|
||||
margin-top: 30px;
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
/* Plugin Browser Styles */
|
||||
/* Plugin filters */
|
||||
.wpa-plugin-filters {
|
||||
margin: 0 0 20px;
|
||||
padding: 0 0 12px;
|
||||
@ -195,98 +189,7 @@
|
||||
min-height: 30px;
|
||||
}
|
||||
|
||||
.wpa-plugins-browser {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
|
||||
gap: 20px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.plugin-card {
|
||||
background-color: #fff;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 4px;
|
||||
box-shadow: 0 1px 4px rgba(0,0,0,0.02);
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
transition: all .15s ease-in-out;
|
||||
}
|
||||
|
||||
.plugin-card:hover {
|
||||
border-color: #4caf50;
|
||||
box-shadow: 0 2px 8px rgba(0,0,0,0.04);
|
||||
}
|
||||
|
||||
.plugin-card-top {
|
||||
padding: 20px;
|
||||
min-height: 150px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.plugin-card .name {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.plugin-card .name h3 {
|
||||
font-size: 16px;
|
||||
line-height: 1.3;
|
||||
margin: 0;
|
||||
color: #1d2327;
|
||||
}
|
||||
|
||||
.plugin-card .plugin-author {
|
||||
font-size: 13px;
|
||||
color: #646970;
|
||||
font-weight: 400;
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
.plugin-card .desc {
|
||||
margin: 8px 0;
|
||||
color: #50575e;
|
||||
}
|
||||
|
||||
.plugin-card .desc p {
|
||||
margin: 0;
|
||||
font-size: 13px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.plugin-card .action-links {
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
.plugin-action-buttons {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.plugin-action-buttons li {
|
||||
display: inline-block;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.plugin-action-buttons .button {
|
||||
min-height: 30px;
|
||||
line-height: 28px;
|
||||
padding: 0 12px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.plugin-action-buttons .button-disabled {
|
||||
color: #a7aaad !important;
|
||||
border-color: #ddd !important;
|
||||
background: #f6f7f7 !important;
|
||||
box-shadow: none !important;
|
||||
cursor: default;
|
||||
transform: none !important;
|
||||
}
|
||||
|
||||
/* Adjust settings content padding for plugin browser */
|
||||
/* Settings content spacing */
|
||||
.wpa-settings-content {
|
||||
margin-top: 20px;
|
||||
padding: 0;
|
||||
|
@ -13,136 +13,105 @@ function wpa_superstar_admin_menu() {
|
||||
'wpa_superstar_settings_page'
|
||||
);
|
||||
}
|
||||
add_action( 'admin_menu', 'wpa_superstar_admin_menu' );
|
||||
add_action('admin_menu', 'wpa_superstar_admin_menu');
|
||||
|
||||
// Register settings
|
||||
function wpa_superstar_register_settings() {
|
||||
register_setting( 'wpa-superstar-settings', 'wpa_superstar_lazy_load' );
|
||||
register_setting( 'wpa-superstar-settings', 'wpa_superstar_minify_css' );
|
||||
register_setting( 'wpa-superstar-settings', 'wpa_superstar_minify_js' );
|
||||
register_setting('wpa-superstar-settings', 'wpa_superstar_lazy_load');
|
||||
register_setting('wpa-superstar-settings', 'wpa_superstar_minify_css');
|
||||
register_setting('wpa-superstar-settings', 'wpa_superstar_minify_js');
|
||||
}
|
||||
add_action( 'admin_init', 'wpa_superstar_register_settings' );
|
||||
add_action('admin_init', 'wpa_superstar_register_settings');
|
||||
|
||||
// AJAX handler
|
||||
// AJAX handler for settings
|
||||
function wpa_superstar_update_option() {
|
||||
check_ajax_referer( 'wpa-superstar-nonce', 'nonce' );
|
||||
$option = sanitize_text_field( $_POST['option'] );
|
||||
$value = intval( $_POST['value'] );
|
||||
update_option( $option, $value );
|
||||
wp_send_json_success( 'Option updated' );
|
||||
check_ajax_referer('wpa-superstar-nonce', 'nonce');
|
||||
$option = sanitize_text_field($_POST['option']);
|
||||
$value = intval($_POST['value']);
|
||||
update_option($option, $value);
|
||||
wp_send_json_success('Option updated');
|
||||
}
|
||||
add_action( 'wp_ajax_wpa_superstar_update_option', 'wpa_superstar_update_option' );
|
||||
add_action('wp_ajax_wpa_superstar_update_option', 'wpa_superstar_update_option');
|
||||
|
||||
// Define recommended plugins
|
||||
function wpa_superstar_get_recommended_plugins() {
|
||||
return array(
|
||||
'utilities' => array(
|
||||
'name' => 'Recommended',
|
||||
'plugins' => array(
|
||||
array(
|
||||
'slug' => 'advanced-custom-fields',
|
||||
'name' => 'Advanced Custom Fields',
|
||||
'description' => 'Customize WordPress with powerful, professional and intuitive fields.',
|
||||
'author' => 'WP Engine',
|
||||
'category' => 'recommended'
|
||||
),
|
||||
array(
|
||||
'slug' => 'admin-menu-editor',
|
||||
'name' => 'Admin Menu Editor',
|
||||
'description' => 'Customize the WordPress admin menu.',
|
||||
'author' => 'Janis Elsts',
|
||||
'category' => 'recommended'
|
||||
),
|
||||
array(
|
||||
'slug' => 'antispam-bee',
|
||||
'name' => 'Antispam Bee',
|
||||
'description' => 'Antispam plugin with a sophisticated toolset for effective spam protection.',
|
||||
'author' => 'pluginkollektiv',
|
||||
'category' => 'recommended'
|
||||
),
|
||||
array(
|
||||
'slug' => 'burst-statistics',
|
||||
'name' => 'Burst Statistics',
|
||||
'description' => 'Privacy-friendly analytics tool.',
|
||||
'author' => 'Really Simple Plugins',
|
||||
'category' => 'recommended'
|
||||
)
|
||||
)
|
||||
'recommended' => array(
|
||||
'advanced-custom-fields',
|
||||
'admin-menu-editor',
|
||||
'antispam-bee',
|
||||
'burst-statistics',
|
||||
'freesoul-deactivate-plugins',
|
||||
'plugin-toggle',
|
||||
'pretty-links',
|
||||
'seo-by-rank-math',
|
||||
'turnstile'
|
||||
),
|
||||
'fluent' => array(
|
||||
'name' => 'Advanced',
|
||||
'plugins' => array(
|
||||
array(
|
||||
'slug' => 'fluent-crm',
|
||||
'name' => 'Fluent CRM',
|
||||
'description' => 'Marketing Automation for WordPress.',
|
||||
'author' => 'WP Fluent',
|
||||
'category' => 'advanced'
|
||||
),
|
||||
array(
|
||||
'slug' => 'fluentform',
|
||||
'name' => 'Fluent Forms',
|
||||
'description' => 'Advanced Contact Form Plugin.',
|
||||
'author' => 'WP Fluent',
|
||||
'category' => 'advanced'
|
||||
),
|
||||
array(
|
||||
'slug' => 'fluent-smtp',
|
||||
'name' => 'Fluent SMTP',
|
||||
'description' => 'The Most Advanced SMTP & Email Service Integration Plugin.',
|
||||
'author' => 'WP Fluent',
|
||||
'category' => 'advanced'
|
||||
),
|
||||
array(
|
||||
'slug' => 'fluent-support',
|
||||
'name' => 'Fluent Support',
|
||||
'description' => 'Customer Support & Helpdesk Plugin.',
|
||||
'author' => 'WP Fluent',
|
||||
'category' => 'advanced'
|
||||
)
|
||||
)
|
||||
'advanced' => array(
|
||||
'fluent-crm',
|
||||
'fluentform',
|
||||
'fluent-smtp',
|
||||
'fluent-support'
|
||||
),
|
||||
'ecommerce' => array(
|
||||
'name' => 'Ecommerce',
|
||||
'plugins' => array(
|
||||
array(
|
||||
'slug' => 'woocommerce',
|
||||
'name' => 'WooCommerce',
|
||||
'description' => 'An eCommerce toolkit that helps you sell anything.',
|
||||
'author' => 'Automattic',
|
||||
'category' => 'ecommerce'
|
||||
),
|
||||
array(
|
||||
'slug' => 'client-booking',
|
||||
'name' => 'Client Bookings',
|
||||
'description' => 'Appointment Scheduling & Booking.',
|
||||
'author' => 'WP Fluent',
|
||||
'category' => 'ecommerce'
|
||||
)
|
||||
)
|
||||
'woocommerce',
|
||||
'client-booking'
|
||||
),
|
||||
'lms' => array(
|
||||
'name' => 'LMS',
|
||||
'plugins' => array(
|
||||
// Add LMS plugins here when needed
|
||||
)
|
||||
// Add LMS plugins when needed
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// Filter the plugins API results
|
||||
function wpa_superstar_filter_plugins_api($result, $action, $args) {
|
||||
if ($action !== 'query_plugins') {
|
||||
return $result;
|
||||
}
|
||||
|
||||
// Only filter on our page
|
||||
if (!isset($_GET['page']) || $_GET['page'] !== 'wpa-superstar') {
|
||||
return $result;
|
||||
}
|
||||
|
||||
$category = isset($_GET['category']) ? sanitize_key($_GET['category']) : 'recommended';
|
||||
$recommended_plugins = wpa_superstar_get_recommended_plugins();
|
||||
|
||||
if (!isset($recommended_plugins[$category])) {
|
||||
return $result;
|
||||
}
|
||||
|
||||
// Get the full plugin data for our recommended plugins
|
||||
$args = array(
|
||||
'per_page' => 100,
|
||||
'fields' => array(
|
||||
'last_updated' => true,
|
||||
'active_installs' => true,
|
||||
'downloaded' => true,
|
||||
'icons' => true,
|
||||
),
|
||||
'slug' => $recommended_plugins[$category]
|
||||
);
|
||||
|
||||
$query = new WP_Plugin_Install_List_Table();
|
||||
$query->prepare_items();
|
||||
|
||||
return plugins_api('query_plugins', $args);
|
||||
}
|
||||
add_filter('plugins_api_result', 'wpa_superstar_filter_plugins_api', 10, 3);
|
||||
|
||||
// Settings page HTML
|
||||
function wpa_superstar_settings_page() {
|
||||
$active_tab = isset( $_GET['tab'] ) ? $_GET['tab'] : 'recommended';
|
||||
$active_category = isset( $_GET['category'] ) ? $_GET['category'] : 'recommended';
|
||||
$recommended_plugins = wpa_superstar_get_recommended_plugins();
|
||||
$active_tab = isset($_GET['tab']) ? $_GET['tab'] : 'recommended';
|
||||
$active_category = isset($_GET['category']) ? $_GET['category'] : 'recommended';
|
||||
?>
|
||||
<div class="wrap wpa-superstar-wrap">
|
||||
<div class="wpa-superstar-header">
|
||||
<h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
|
||||
<h1><?php echo esc_html(get_admin_page_title()); ?></h1>
|
||||
<div class="wpa-superstar-header-actions">
|
||||
<span class="wpa-superstar-version">Version <?php echo esc_html( WPA_SUPERSTAR_VERSION ); ?></span>
|
||||
<span class="wpa-superstar-version">Version <?php echo esc_html(WPA_SUPERSTAR_VERSION); ?></span>
|
||||
<a href="https://www.wpallstars.com/docs/superstar-plugin/" target="_blank" class="button button-secondary">
|
||||
<?php esc_html_e( 'Documentation', 'wpa-superstar' ); ?>
|
||||
<?php esc_html_e('Documentation', 'wpa-superstar'); ?>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@ -151,90 +120,53 @@ function wpa_superstar_settings_page() {
|
||||
<div class="wpa-superstar-nav">
|
||||
<h2 class="nav-tab-wrapper">
|
||||
<a href="?page=wpa-superstar&tab=recommended" class="nav-tab <?php echo $active_tab == 'recommended' ? 'nav-tab-active' : ''; ?>">
|
||||
<?php esc_html_e( 'Recommended', 'wpa-superstar' ); ?>
|
||||
<?php esc_html_e('Recommended', 'wpa-superstar'); ?>
|
||||
</a>
|
||||
<a href="?page=wpa-superstar&tab=general" class="nav-tab <?php echo $active_tab == 'general' ? 'nav-tab-active' : ''; ?>">
|
||||
<?php esc_html_e( 'General', 'wpa-superstar' ); ?>
|
||||
<?php esc_html_e('General', 'wpa-superstar'); ?>
|
||||
</a>
|
||||
<a href="?page=wpa-superstar&tab=advanced" class="nav-tab <?php echo $active_tab == 'advanced' ? 'nav-tab-active' : ''; ?>">
|
||||
<?php esc_html_e( 'Advanced', 'wpa-superstar' ); ?>
|
||||
<?php esc_html_e('Advanced', 'wpa-superstar'); ?>
|
||||
</a>
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
<div class="wpa-settings-content">
|
||||
<?php if ( $active_tab == 'recommended' ) : ?>
|
||||
<?php if ($active_tab == 'recommended'): ?>
|
||||
<div class="wpa-plugin-filters">
|
||||
<a href="?page=wpa-superstar&tab=recommended&category=recommended"
|
||||
class="button <?php echo $active_category == 'recommended' ? 'button-primary' : ''; ?>">
|
||||
<?php esc_html_e( 'Recommended', 'wpa-superstar' ); ?>
|
||||
<?php esc_html_e('Recommended', 'wpa-superstar'); ?>
|
||||
</a>
|
||||
<a href="?page=wpa-superstar&tab=recommended&category=advanced"
|
||||
class="button <?php echo $active_category == 'advanced' ? 'button-primary' : ''; ?>">
|
||||
<?php esc_html_e( 'Advanced', 'wpa-superstar' ); ?>
|
||||
<?php esc_html_e('Advanced', 'wpa-superstar'); ?>
|
||||
</a>
|
||||
<a href="?page=wpa-superstar&tab=recommended&category=ecommerce"
|
||||
class="button <?php echo $active_category == 'ecommerce' ? 'button-primary' : ''; ?>">
|
||||
<?php esc_html_e( 'Ecommerce', 'wpa-superstar' ); ?>
|
||||
<?php esc_html_e('Ecommerce', 'wpa-superstar'); ?>
|
||||
</a>
|
||||
<a href="?page=wpa-superstar&tab=recommended&category=lms"
|
||||
class="button <?php echo $active_category == 'lms' ? 'button-primary' : ''; ?>">
|
||||
<?php esc_html_e( 'LMS', 'wpa-superstar' ); ?>
|
||||
<?php esc_html_e('LMS', 'wpa-superstar'); ?>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="wpa-plugins-browser">
|
||||
<?php foreach ( $recommended_plugins as $section ) :
|
||||
foreach ( $section['plugins'] as $plugin ) :
|
||||
if ( $plugin['category'] === $active_category ) :
|
||||
$installed = is_dir( WP_PLUGIN_DIR . '/' . $plugin['slug'] );
|
||||
$install_url = wp_nonce_url(
|
||||
add_query_arg(
|
||||
array(
|
||||
'action' => 'install-plugin',
|
||||
'plugin' => $plugin['slug']
|
||||
),
|
||||
admin_url( 'update.php' )
|
||||
),
|
||||
'install-plugin_' . $plugin['slug']
|
||||
);
|
||||
?>
|
||||
<div class="plugin-card">
|
||||
<div class="plugin-card-top">
|
||||
<div class="name column-name">
|
||||
<h3>
|
||||
<?php echo esc_html( $plugin['name'] ); ?>
|
||||
<span class="plugin-author">
|
||||
<?php printf( esc_html__( 'By %s', 'wpa-superstar' ), esc_html( $plugin['author'] ) ); ?>
|
||||
</span>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="desc column-description">
|
||||
<p><?php echo esc_html( $plugin['description'] ); ?></p>
|
||||
</div>
|
||||
<div class="action-links">
|
||||
<ul class="plugin-action-buttons">
|
||||
<li>
|
||||
<?php if ( $installed ) : ?>
|
||||
<button class="button button-disabled" disabled><?php esc_html_e( 'Installed', 'wpa-superstar' ); ?></button>
|
||||
<?php else : ?>
|
||||
<a href="<?php echo esc_url( $install_url ); ?>" class="button button-primary">
|
||||
<?php esc_html_e( 'Install Now', 'wpa-superstar' ); ?>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
endif;
|
||||
endforeach;
|
||||
endforeach;
|
||||
?>
|
||||
</div>
|
||||
<?php
|
||||
require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
|
||||
require_once ABSPATH . 'wp-admin/includes/class-wp-plugin-install-list-table.php';
|
||||
|
||||
<?php elseif ( $active_tab == 'general' ) : ?>
|
||||
// Set up the plugin install table
|
||||
$plugin_table = new WP_Plugin_Install_List_Table();
|
||||
$plugin_table->prepare_items();
|
||||
|
||||
// Display the plugin browser
|
||||
echo '<div class="wrap">';
|
||||
$plugin_table->display();
|
||||
echo '</div>';
|
||||
?>
|
||||
|
||||
<?php elseif ($active_tab == 'general'): ?>
|
||||
<div class="wpa-superstar-toggle">
|
||||
<label for="wpa_superstar_lazy_load">
|
||||
<div class="wpa-toggle-switch">
|
||||
@ -242,17 +174,18 @@ function wpa_superstar_settings_page() {
|
||||
id="wpa_superstar_lazy_load"
|
||||
name="wpa_superstar_lazy_load"
|
||||
value="1"
|
||||
<?php checked( get_option( 'wpa_superstar_lazy_load', 1 ) ); ?>
|
||||
<?php checked(get_option('wpa_superstar_lazy_load', 1)); ?>
|
||||
/>
|
||||
<span class="wpa-toggle-slider"></span>
|
||||
</div>
|
||||
<?php esc_html_e( 'Enable lazy loading for images', 'wpa-superstar' ); ?>
|
||||
<?php esc_html_e('Enable lazy loading for images', 'wpa-superstar'); ?>
|
||||
</label>
|
||||
<p class="description">
|
||||
<?php esc_html_e( 'Improves page load time by loading images only when they enter the viewport.', 'wpa-superstar' ); ?>
|
||||
<?php esc_html_e('Improves page load time by loading images only when they enter the viewport.', 'wpa-superstar'); ?>
|
||||
</p>
|
||||
</div>
|
||||
<?php elseif ( $active_tab == 'advanced' ) : ?>
|
||||
|
||||
<?php elseif ($active_tab == 'advanced'): ?>
|
||||
<div class="wpa-superstar-toggle">
|
||||
<label for="wpa_superstar_minify_css">
|
||||
<div class="wpa-toggle-switch">
|
||||
@ -260,14 +193,14 @@ function wpa_superstar_settings_page() {
|
||||
id="wpa_superstar_minify_css"
|
||||
name="wpa_superstar_minify_css"
|
||||
value="1"
|
||||
<?php checked( get_option( 'wpa_superstar_minify_css', 0 ) ); ?>
|
||||
<?php checked(get_option('wpa_superstar_minify_css', 0)); ?>
|
||||
/>
|
||||
<span class="wpa-toggle-slider"></span>
|
||||
</div>
|
||||
<?php esc_html_e( 'Enable CSS minification', 'wpa-superstar' ); ?>
|
||||
<?php esc_html_e('Enable CSS minification', 'wpa-superstar'); ?>
|
||||
</label>
|
||||
<p class="description">
|
||||
<?php esc_html_e( 'Minifies CSS files to reduce file size and improve load times.', 'wpa-superstar' ); ?>
|
||||
<?php esc_html_e('Minifies CSS files to reduce file size and improve load times.', 'wpa-superstar'); ?>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@ -278,14 +211,14 @@ function wpa_superstar_settings_page() {
|
||||
id="wpa_superstar_minify_js"
|
||||
name="wpa_superstar_minify_js"
|
||||
value="1"
|
||||
<?php checked( get_option( 'wpa_superstar_minify_js', 0 ) ); ?>
|
||||
<?php checked(get_option('wpa_superstar_minify_js', 0)); ?>
|
||||
/>
|
||||
<span class="wpa-toggle-slider"></span>
|
||||
</div>
|
||||
<?php esc_html_e( 'Enable JS minification', 'wpa-superstar' ); ?>
|
||||
<?php esc_html_e('Enable JS minification', 'wpa-superstar'); ?>
|
||||
</label>
|
||||
<p class="description">
|
||||
<?php esc_html_e( 'Minifies JavaScript files to reduce file size and improve load times.', 'wpa-superstar' ); ?>
|
||||
<?php esc_html_e('Minifies JavaScript files to reduce file size and improve load times.', 'wpa-superstar'); ?>
|
||||
</p>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
Reference in New Issue
Block a user