init_hooks();
}
/**
* Initialize hooks - simplified approach.
*/
private function init_hooks() {
// Load admin settings page only if needed.
if ( is_admin() ) {
require_once QUEUE_OPTIMIZER_PLUGIN_DIR . 'admin/class-settings-page.php';
Queue_Optimizer_Settings_Page::get_instance();
}
// Apply the three essential ActionScheduler optimization filters.
// This is the core functionality that makes image processing fast.
add_filter( 'action_scheduler_queue_runner_time_limit', array( $this, 'set_time_limit' ) );
add_filter( 'action_scheduler_queue_runner_concurrent_batches', array( $this, 'set_concurrent_batches' ) );
add_filter( 'wp_image_editors', array( $this, 'set_image_editor' ) );
// Plugin activation hook.
register_activation_hook( QUEUE_OPTIMIZER_PLUGIN_DIR . '365i-queue-optimizer.php', array( __CLASS__, 'activate' ) );
}
/**
* Load plugin translations.
*/
public function load_textdomain() {
load_plugin_textdomain(
'365i-queue-optimizer',
false,
dirname( QUEUE_OPTIMIZER_PLUGIN_BASENAME ) . '/languages/'
);
}
/**
* Display WordPress version compatibility notice.
*/
public function display_version_notice() {
echo '
' .
sprintf(
/* translators: %s: minimum required WordPress version */
esc_html__( '365i Queue Optimizer requires WordPress version %s or higher.', '365i-queue-optimizer' ),
esc_html( QUEUE_OPTIMIZER_MIN_WP_VERSION )
) .
'
';
}
/**
* Set ActionScheduler time limit.
*
* @param int $time_limit The default time limit.
* @return int Modified time limit.
*/
public function set_time_limit( $time_limit ) {
$value = get_option( 'queue_optimizer_time_limit', 60 );
$validated = $this->validate_int_option( $value, 10, 300, 60 );
/**
* Filter the ActionScheduler time limit.
*
* @param int $validated The validated time limit value.
* @param int $value The original option value.
* @param int $time_limit The default time limit.
*/
return apply_filters( 'queue_optimizer_time_limit', $validated, $value, $time_limit );
}
/**
* Set ActionScheduler concurrent batches.
*
* @param int $batches The default number of concurrent batches.
* @return int Modified number of concurrent batches.
*/
public function set_concurrent_batches( $batches ) {
$value = get_option( 'queue_optimizer_concurrent_batches', 4 );
$validated = $this->validate_int_option( $value, 1, 10, 4 );
/**
* Filter the ActionScheduler concurrent batches.
*
* @param int $validated The validated concurrent batches value.
* @param int $value The original option value.
* @param int $batches The default number of batches.
*/
return apply_filters( 'queue_optimizer_concurrent_batches', $validated, $value, $batches );
}
/**
* Set image editor priority.
*
* @param array $editors Array of image editor class names.
* @return array Modified array with preferred editor prioritized.
*/
public function set_image_editor( $editors ) {
$allowed = array( 'WP_Image_Editor_Imagick', 'WP_Image_Editor_GD' );
$preferred = get_option( 'queue_optimizer_image_engine', 'WP_Image_Editor_Imagick' );
if ( ! in_array( $preferred, $allowed, true ) ) {
$preferred = 'WP_Image_Editor_Imagick';
}
$result = array_merge( array( $preferred ), array_diff( $editors, array( $preferred ) ) );
/**
* Filter the image editor priority array.
*
* @param array $result The reordered editors array.
* @param string $preferred The preferred editor.
* @param array $editors The original editors array.
*/
return apply_filters( 'queue_optimizer_image_editors', $result, $preferred, $editors );
}
/**
* Validate integer option within range.
*
* @param mixed $value The value to validate.
* @param int $min Minimum allowed value.
* @param int $max Maximum allowed value.
* @param int $default Default value if validation fails.
* @return int Validated value.
*/
private function validate_int_option( $value, $min, $max, $default ) {
$value = intval( $value );
return ( $value < $min || $value > $max ) ? $default : $value;
}
/**
* Plugin activation.
*/
public static function activate() {
// Set default options.
add_option( 'queue_optimizer_time_limit', 60 );
add_option( 'queue_optimizer_concurrent_batches', 4 );
add_option( 'queue_optimizer_image_engine', 'WP_Image_Editor_Imagick' );
add_option( 'queue_optimizer_activated', time() );
// Clear any caches.
wp_cache_flush();
}
}