0 ? round( $compressed_count / $total_count * 100, 2 ) : 0 );
$dasharray = $compressed_percentage * 560 / 100;
//$total_count = array_sum((array)wp_count_attachments("image"));
$not_compressed_posts = implode( ",", squeeze_get_uncompressed_images() );
$all_posts = implode( ",", squeeze_get_total_images() );
$directory_path = ( get_transient( 'squeeze_bulk_path' ) ? get_transient( 'squeeze_bulk_path' ) : array('/wp-content/uploads/') );
$directory_path_json = wp_json_encode( $directory_path );
?>
'squeeze_basic',
)
);
add_settings_field(
'squeeze_setting_auto_compress',
__( 'Squeeze on upload', 'squeeze' ),
'squeeze_options_callback',
'squeeze_options',
'squeeze_basic_settings',
array(
'label_for' => 'auto_compress',
'class' => 'squeeze_setting_auto_compress',
'type' => 'checkbox',
)
);
add_settings_field(
'squeeze_setting_backup_original',
__( 'Backup original image', 'squeeze' ),
'squeeze_options_callback',
'squeeze_options',
'squeeze_basic_settings',
array(
'label_for' => 'backup_original',
'class' => 'squeeze_setting_backup_original',
'type' => 'checkbox',
)
);
add_settings_field(
'squeeze_setting_auto_webp',
__( 'Generate WEBP', 'squeeze' ) . squeeze_get_hint( __( 'Generate and serve WEBP images for all uploaded images. The original image URL remains the same, instead the image will be served in a WEBP format.', 'squeeze' ) ),
'squeeze_options_callback',
'squeeze_options',
'squeeze_basic_settings',
array(
'label_for' => 'auto_webp',
'class' => 'squeeze_setting_auto_webp',
'type' => 'checkbox',
)
);
add_settings_field(
'squeeze_setting_webp_replace_urls',
__( 'Replace images URLs', 'squeeze' ) . squeeze_get_hint( __( 'Replace original URLs of images with the related WEBP images.', 'squeeze' ) ),
'squeeze_options_callback',
'squeeze_options',
'squeeze_basic_settings',
array(
'label_for' => 'webp_replace_urls',
'class' => 'squeeze_setting_webp_replace_urls',
'type' => 'checkbox',
'hidden' => ( $options['auto_webp'] ? '' : true ),
)
);
add_settings_field(
'squeeze_setting_compress_thumbs',
__( 'Squeeze thumbnails', 'squeeze' ) . squeeze_get_hint( __( 'Choose which image thumbnail sizes you want to squeeze along with the original image.', 'squeeze' ) ),
'squeeze_options_callback',
'squeeze_options',
'squeeze_basic_settings',
array(
'label_for' => 'compress_thumbs',
'class' => 'squeeze_setting_compress_thumbs',
'type' => 'thumbs_checkbox_group',
)
);
add_settings_field(
'squeeze_setting_timeout',
__( 'Squeeze timeout', 'squeeze' ) . squeeze_get_hint( __( 'Time limit for squeezing an image. If you get an error during image squeezing, try to increase this value.', 'squeeze' ) ),
'squeeze_options_callback',
'squeeze_options',
'squeeze_basic_settings',
array(
'label_for' => 'timeout',
'class' => 'squeeze_setting_timeout',
'type' => 'number',
'units' => 'sec',
'min' => 1,
)
);
add_settings_field(
'squeeze_setting_restore_defaults',
'',
'squeeze_options_callback',
'squeeze_options',
'squeeze_basic_settings',
array(
'label_for' => 'restore_defaults',
'class' => 'squeeze_setting_restore_defaults',
'type' => 'hidden',
)
);
add_settings_section(
'squeeze_jpeg_settings',
__( 'JPEG Settings', 'squeeze' ),
'squeeze_setting_jpeg_desc',
'squeeze_options',
array(
'section_class' => 'squeeze_jpeg',
)
);
add_settings_field(
'squeeze_setting_jpeg_quality',
__( 'Quality', 'squeeze' ),
'squeeze_options_callback',
'squeeze_options',
'squeeze_jpeg_settings',
array(
'label_for' => 'jpeg_quality',
'class' => 'squeeze_setting_jpeg_quality',
'type' => 'range',
)
);
add_settings_field(
'squeeze_setting_jpeg_smoothing',
__( 'Smoothing', 'squeeze' ),
'squeeze_options_callback',
'squeeze_options',
'squeeze_jpeg_settings',
array(
'label_for' => 'jpeg_smoothing',
'class' => 'squeeze_setting_jpeg_smoothing',
'type' => 'range',
)
);
add_settings_field(
'squeeze_setting_jpeg_baseline',
__( 'Pointless spec compliance', 'squeeze' ),
'squeeze_options_callback',
'squeeze_options',
'squeeze_jpeg_advanced_settings',
array(
'label_for' => 'jpeg_baseline',
'class' => 'squeeze_setting_jpeg_baseline',
'type' => 'checkbox',
)
);
add_settings_field(
'squeeze_setting_jpeg_arithmetic',
__( 'Arithmetic', 'squeeze' ),
'squeeze_options_callback',
'squeeze_options',
'squeeze_jpeg_advanced_settings',
array(
'label_for' => 'jpeg_arithmetic',
'class' => 'squeeze_setting_jpeg_arithmetic',
'type' => 'checkbox',
)
);
add_settings_field(
'squeeze_setting_jpeg_progressive',
__( 'Progressive rendering', 'squeeze' ),
'squeeze_options_callback',
'squeeze_options',
'squeeze_jpeg_advanced_settings',
array(
'label_for' => 'jpeg_progressive',
'class' => 'squeeze_setting_jpeg_progressive',
'type' => 'checkbox',
)
);
add_settings_field(
'squeeze_setting_jpeg_optimize_coding',
__( 'Optimize Huffman table', 'squeeze' ),
'squeeze_options_callback',
'squeeze_options',
'squeeze_jpeg_advanced_settings',
array(
'label_for' => 'jpeg_optimize_coding',
'class' => 'squeeze_setting_jpeg_optimize_coding',
'type' => 'checkbox',
)
);
add_settings_field(
'squeeze_setting_jpeg_color_space',
__( 'Channels', 'squeeze' ),
'squeeze_options_callback',
'squeeze_options',
'squeeze_jpeg_advanced_settings',
array(
'label_for' => 'jpeg_color_space',
'class' => 'squeeze_setting_jpeg_color_space',
'type' => 'select',
'options' => array(
'3' => 'YCbCr',
'1' => 'Grayscale',
'2' => 'RGB',
),
)
);
add_settings_field(
'squeeze_setting_jpeg_quant_table',
__( 'Quantization', 'squeeze' ),
'squeeze_options_callback',
'squeeze_options',
'squeeze_jpeg_advanced_settings',
array(
'label_for' => 'jpeg_quant_table',
'class' => 'squeeze_setting_jpeg_quant_table',
'type' => 'select',
'options' => array(
'0' => 'JPEG Annex K',
'1' => 'Flat',
'2' => 'MSSIM-tuned Kodak',
'3' => 'ImageMagick',
'4' => 'PSNR-HVS-M-tuned Kodak',
'5' => 'Klein et al',
'6' => 'Watson et al',
'7' => 'Ahumada et al',
'8' => 'Peterson et al',
),
)
);
add_settings_field(
'squeeze_setting_jpeg_trellis_multipass',
__( 'Trellis multipass', 'squeeze' ),
'squeeze_options_callback',
'squeeze_options',
'squeeze_jpeg_advanced_settings',
array(
'label_for' => 'jpeg_trellis_multipass',
'class' => 'squeeze_setting_jpeg_trellis_multipass',
'type' => 'checkbox',
)
);
add_settings_field(
'squeeze_setting_jpeg_trellis_opt_zero',
__( 'Optimize zero block runs', 'squeeze' ),
'squeeze_options_callback',
'squeeze_options',
'squeeze_jpeg_advanced_settings',
array(
'label_for' => 'jpeg_trellis_opt_zero',
'class' => 'squeeze_setting_jpeg_trellis_opt_zero',
'type' => 'checkbox',
)
);
add_settings_field(
'squeeze_setting_jpeg_trellis_opt_table',
__( 'Optimize after trellis quantization', 'squeeze' ),
'squeeze_options_callback',
'squeeze_options',
'squeeze_jpeg_advanced_settings',
array(
'label_for' => 'jpeg_trellis_opt_table',
'class' => 'squeeze_setting_jpeg_trellis_opt_table',
'type' => 'checkbox',
)
);
add_settings_field(
'squeeze_setting_jpeg_trellis_loops',
__( 'Trellis quantization passes', 'squeeze' ),
'squeeze_options_callback',
'squeeze_options',
'squeeze_jpeg_advanced_settings',
array(
'label_for' => 'jpeg_trellis_loops',
'class' => 'squeeze_setting_jpeg_trellis_loops',
'type' => 'range',
'min' => 1,
'max' => 50,
)
);
add_settings_field(
'squeeze_setting_jpeg_auto_subsample',
__( 'Auto subsample chroma', 'squeeze' ),
'squeeze_options_callback',
'squeeze_options',
'squeeze_jpeg_advanced_settings',
array(
'label_for' => 'jpeg_auto_subsample',
'class' => 'squeeze_setting_jpeg_auto_subsample',
'type' => 'checkbox',
)
);
add_settings_field(
'squeeze_setting_jpeg_chroma_subsample',
__( 'Subsample chroma by', 'squeeze' ),
'squeeze_options_callback',
'squeeze_options',
'squeeze_jpeg_advanced_settings',
array(
'label_for' => 'jpeg_chroma_subsample',
'class' => 'squeeze_setting_jpeg_chroma_subsample',
'type' => 'range',
'min' => 1,
'max' => 4,
)
);
add_settings_field(
'squeeze_setting_jpeg_separate_chroma_quality',
__( 'Separate chroma quality', 'squeeze' ),
'squeeze_options_callback',
'squeeze_options',
'squeeze_jpeg_advanced_settings',
array(
'label_for' => 'jpeg_separate_chroma_quality',
'class' => 'squeeze_setting_jpeg_separate_chroma_quality',
'type' => 'checkbox',
)
);
add_settings_field(
'squeeze_setting_jpeg_chroma_quality',
__( 'Chroma quality', 'squeeze' ),
'squeeze_options_callback',
'squeeze_options',
'squeeze_jpeg_advanced_settings',
array(
'label_for' => 'jpeg_chroma_quality',
'class' => 'squeeze_setting_jpeg_chroma_quality',
'type' => 'range',
)
);
add_settings_section(
'squeeze_png_settings',
__( 'PNG Settings', 'squeeze' ),
'squeeze_setting_png_desc',
'squeeze_options',
array(
'section_class' => 'squeeze_png',
)
);
add_settings_field(
'squeeze_setting_png_level',
__( 'Effort', 'squeeze' ),
'squeeze_options_callback',
'squeeze_options',
'squeeze_png_settings',
array(
'label_for' => 'png_level',
'class' => 'squeeze_setting_png_level',
'type' => 'range',
'min' => 0,
'max' => 3,
)
);
add_settings_field(
'squeeze_setting_png_interlace',
__( 'Interlace', 'squeeze' ),
'squeeze_options_callback',
'squeeze_options',
'squeeze_png_settings',
array(
'label_for' => 'png_interlace',
'class' => 'squeeze_setting_png_interlace',
'type' => 'checkbox',
)
);
add_settings_section(
'squeeze_webp_settings',
__( 'WEBP Settings', 'squeeze' ),
'squeeze_setting_webp_desc',
'squeeze_options',
array(
'section_class' => 'squeeze_webp',
)
);
add_settings_field(
'squeeze_setting_webp_method',
__( 'Effort', 'squeeze' ),
'squeeze_options_callback',
'squeeze_options',
'squeeze_webp_settings',
array(
'label_for' => 'webp_method',
'class' => 'squeeze_setting_webp_method',
'type' => 'range',
'min' => 0,
'max' => 6,
)
);
add_settings_field(
'squeeze_setting_webp_quality',
__( 'Quality', 'squeeze' ),
'squeeze_options_callback',
'squeeze_options',
'squeeze_webp_settings',
array(
'label_for' => 'webp_quality',
'class' => 'squeeze_setting_webp_quality',
'type' => 'range',
'min' => 0,
'max' => 100,
)
);
add_settings_field(
'squeeze_setting_webp_lossless',
__( 'Lossless', 'squeeze' ),
'squeeze_options_callback',
'squeeze_options',
'squeeze_webp_settings',
array(
'label_for' => 'webp_lossless',
'class' => 'squeeze_setting_webp_lossless',
'type' => 'checkbox',
)
);
add_settings_field(
'squeeze_setting_webp_near_lossless',
__( 'Near lossless', 'squeeze' ),
'squeeze_options_callback',
'squeeze_options',
'squeeze_webp_settings',
array(
'label_for' => 'webp_near_lossless',
'class' => 'squeeze_setting_webp_near_lossless',
'type' => 'range',
'min' => 0,
'max' => 100,
)
);
add_settings_section(
'squeeze_avif_settings',
__( 'AVIF Settings', 'squeeze' ),
'squeeze_setting_avif_desc',
'squeeze_options',
array(
'section_class' => 'squeeze_avif',
)
);
add_settings_field(
'squeeze_setting_avif_cqLevel',
__( 'Quality', 'squeeze' ),
'squeeze_options_callback',
'squeeze_options',
'squeeze_avif_settings',
array(
'label_for' => 'avif_cqLevel',
'class' => 'squeeze_setting_avif_cqLevel',
'type' => 'range',
'min' => 1,
'max' => 100,
)
);
}
function squeeze_get_hint( $hint, $class = 'squeeze-hint' ) {
return '' . esc_html( $hint ) . '';
}
/**
* Sanitize and validate input. Accepts an array, return a sanitized array.
* @param array $input
*/
function squeeze_options_validate( $input ) {
$input['jpeg_quality'] = absint( $input['jpeg_quality'] );
$input['jpeg_smoothing'] = absint( $input['jpeg_smoothing'] );
$input['jpeg_color_space'] = absint( $input['jpeg_color_space'] );
$input['jpeg_quant_table'] = absint( $input['jpeg_quant_table'] );
$input['jpeg_trellis_loops'] = absint( $input['jpeg_trellis_loops'] );
$input['jpeg_chroma_subsample'] = absint( $input['jpeg_chroma_subsample'] );
$input['jpeg_chroma_quality'] = absint( $input['jpeg_chroma_quality'] );
$input['png_level'] = absint( $input['png_level'] );
$input['webp_method'] = absint( $input['webp_method'] );
$input['webp_quality'] = absint( $input['webp_quality'] );
$input['webp_near_lossless'] = absint( $input['webp_near_lossless'] );
$input['avif_cqLevel'] = absint( $input['avif_cqLevel'] );
$input['jpeg_baseline'] = ( isset( $input['jpeg_baseline'] ) ? $input['jpeg_baseline'] : '0' );
$input['jpeg_arithmetic'] = ( isset( $input['jpeg_arithmetic'] ) ? $input['jpeg_arithmetic'] : '0' );
$input['jpeg_progressive'] = ( isset( $input['jpeg_progressive'] ) ? $input['jpeg_progressive'] : '0' );
$input['jpeg_optimize_coding'] = ( isset( $input['jpeg_optimize_coding'] ) ? $input['jpeg_optimize_coding'] : '0' );
$input['jpeg_trellis_multipass'] = ( isset( $input['jpeg_trellis_multipass'] ) ? $input['jpeg_trellis_multipass'] : '0' );
$input['jpeg_trellis_opt_zero'] = ( isset( $input['jpeg_trellis_opt_zero'] ) ? $input['jpeg_trellis_opt_zero'] : '0' );
$input['jpeg_trellis_opt_table'] = ( isset( $input['jpeg_trellis_opt_table'] ) ? $input['jpeg_trellis_opt_table'] : '0' );
$input['jpeg_auto_subsample'] = ( isset( $input['jpeg_auto_subsample'] ) ? $input['jpeg_auto_subsample'] : '0' );
$input['jpeg_separate_chroma_quality'] = ( isset( $input['jpeg_separate_chroma_quality'] ) ? $input['jpeg_separate_chroma_quality'] : '0' );
$input['png_interlace'] = ( isset( $input['png_interlace'] ) ? $input['png_interlace'] : '0' );
$input['webp_lossless'] = ( isset( $input['webp_lossless'] ) ? $input['webp_lossless'] : '0' );
$input['auto_compress'] = ( isset( $input['auto_compress'] ) ? $input['auto_compress'] : '0' );
$input['auto_webp'] = ( isset( $input['auto_webp'] ) ? $input['auto_webp'] : '0' );
$input['webp_replace_urls'] = ( isset( $input['webp_replace_urls'] ) && $input['auto_webp'] ? $input['webp_replace_urls'] : '0' );
$input['backup_original'] = ( isset( $input['backup_original'] ) ? $input['backup_original'] : '0' );
$input['compress_thumbs'] = ( isset( $input['compress_thumbs'] ) ? $input['compress_thumbs'] : array() );
$input['max_width'] = ( isset( $input['max_width'] ) && $input['max_width'] > 0 ? absint( $input['max_width'] ) : '' );
$input['max_height'] = ( isset( $input['max_height'] ) && $input['max_height'] > 0 ? absint( $input['max_height'] ) : '' );
$input['timeout'] = ( isset( $input['timeout'] ) && $input['timeout'] > 0 ? absint( $input['timeout'] ) : 1 );
$input['restore_defaults'] = ( isset( $input['restore_defaults'] ) ? $input['restore_defaults'] : '0' );
if ( !isset( $input['restore_defaults'] ) || $input['restore_defaults'] !== '1' ) {
add_settings_error(
'squeeze_notices',
'settings_updated',
__( 'Settings have been updated.', 'squeeze' ),
'success'
);
}
return $input;
}
/**
* Display and fill the form field
* @param array $args
*/
function squeeze_options_callback( $args ) {
$label_for = $args['label_for'];
$class = $args['class'];
$type = $args['type'];
$default = squeeze_get_default_value( $label_for );
$options = get_option( 'squeeze_options' );
$is_hidden = ( isset( $args['hidden'] ) && $args['hidden'] ? 'hidden' : '' );
$extra_classes = [];
if ( $is_hidden ) {
$extra_classes[] = 'squeeze-hidden';
}
$extra_classes = implode( ' ', $extra_classes );
switch ( $type ) {
case 'text':
$value = ( isset( $options[$label_for] ) ? $options[$label_for] : $default );
echo "";
break;
case 'number':
$value = ( isset( $options[$label_for] ) ? $options[$label_for] : $default );
$units = ( isset( $args['units'] ) ? $args['units'] : '' );
$min = ( isset( $args['min'] ) ? $args['min'] : '' );
$max = ( isset( $args['max'] ) ? $args['max'] : '' );
echo "";
if ( $units ) {
echo "" . esc_html( $units ) . "";
}
break;
case 'range':
$value = ( isset( $options[$label_for] ) ? $options[$label_for] : $default );
$min = ( isset( $args['min'] ) ? $args['min'] : 0 );
$max = ( isset( $args['max'] ) ? $args['max'] : 100 );
$step = ( isset( $args['step'] ) ? $args['step'] : 1 );
echo "";
echo '';
?>
";
echo '';
break;
case 'select':
$value = ( isset( $options[$label_for] ) ? $options[$label_for] : $default );
echo "";
break;
case 'thumbs_checkbox_group':
$thumbs = array();
$value = ( isset( $options[$label_for] ) ? (array) $options[$label_for] : $default );
$available_sizes = wp_get_registered_image_subsizes();
foreach ( $available_sizes as $key => $size ) {
$thumbs[$key] = ucwords( str_replace( '_', ' ', $key ) ) . ' (' . $size['width'] . 'x' . $size['height'] . ')';
}
// Add the scaled image size option
$big_image_size_threshold = apply_filters( 'big_image_size_threshold', 2560 );
$thumbs['full'] = 'Scaled (' . $big_image_size_threshold . 'x' . $big_image_size_threshold . ')';
echo '';
echo '
';
foreach ( $thumbs as $key => $option ) {
echo '
';
echo " ";
echo "";
echo '
';
}
echo '
';
echo '
';
break;
case 'hidden':
$value = ( isset( $options[$label_for] ) ? $options[$label_for] : $default );
echo "";
break;
}
}
/**
* Get default value for option
* @param string $option
* @param bool $all
*/
function squeeze_get_default_value( $option, $all = false ) {
$options_defaults = apply_filters( 'squeeze_options_default', array(
'jpeg_quality' => 75,
'jpeg_baseline' => false,
'jpeg_arithmetic' => false,
'jpeg_progressive' => true,
'jpeg_optimize_coding' => true,
'jpeg_smoothing' => 0,
'jpeg_color_space' => 3,
'jpeg_quant_table' => 3,
'jpeg_trellis_multipass' => false,
'jpeg_trellis_opt_zero' => false,
'jpeg_trellis_opt_table' => false,
'jpeg_trellis_loops' => 1,
'jpeg_auto_subsample' => true,
'jpeg_chroma_subsample' => 2,
'jpeg_separate_chroma_quality' => false,
'jpeg_chroma_quality' => 75,
'png_level' => 2,
'png_interlace' => false,
'webp_method' => 4,
'webp_quality' => 75,
'webp_lossless' => false,
'webp_near_lossless' => 100,
'avif_cqLevel' => 70,
'auto_compress' => true,
'auto_webp' => true,
'webp_replace_urls' => false,
'backup_original' => true,
'compress_thumbs' => array(
'large' => 'on',
'full' => 'on',
),
'max_width' => '',
'max_height' => '',
'timeout' => 60,
'restore_defaults' => false,
) );
if ( $all ) {
return $options_defaults;
}
return ( in_array( $option, array_keys( $options_defaults ) ) ? $options_defaults[$option] : false );
}
function squeeze_setting_basic_desc() {
echo '' . esc_html__( 'Basic squeezing settings.', 'squeeze' ) . '
';
}
function squeeze_setting_jpeg_desc() {
echo '' . esc_html__( 'Squeezing settings for JPEG images.', 'squeeze' ) . '
';
}
function squeeze_setting_jpeg_advanced_desc() {
echo '' . esc_html__( 'More precise settings for experienced users.', 'squeeze' ) . '
';
}
function squeeze_setting_png_desc() {
echo '' . esc_html__( 'Squeezing settings for PNG images.', 'squeeze' ) . '
';
}
function squeeze_setting_webp_desc() {
echo '' . esc_html__( 'Squeezing settings for WebP images.', 'squeeze' ) . '
';
}
function squeeze_setting_avif_desc() {
echo '' . esc_html__( 'Squeezing settings for Avif images.', 'squeeze' ) . '
';
}
add_action(
'update_option_squeeze_options',
'squeeze_restore_defaults',
10,
2
);
/**
* Restore default settings
*/
function squeeze_restore_defaults( $old_value, $value ) {
if ( isset( $value['restore_defaults'] ) && $value['restore_defaults'] === '1' ) {
$result = delete_option( 'squeeze_options', "" );
if ( $result ) {
add_settings_error(
'squeeze_notices',
'settings_restored',
__( 'Settings have been restored.', 'squeeze' ),
'success'
);
} else {
add_settings_error(
'squeeze_notices',
'settings_not_restored',
__( 'Settings have not been restored.', 'squeeze' ),
'error'
);
}
}
}
add_filter(
'attachment_fields_to_edit',
'squeeze_add_custom_field_to_attachment',
10,
2
);
/**
* Add custom text/textarea attachment field
*/
function squeeze_add_custom_field_to_attachment( $form_fields, $post ) {
$allowed_mimes = SQUEEZE_ALLOWED_IMAGE_MIME_TYPES;
if ( in_array( $post->post_mime_type, $allowed_mimes ) ) {
$is_compressed = get_post_meta( $post->ID, 'squeeze_is_compressed', true );
$can_restore = squeeze_can_restore( $post->ID );
$form_fields['squeeze_is_compressed'] = array(
'label' => __( 'Squeeze', 'squeeze' ),
'input' => 'html',
'html' => ( $is_compressed ? '' . (( $can_restore ? '
' : '' )) . '
' : '
' ),
);
}
return $form_fields;
}
add_filter( 'manage_media_columns', 'squeeze_add_media_columns' );
/**
* Filter the Media list table columns to add a Squeeze column.
*
* @param array $posts_columns Existing array of columns displayed in the Media list table.
* @return array Amended array of columns to be displayed in the Media list table.
*/
function squeeze_add_media_columns( $posts_columns ) {
$posts_columns['squeeze'] = __( 'Squeeze', 'squeeze' );
return $posts_columns;
}
add_action(
'manage_media_custom_column',
'squeeze_media_custom_column',
10,
2
);
/**
* Display attachment uploaded time under `Time` custom column in the Media list table.
*
* @param string $column_name Name of the custom column.
*/
function squeeze_media_custom_column( $column_name, $post_id ) {
if ( 'squeeze' !== $column_name ) {
return;
}
$form_fields = squeeze_add_custom_field_to_attachment( array(), get_post( $post_id ) );
if ( $form_fields ) {
echo wp_kses_post( $form_fields['squeeze_is_compressed']['html'] );
}
}
add_filter( 'manage_upload_sortable_columns', 'squeeze_sortable_columns' );
/**
* Add sortable Squeeze column
*/
function squeeze_sortable_columns( $columns ) {
$columns['squeeze'] = 'squeeze';
return $columns;
}
add_action( 'pre_get_posts', 'squeeze_sortable_columns_orderby' );
/**
* Order by Squeeze column
*/
function squeeze_sortable_columns_orderby( $query ) {
if ( !is_admin() || !$query->is_main_query() ) {
return;
}
$orderby = $query->get( 'orderby' );
if ( 'squeeze' === $orderby ) {
// Define the allowed image formats
$allowed_formats = SQUEEZE_ALLOWED_IMAGE_MIME_TYPES;
// include all media
$query->set( 'meta_query', array(
'relation' => 'OR',
array(
'key' => 'squeeze_is_compressed',
'compare' => 'NOT EXISTS',
),
array(
'key' => 'squeeze_is_compressed',
'compare' => 'EXISTS',
),
) );
// Add the meta_query to filter by specific image formats
//$query->set('post_mime_type', $allowed_formats);
$query->set( 'orderby', 'meta_value' );
}
}
add_action( 'restrict_manage_posts', 'squeeze_media_filter_dropdown' );
/**
* Add a dropdown filter to the media library
*/
function squeeze_media_filter_dropdown() {
global $wp_query;
$post_type = 'attachment';
if ( isset( $_GET['post_type'] ) ) {
$post_type = sanitize_text_field( wp_unslash( $_GET['post_type'] ) );
}
if ( 'attachment' === $post_type ) {
$selected = ( isset( $_GET['squeeze_filter'] ) ? sanitize_text_field( wp_unslash( $_GET['squeeze_filter'] ) ) : '' );
$options = array(
'all' => __( 'Squeeze: All images', 'squeeze' ),
'non-squeezed' => __( 'Non Squeezed Images', 'squeeze' ),
);
echo '';
}
}
add_action( 'pre_get_posts', 'squeeze_media_filter_query' );
/**
* Filter the media library query
*/
function squeeze_media_filter_query( $query ) {
global $current_screen;
if ( !is_admin() || !empty( $current_screen ) && 'upload' !== $current_screen->base || 'attachment' !== $query->get( 'post_type' ) ) {
return $query;
}
if ( isset( $_GET['squeeze_filter'] ) ) {
$squeeze_filter = sanitize_text_field( wp_unslash( $_GET['squeeze_filter'] ) );
if ( 'non-squeezed' === $squeeze_filter ) {
$query->set( 'meta_query', array(
'relation' => 'OR',
array(
'key' => 'squeeze_is_compressed',
'compare' => '!=',
'value' => '1',
),
array(
'key' => 'squeeze_is_compressed',
'compare' => 'NOT EXISTS',
),
) );
$query->set( 'orderby', 'meta_value' );
$query->set( 'post_mime_type', SQUEEZE_ALLOWED_IMAGE_MIME_TYPES );
}
}
return $query;
}
add_filter(
'ajax_query_attachments_args',
'squeeze_media_filter_ajax_query',
10,
1
);
/**
* Filter the media library query for AJAX requests
*/
function squeeze_media_filter_ajax_query( $query ) {
if ( !isset( $_POST['query']['squeeze_filter'] ) ) {
return $query;
}
$squeeze_filter = sanitize_text_field( wp_unslash( $_POST['query']['squeeze_filter'] ) );
if ( 'non-squeezed' === $squeeze_filter ) {
$query['meta_query'] = array(
'relation' => 'OR',
array(
'key' => 'squeeze_is_compressed',
'compare' => '!=',
'value' => '1',
),
array(
'key' => 'squeeze_is_compressed',
'compare' => 'NOT EXISTS',
),
);
$query['orderby'] = 'meta_value';
$query['post_mime_type'] = SQUEEZE_ALLOWED_IMAGE_MIME_TYPES;
}
return $query;
}
add_action( 'admin_footer', 'squeeze_svg_sprite_output' );
/**
* Output SVG sprite
*/
function squeeze_svg_sprite_output() {
global $pagenow;
if ( $pagenow === 'upload.php' && isset( $_GET['page'] ) && $_GET['page'] === 'squeeze-bulk' ) {
include SQUEEZE_PLUGIN_DIR . 'assets/images/sprite.svg';
}
}