1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
<?php /** * WPThumb Enhancements Class * Date: 7 Nov 2016 * * Some themes include a filter to override the ORDER of the image editors to be used, * so that the GD library is used as a preference over the Imagick library. * This is acceptable, but WPThumb requires it's own overrides of the WP_Image_Editor_GD * and WP_Image_Editor_Imagick classes (set in wpthumb.php 'wpthumb_add_image_editors' * function). An example of this filter code is: * * add_filter( 'wp_image_editors', 'change_graphic_lib' ); * function change_graphic_lib($array) { * return array( 'WP_Image_Editor_GD', 'WP_Image_Editor_Imagick' ); * } * * The theme's filter runs after the WPThumb filter, so the override classes needed * by WPThumb are ignored. This stops WPThumb from working altogether. To get around * this we need to override the image editors later (priority 999) and "force" the * usage of the WPThumb override classes, while still preserving the order set by the * theme author, or server administrator. * * The hosting provider's decision to use GD over Imagick is usually due to a timeout * that occurs when large images are uploaded to the media library. The PHP setting * for memory on the server could be too low, and this causes Imagick to timeout. * Switching to GD usually fixes the problem, without needing to change memory limits. * */ if ( ! class_exists( 'FooGallery_WPThumb_Enhancements' ) ) {
class FooGallery_WPThumb_Enhancements {
function __construct() { add_filter( 'wp_image_editors', array( $this, 'override_image_editors' ), 999 ); }
/** * Overrides the editors to make sure the WPThumb editors are included * * @param $editors * @return array */ function override_image_editors($editors) {
$wpthumb_editors = array();
//replace the default image editors with the WPThumb image editors. // also preserve the order so that certain hosts work as expected foreach ($editors as $editor) { switch ($editor) { case 'WP_Image_Editor_Imagick': $wpthumb_editors[] = 'WP_Thumb_Image_Editor_Imagick'; break; case 'WP_Image_Editor_GD': $wpthumb_editors[] = 'WP_Thumb_Image_Editor_GD'; break; default: $wpthumb_editors[] = $editor; } }
//make sure we have a unique list of editors return array_unique( $wpthumb_editors ); } } }
|