109
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
1 |
<?php |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
2 |
/** |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
3 |
* WordPress API for media display. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
4 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
5 |
* @package WordPress |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
6 |
*/ |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
7 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
8 |
/** |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
9 |
* Scale down the default size of an image. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
10 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
11 |
* This is so that the image is a better fit for the editor and theme. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
12 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
13 |
* The $size parameter accepts either an array or a string. The supported string |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
14 |
* values are 'thumb' or 'thumbnail' for the given thumbnail size or defaults at |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
15 |
* 128 width and 96 height in pixels. Also supported for the string value is |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
16 |
* 'medium' and 'full'. The 'full' isn't actually supported, but any value other |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
17 |
* than the supported will result in the content_width size or 500 if that is |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
18 |
* not set. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
19 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
20 |
* Finally, there is a filter named, 'editor_max_image_size' that will be called |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
21 |
* on the calculated array for width and height, respectively. The second |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
22 |
* parameter will be the value that was in the $size parameter. The returned |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
23 |
* type for the hook is an array with the width as the first element and the |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
24 |
* height as the second element. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
25 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
26 |
* @since 2.5.0 |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
27 |
* @uses wp_constrain_dimensions() This function passes the widths and the heights. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
28 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
29 |
* @param int $width Width of the image |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
30 |
* @param int $height Height of the image |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
31 |
* @param string|array $size Size of what the result image should be. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
32 |
* @return array Width and height of what the result image should resize to. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
33 |
*/ |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
34 |
function image_constrain_size_for_editor($width, $height, $size = 'medium') { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
35 |
global $content_width; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
36 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
37 |
if ( is_array($size) ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
38 |
$max_width = $size[0]; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
39 |
$max_height = $size[1]; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
40 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
41 |
elseif ( $size == 'thumb' || $size == 'thumbnail' ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
42 |
$max_width = intval(get_option('thumbnail_size_w')); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
43 |
$max_height = intval(get_option('thumbnail_size_h')); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
44 |
// last chance thumbnail size defaults |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
45 |
if ( !$max_width && !$max_height ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
46 |
$max_width = 128; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
47 |
$max_height = 96; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
48 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
49 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
50 |
elseif ( $size == 'medium' ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
51 |
$max_width = intval(get_option('medium_size_w')); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
52 |
$max_height = intval(get_option('medium_size_h')); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
53 |
// if no width is set, default to the theme content width if available |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
54 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
55 |
elseif ( $size == 'large' ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
56 |
// we're inserting a large size image into the editor. if it's a really |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
57 |
// big image we'll scale it down to fit reasonably within the editor |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
58 |
// itself, and within the theme's content width if it's known. the user |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
59 |
// can resize it in the editor if they wish. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
60 |
$max_width = intval(get_option('large_size_w')); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
61 |
$max_height = intval(get_option('large_size_h')); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
62 |
if ( intval($content_width) > 0 ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
63 |
$max_width = min( intval($content_width), $max_width ); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
64 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
65 |
// $size == 'full' has no constraint |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
66 |
else { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
67 |
$max_width = $width; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
68 |
$max_height = $height; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
69 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
70 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
71 |
list( $max_width, $max_height ) = apply_filters( 'editor_max_image_size', array( $max_width, $max_height ), $size ); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
72 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
73 |
return wp_constrain_dimensions( $width, $height, $max_width, $max_height ); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
74 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
75 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
76 |
/** |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
77 |
* Retrieve width and height attributes using given width and height values. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
78 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
79 |
* Both attributes are required in the sense that both parameters must have a |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
80 |
* value, but are optional in that if you set them to false or null, then they |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
81 |
* will not be added to the returned string. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
82 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
83 |
* You can set the value using a string, but it will only take numeric values. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
84 |
* If you wish to put 'px' after the numbers, then it will be stripped out of |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
85 |
* the return. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
86 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
87 |
* @since 2.5.0 |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
88 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
89 |
* @param int|string $width Optional. Width attribute value. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
90 |
* @param int|string $height Optional. Height attribute value. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
91 |
* @return string HTML attributes for width and, or height. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
92 |
*/ |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
93 |
function image_hwstring($width, $height) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
94 |
$out = ''; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
95 |
if ($width) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
96 |
$out .= 'width="'.intval($width).'" '; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
97 |
if ($height) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
98 |
$out .= 'height="'.intval($height).'" '; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
99 |
return $out; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
100 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
101 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
102 |
/** |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
103 |
* Scale an image to fit a particular size (such as 'thumb' or 'medium'). |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
104 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
105 |
* Array with image url, width, height, and whether is intermediate size, in |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
106 |
* that order is returned on success is returned. $is_intermediate is true if |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
107 |
* $url is a resized image, false if it is the original. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
108 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
109 |
* The URL might be the original image, or it might be a resized version. This |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
110 |
* function won't create a new resized copy, it will just return an already |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
111 |
* resized one if it exists. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
112 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
113 |
* A plugin may use the 'image_downsize' filter to hook into and offer image |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
114 |
* resizing services for images. The hook must return an array with the same |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
115 |
* elements that are returned in the function. The first element being the URL |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
116 |
* to the new image that was resized. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
117 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
118 |
* @since 2.5.0 |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
119 |
* @uses apply_filters() Calls 'image_downsize' on $id and $size to provide |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
120 |
* resize services. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
121 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
122 |
* @param int $id Attachment ID for image. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
123 |
* @param string $size Optional, default is 'medium'. Size of image, can be 'thumbnail'. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
124 |
* @return bool|array False on failure, array on success. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
125 |
*/ |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
126 |
function image_downsize($id, $size = 'medium') { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
127 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
128 |
if ( !wp_attachment_is_image($id) ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
129 |
return false; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
130 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
131 |
$img_url = wp_get_attachment_url($id); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
132 |
$meta = wp_get_attachment_metadata($id); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
133 |
$width = $height = 0; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
134 |
$is_intermediate = false; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
135 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
136 |
// plugins can use this to provide resize services |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
137 |
if ( $out = apply_filters('image_downsize', false, $id, $size) ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
138 |
return $out; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
139 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
140 |
// try for a new style intermediate size |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
141 |
if ( $intermediate = image_get_intermediate_size($id, $size) ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
142 |
$img_url = str_replace(basename($img_url), $intermediate['file'], $img_url); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
143 |
$width = $intermediate['width']; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
144 |
$height = $intermediate['height']; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
145 |
$is_intermediate = true; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
146 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
147 |
elseif ( $size == 'thumbnail' ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
148 |
// fall back to the old thumbnail |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
149 |
if ( ($thumb_file = wp_get_attachment_thumb_file($id)) && $info = getimagesize($thumb_file) ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
150 |
$img_url = str_replace(basename($img_url), basename($thumb_file), $img_url); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
151 |
$width = $info[0]; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
152 |
$height = $info[1]; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
153 |
$is_intermediate = true; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
154 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
155 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
156 |
if ( !$width && !$height && isset($meta['width'], $meta['height']) ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
157 |
// any other type: use the real image |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
158 |
$width = $meta['width']; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
159 |
$height = $meta['height']; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
160 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
161 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
162 |
if ( $img_url) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
163 |
// we have the actual image size, but might need to further constrain it if content_width is narrower |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
164 |
list( $width, $height ) = image_constrain_size_for_editor( $width, $height, $size ); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
165 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
166 |
return array( $img_url, $width, $height, $is_intermediate ); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
167 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
168 |
return false; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
169 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
170 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
171 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
172 |
/** |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
173 |
* An <img src /> tag for an image attachment, scaling it down if requested. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
174 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
175 |
* The filter 'get_image_tag_class' allows for changing the class name for the |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
176 |
* image without having to use regular expressions on the HTML content. The |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
177 |
* parameters are: what WordPress will use for the class, the Attachment ID, |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
178 |
* image align value, and the size the image should be. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
179 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
180 |
* The second filter 'get_image_tag' has the HTML content, which can then be |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
181 |
* further manipulated by a plugin to change all attribute values and even HTML |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
182 |
* content. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
183 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
184 |
* @since 2.5.0 |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
185 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
186 |
* @uses apply_filters() The 'get_image_tag_class' filter is the IMG element |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
187 |
* class attribute. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
188 |
* @uses apply_filters() The 'get_image_tag' filter is the full IMG element with |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
189 |
* all attributes. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
190 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
191 |
* @param int $id Attachment ID. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
192 |
* @param string $alt Image Description for the alt attribute. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
193 |
* @param string $title Image Description for the title attribute. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
194 |
* @param string $align Part of the class name for aligning the image. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
195 |
* @param string $size Optional. Default is 'medium'. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
196 |
* @return string HTML IMG element for given image attachment |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
197 |
*/ |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
198 |
function get_image_tag($id, $alt, $title, $align, $size='medium') { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
199 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
200 |
list( $img_src, $width, $height ) = image_downsize($id, $size); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
201 |
$hwstring = image_hwstring($width, $height); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
202 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
203 |
$class = 'align' . esc_attr($align) .' size-' . esc_attr($size) . ' wp-image-' . $id; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
204 |
$class = apply_filters('get_image_tag_class', $class, $id, $align, $size); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
205 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
206 |
$html = '<img src="' . esc_attr($img_src) . '" alt="' . esc_attr($alt) . '" title="' . esc_attr($title).'" '.$hwstring.'class="'.$class.'" />'; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
207 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
208 |
$html = apply_filters( 'get_image_tag', $html, $id, $alt, $title, $align, $size ); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
209 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
210 |
return $html; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
211 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
212 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
213 |
/** |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
214 |
* Calculates the new dimentions for a downsampled image. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
215 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
216 |
* Same as {@link wp_shrink_dimensions()}, except the max parameters are |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
217 |
* optional. If either width or height are empty, no constraint is applied on |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
218 |
* that dimension. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
219 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
220 |
* @since 2.5.0 |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
221 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
222 |
* @param int $current_width Current width of the image. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
223 |
* @param int $current_height Current height of the image. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
224 |
* @param int $max_width Optional. Maximum wanted width. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
225 |
* @param int $max_height Optional. Maximum wanted height. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
226 |
* @return array First item is the width, the second item is the height. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
227 |
*/ |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
228 |
function wp_constrain_dimensions( $current_width, $current_height, $max_width=0, $max_height=0 ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
229 |
if ( !$max_width and !$max_height ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
230 |
return array( $current_width, $current_height ); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
231 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
232 |
$width_ratio = $height_ratio = 1.0; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
233 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
234 |
if ( $max_width > 0 && $current_width > 0 && $current_width > $max_width ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
235 |
$width_ratio = $max_width / $current_width; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
236 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
237 |
if ( $max_height > 0 && $current_height > 0 && $current_height > $max_height ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
238 |
$height_ratio = $max_height / $current_height; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
239 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
240 |
// the smaller ratio is the one we need to fit it to the constraining box |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
241 |
$ratio = min( $width_ratio, $height_ratio ); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
242 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
243 |
return array( intval($current_width * $ratio), intval($current_height * $ratio) ); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
244 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
245 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
246 |
/** |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
247 |
* Retrieve calculated resized dimensions for use in imagecopyresampled(). |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
248 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
249 |
* Calculate dimensions and coordinates for a resized image that fits within a |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
250 |
* specified width and height. If $crop is true, the largest matching central |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
251 |
* portion of the image will be cropped out and resized to the required size. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
252 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
253 |
* @since 2.5.0 |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
254 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
255 |
* @param int $orig_w Original width. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
256 |
* @param int $orig_h Original height. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
257 |
* @param int $dest_w New width. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
258 |
* @param int $dest_h New height. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
259 |
* @param bool $crop Optional, default is false. Whether to crop image or resize. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
260 |
* @return bool|array False, on failure. Returned array matches parameters for imagecopyresampled() PHP function. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
261 |
*/ |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
262 |
function image_resize_dimensions($orig_w, $orig_h, $dest_w, $dest_h, $crop=false) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
263 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
264 |
if ($orig_w <= 0 || $orig_h <= 0) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
265 |
return false; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
266 |
// at least one of dest_w or dest_h must be specific |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
267 |
if ($dest_w <= 0 && $dest_h <= 0) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
268 |
return false; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
269 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
270 |
if ( $crop ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
271 |
// crop the largest possible portion of the original image that we can size to $dest_w x $dest_h |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
272 |
$aspect_ratio = $orig_w / $orig_h; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
273 |
$new_w = min($dest_w, $orig_w); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
274 |
$new_h = min($dest_h, $orig_h); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
275 |
if (!$new_w) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
276 |
$new_w = intval($new_h * $aspect_ratio); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
277 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
278 |
if (!$new_h) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
279 |
$new_h = intval($new_w / $aspect_ratio); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
280 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
281 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
282 |
$size_ratio = max($new_w / $orig_w, $new_h / $orig_h); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
283 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
284 |
$crop_w = ceil($new_w / $size_ratio); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
285 |
$crop_h = ceil($new_h / $size_ratio); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
286 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
287 |
$s_x = floor(($orig_w - $crop_w)/2); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
288 |
$s_y = floor(($orig_h - $crop_h)/2); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
289 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
290 |
else { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
291 |
// don't crop, just resize using $dest_w x $dest_h as a maximum bounding box |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
292 |
$crop_w = $orig_w; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
293 |
$crop_h = $orig_h; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
294 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
295 |
$s_x = 0; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
296 |
$s_y = 0; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
297 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
298 |
list( $new_w, $new_h ) = wp_constrain_dimensions( $orig_w, $orig_h, $dest_w, $dest_h ); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
299 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
300 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
301 |
// if the resulting image would be the same size or larger we don't want to resize it |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
302 |
if ($new_w >= $orig_w && $new_h >= $orig_h) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
303 |
return false; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
304 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
305 |
// the return array matches the parameters to imagecopyresampled() |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
306 |
// int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
307 |
return array(0, 0, $s_x, $s_y, $new_w, $new_h, $crop_w, $crop_h); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
308 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
309 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
310 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
311 |
/** |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
312 |
* Scale down an image to fit a particular size and save a new copy of the image. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
313 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
314 |
* The PNG transparency will be preserved using the function, as well as the |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
315 |
* image type. If the file going in is PNG, then the resized image is going to |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
316 |
* be PNG. The only supported image types are PNG, GIF, and JPEG. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
317 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
318 |
* Some functionality requires API to exist, so some PHP version may lose out |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
319 |
* support. This is not the fault of WordPress (where functionality is |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
320 |
* downgraded, not actual defects), but of your PHP version. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
321 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
322 |
* @since 2.5.0 |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
323 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
324 |
* @param string $file Image file path. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
325 |
* @param int $max_w Maximum width to resize to. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
326 |
* @param int $max_h Maximum height to resize to. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
327 |
* @param bool $crop Optional. Whether to crop image or resize. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
328 |
* @param string $suffix Optional. File Suffix. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
329 |
* @param string $dest_path Optional. New image file path. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
330 |
* @param int $jpeg_quality Optional, default is 90. Image quality percentage. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
331 |
* @return mixed WP_Error on failure. String with new destination path. Array of dimensions from {@link image_resize_dimensions()} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
332 |
*/ |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
333 |
function image_resize( $file, $max_w, $max_h, $crop=false, $suffix=null, $dest_path=null, $jpeg_quality=90) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
334 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
335 |
$image = wp_load_image( $file ); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
336 |
if ( !is_resource( $image ) ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
337 |
return new WP_Error('error_loading_image', $image); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
338 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
339 |
list($orig_w, $orig_h, $orig_type) = getimagesize( $file ); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
340 |
$dims = image_resize_dimensions($orig_w, $orig_h, $max_w, $max_h, $crop); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
341 |
if (!$dims) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
342 |
return $dims; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
343 |
list($dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h) = $dims; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
344 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
345 |
$newimage = imagecreatetruecolor( $dst_w, $dst_h); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
346 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
347 |
// preserve PNG transparency |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
348 |
if ( IMAGETYPE_PNG == $orig_type && function_exists( 'imagealphablending' ) && function_exists( 'imagesavealpha' ) ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
349 |
imagealphablending( $newimage, false); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
350 |
imagesavealpha( $newimage, true); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
351 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
352 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
353 |
imagecopyresampled( $newimage, $image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
354 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
355 |
// we don't need the original in memory anymore |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
356 |
imagedestroy( $image ); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
357 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
358 |
// $suffix will be appended to the destination filename, just before the extension |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
359 |
if ( !$suffix ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
360 |
$suffix = "{$dst_w}x{$dst_h}"; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
361 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
362 |
$info = pathinfo($file); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
363 |
$dir = $info['dirname']; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
364 |
$ext = $info['extension']; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
365 |
$name = basename($file, ".{$ext}"); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
366 |
if ( !is_null($dest_path) and $_dest_path = realpath($dest_path) ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
367 |
$dir = $_dest_path; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
368 |
$destfilename = "{$dir}/{$name}-{$suffix}.{$ext}"; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
369 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
370 |
if ( $orig_type == IMAGETYPE_GIF ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
371 |
if (!imagegif( $newimage, $destfilename ) ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
372 |
return new WP_Error('resize_path_invalid', __( 'Resize path invalid' )); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
373 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
374 |
elseif ( $orig_type == IMAGETYPE_PNG ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
375 |
if (!imagepng( $newimage, $destfilename ) ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
376 |
return new WP_Error('resize_path_invalid', __( 'Resize path invalid' )); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
377 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
378 |
else { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
379 |
// all other formats are converted to jpg |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
380 |
$destfilename = "{$dir}/{$name}-{$suffix}.jpg"; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
381 |
if (!imagejpeg( $newimage, $destfilename, apply_filters( 'jpeg_quality', $jpeg_quality, 'image_resize' ) ) ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
382 |
return new WP_Error('resize_path_invalid', __( 'Resize path invalid' )); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
383 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
384 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
385 |
imagedestroy( $newimage ); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
386 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
387 |
// Set correct file permissions |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
388 |
$stat = stat( dirname( $destfilename )); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
389 |
$perms = $stat['mode'] & 0000666; //same permissions as parent folder, strip off the executable bits |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
390 |
@ chmod( $destfilename, $perms ); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
391 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
392 |
return $destfilename; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
393 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
394 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
395 |
/** |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
396 |
* Resize an image to make a thumbnail or intermediate size. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
397 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
398 |
* The returned array has the file size, the image width, and image height. The |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
399 |
* filter 'image_make_intermediate_size' can be used to hook in and change the |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
400 |
* values of the returned array. The only parameter is the resized file path. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
401 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
402 |
* @since 2.5.0 |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
403 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
404 |
* @param string $file File path. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
405 |
* @param int $width Image width. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
406 |
* @param int $height Image height. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
407 |
* @param bool $crop Optional, default is false. Whether to crop image to specified height and width or resize. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
408 |
* @return bool|array False, if no image was created. Metadata array on success. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
409 |
*/ |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
410 |
function image_make_intermediate_size($file, $width, $height, $crop=false) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
411 |
if ( $width || $height ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
412 |
$resized_file = image_resize($file, $width, $height, $crop); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
413 |
if ( !is_wp_error($resized_file) && $resized_file && $info = getimagesize($resized_file) ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
414 |
$resized_file = apply_filters('image_make_intermediate_size', $resized_file); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
415 |
return array( |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
416 |
'file' => basename( $resized_file ), |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
417 |
'width' => $info[0], |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
418 |
'height' => $info[1], |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
419 |
); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
420 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
421 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
422 |
return false; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
423 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
424 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
425 |
/** |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
426 |
* Retrieve the image's intermediate size (resized) path, width, and height. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
427 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
428 |
* The $size parameter can be an array with the width and height respectively. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
429 |
* If the size matches the 'sizes' metadata array for width and height, then it |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
430 |
* will be used. If there is no direct match, then the nearest image size larger |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
431 |
* than the specified size will be used. If nothing is found, then the function |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
432 |
* will break out and return false. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
433 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
434 |
* The metadata 'sizes' is used for compatible sizes that can be used for the |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
435 |
* parameter $size value. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
436 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
437 |
* The url path will be given, when the $size parameter is a string. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
438 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
439 |
* @since 2.5.0 |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
440 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
441 |
* @param int $post_id Attachment ID for image. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
442 |
* @param array|string $size Optional, default is 'thumbnail'. Size of image, either array or string. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
443 |
* @return bool|array False on failure or array of file path, width, and height on success. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
444 |
*/ |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
445 |
function image_get_intermediate_size($post_id, $size='thumbnail') { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
446 |
if ( !is_array( $imagedata = wp_get_attachment_metadata( $post_id ) ) ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
447 |
return false; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
448 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
449 |
// get the best one for a specified set of dimensions |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
450 |
if ( is_array($size) && !empty($imagedata['sizes']) ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
451 |
foreach ( $imagedata['sizes'] as $_size => $data ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
452 |
// already cropped to width or height; so use this size |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
453 |
if ( ( $data['width'] == $size[0] && $data['height'] <= $size[1] ) || ( $data['height'] == $size[1] && $data['width'] <= $size[0] ) ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
454 |
$file = $data['file']; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
455 |
list($width, $height) = image_constrain_size_for_editor( $data['width'], $data['height'], $size ); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
456 |
return compact( 'file', 'width', 'height' ); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
457 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
458 |
// add to lookup table: area => size |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
459 |
$areas[$data['width'] * $data['height']] = $_size; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
460 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
461 |
if ( !$size || !empty($areas) ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
462 |
// find for the smallest image not smaller than the desired size |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
463 |
ksort($areas); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
464 |
foreach ( $areas as $_size ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
465 |
$data = $imagedata['sizes'][$_size]; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
466 |
if ( $data['width'] >= $size[0] || $data['height'] >= $size[1] ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
467 |
$file = $data['file']; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
468 |
list($width, $height) = image_constrain_size_for_editor( $data['width'], $data['height'], $size ); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
469 |
return compact( 'file', 'width', 'height' ); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
470 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
471 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
472 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
473 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
474 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
475 |
if ( is_array($size) || empty($size) || empty($imagedata['sizes'][$size]) ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
476 |
return false; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
477 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
478 |
$data = $imagedata['sizes'][$size]; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
479 |
// include the full filesystem path of the intermediate file |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
480 |
if ( empty($data['path']) && !empty($data['file']) ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
481 |
$file_url = wp_get_attachment_url($post_id); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
482 |
$data['path'] = path_join( dirname($imagedata['file']), $data['file'] ); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
483 |
$data['url'] = path_join( dirname($file_url), $data['file'] ); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
484 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
485 |
return $data; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
486 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
487 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
488 |
/** |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
489 |
* Retrieve an image to represent an attachment. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
490 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
491 |
* A mime icon for files, thumbnail or intermediate size for images. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
492 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
493 |
* @since 2.5.0 |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
494 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
495 |
* @param int $attachment_id Image attachment ID. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
496 |
* @param string $size Optional, default is 'thumbnail'. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
497 |
* @param bool $icon Optional, default is false. Whether it is an icon. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
498 |
* @return bool|array Returns an array (url, width, height), or false, if no image is available. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
499 |
*/ |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
500 |
function wp_get_attachment_image_src($attachment_id, $size='thumbnail', $icon = false) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
501 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
502 |
// get a thumbnail or intermediate image if there is one |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
503 |
if ( $image = image_downsize($attachment_id, $size) ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
504 |
return $image; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
505 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
506 |
$src = false; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
507 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
508 |
if ( $icon && $src = wp_mime_type_icon($attachment_id) ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
509 |
$icon_dir = apply_filters( 'icon_dir', ABSPATH . WPINC . '/images/crystal' ); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
510 |
$src_file = $icon_dir . '/' . basename($src); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
511 |
@list($width, $height) = getimagesize($src_file); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
512 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
513 |
if ( $src && $width && $height ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
514 |
return array( $src, $width, $height ); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
515 |
return false; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
516 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
517 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
518 |
/** |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
519 |
* Get an HTML img element representing an image attachment |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
520 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
521 |
* @uses apply_filters() Calls 'wp_get_attachment_image_attributes' hook on attributes array |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
522 |
* @uses wp_get_attachment_image_src() Gets attachment file URL and dimensions |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
523 |
* @since 2.5.0 |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
524 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
525 |
* @param int $attachment_id Image attachment ID. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
526 |
* @param string $size Optional, default is 'thumbnail'. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
527 |
* @param bool $icon Optional, default is false. Whether it is an icon. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
528 |
* @return string HTML img element or empty string on failure. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
529 |
*/ |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
530 |
function wp_get_attachment_image($attachment_id, $size = 'thumbnail', $icon = false) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
531 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
532 |
$html = ''; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
533 |
$image = wp_get_attachment_image_src($attachment_id, $size, $icon); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
534 |
if ( $image ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
535 |
list($src, $width, $height) = $image; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
536 |
$hwstring = image_hwstring($width, $height); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
537 |
if ( is_array($size) ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
538 |
$size = join('x', $size); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
539 |
$attachment =& get_post($attachment_id); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
540 |
$attr = array( |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
541 |
'src' => $src, |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
542 |
'class' => "attachment-$size", |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
543 |
'alt' => trim(strip_tags( $attachment->post_excerpt )), |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
544 |
'title' => trim(strip_tags( $attachment->post_title )), |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
545 |
); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
546 |
$attr = apply_filters( 'wp_get_attachment_image_attributes', $attr, $attachment ); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
547 |
$attr = array_map( 'esc_attr', $attr ); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
548 |
$html = rtrim("<img $hwstring"); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
549 |
foreach ( $attr as $name => $value ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
550 |
$html .= " $name=" . '"' . $value . '"'; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
551 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
552 |
$html .= ' />'; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
553 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
554 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
555 |
return $html; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
556 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
557 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
558 |
add_shortcode('wp_caption', 'img_caption_shortcode'); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
559 |
add_shortcode('caption', 'img_caption_shortcode'); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
560 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
561 |
/** |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
562 |
* The Caption shortcode. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
563 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
564 |
* Allows a plugin to replace the content that would otherwise be returned. The |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
565 |
* filter is 'img_caption_shortcode' and passes an empty string, the attr |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
566 |
* parameter and the content parameter values. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
567 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
568 |
* The supported attributes for the shortcode are 'id', 'align', 'width', and |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
569 |
* 'caption'. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
570 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
571 |
* @since 2.6.0 |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
572 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
573 |
* @param array $attr Attributes attributed to the shortcode. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
574 |
* @param string $content Optional. Shortcode content. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
575 |
* @return string |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
576 |
*/ |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
577 |
function img_caption_shortcode($attr, $content = null) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
578 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
579 |
// Allow plugins/themes to override the default caption template. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
580 |
$output = apply_filters('img_caption_shortcode', '', $attr, $content); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
581 |
if ( $output != '' ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
582 |
return $output; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
583 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
584 |
extract(shortcode_atts(array( |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
585 |
'id' => '', |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
586 |
'align' => 'alignnone', |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
587 |
'width' => '', |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
588 |
'caption' => '' |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
589 |
), $attr)); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
590 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
591 |
if ( 1 > (int) $width || empty($caption) ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
592 |
return $content; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
593 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
594 |
if ( $id ) $id = 'id="' . esc_attr($id) . '" '; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
595 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
596 |
return '<div ' . $id . 'class="wp-caption ' . esc_attr($align) . '" style="width: ' . (10 + (int) $width) . 'px">' |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
597 |
. do_shortcode( $content ) . '<p class="wp-caption-text">' . $caption . '</p></div>'; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
598 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
599 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
600 |
add_shortcode('gallery', 'gallery_shortcode'); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
601 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
602 |
/** |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
603 |
* The Gallery shortcode. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
604 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
605 |
* This implements the functionality of the Gallery Shortcode for displaying |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
606 |
* WordPress images on a post. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
607 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
608 |
* @since 2.5.0 |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
609 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
610 |
* @param array $attr Attributes attributed to the shortcode. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
611 |
* @return string HTML content to display gallery. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
612 |
*/ |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
613 |
function gallery_shortcode($attr) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
614 |
global $post; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
615 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
616 |
static $instance = 0; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
617 |
$instance++; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
618 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
619 |
// Allow plugins/themes to override the default gallery template. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
620 |
$output = apply_filters('post_gallery', '', $attr); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
621 |
if ( $output != '' ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
622 |
return $output; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
623 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
624 |
// We're trusting author input, so let's at least make sure it looks like a valid orderby statement |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
625 |
if ( isset( $attr['orderby'] ) ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
626 |
$attr['orderby'] = sanitize_sql_orderby( $attr['orderby'] ); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
627 |
if ( !$attr['orderby'] ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
628 |
unset( $attr['orderby'] ); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
629 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
630 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
631 |
extract(shortcode_atts(array( |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
632 |
'order' => 'ASC', |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
633 |
'orderby' => 'menu_order ID', |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
634 |
'id' => $post->ID, |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
635 |
'itemtag' => 'dl', |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
636 |
'icontag' => 'dt', |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
637 |
'captiontag' => 'dd', |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
638 |
'columns' => 3, |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
639 |
'size' => 'thumbnail' |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
640 |
), $attr)); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
641 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
642 |
$id = intval($id); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
643 |
$attachments = get_children( array('post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) ); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
644 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
645 |
if ( empty($attachments) ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
646 |
return ''; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
647 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
648 |
if ( is_feed() ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
649 |
$output = "\n"; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
650 |
foreach ( $attachments as $att_id => $attachment ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
651 |
$output .= wp_get_attachment_link($att_id, $size, true) . "\n"; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
652 |
return $output; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
653 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
654 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
655 |
$itemtag = tag_escape($itemtag); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
656 |
$captiontag = tag_escape($captiontag); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
657 |
$columns = intval($columns); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
658 |
$itemwidth = $columns > 0 ? floor(100/$columns) : 100; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
659 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
660 |
$selector = "gallery-{$instance}"; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
661 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
662 |
$output = apply_filters('gallery_style', " |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
663 |
<style type='text/css'> |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
664 |
#{$selector} { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
665 |
margin: auto; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
666 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
667 |
#{$selector} .gallery-item { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
668 |
float: left; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
669 |
margin-top: 10px; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
670 |
text-align: center; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
671 |
width: {$itemwidth}%; } |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
672 |
#{$selector} img { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
673 |
border: 2px solid #cfcfcf; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
674 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
675 |
#{$selector} .gallery-caption { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
676 |
margin-left: 0; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
677 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
678 |
</style> |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
679 |
<!-- see gallery_shortcode() in wp-includes/media.php --> |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
680 |
<div id='$selector' class='gallery galleryid-{$id}'>"); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
681 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
682 |
$i = 0; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
683 |
foreach ( $attachments as $id => $attachment ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
684 |
$link = isset($attr['link']) && 'file' == $attr['link'] ? wp_get_attachment_link($id, $size, false, false) : wp_get_attachment_link($id, $size, true, false); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
685 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
686 |
$output .= "<{$itemtag} class='gallery-item'>"; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
687 |
$output .= " |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
688 |
<{$icontag} class='gallery-icon'> |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
689 |
$link |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
690 |
</{$icontag}>"; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
691 |
if ( $captiontag && trim($attachment->post_excerpt) ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
692 |
$output .= " |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
693 |
<{$captiontag} class='gallery-caption'> |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
694 |
" . wptexturize($attachment->post_excerpt) . " |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
695 |
</{$captiontag}>"; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
696 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
697 |
$output .= "</{$itemtag}>"; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
698 |
if ( $columns > 0 && ++$i % $columns == 0 ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
699 |
$output .= '<br style="clear: both" />'; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
700 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
701 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
702 |
$output .= " |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
703 |
<br style='clear: both;' /> |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
704 |
</div>\n"; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
705 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
706 |
return $output; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
707 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
708 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
709 |
/** |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
710 |
* Display previous image link that has the same post parent. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
711 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
712 |
* @since 2.5.0 |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
713 |
* @param string $size Optional, default is 'thumbnail'. Size of image, either array or string. 0 or 'none' will default to post_title or $text; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
714 |
* @param string $text Optional, default is false. If included, link will reflect $text variable. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
715 |
* @return string HTML content. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
716 |
*/ |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
717 |
function previous_image_link($size = 'thumbnail', $text = false) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
718 |
adjacent_image_link(true, $size, $text); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
719 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
720 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
721 |
/** |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
722 |
* Display next image link that has the same post parent. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
723 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
724 |
* @since 2.5.0 |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
725 |
* @param string $size Optional, default is 'thumbnail'. Size of image, either array or string. 0 or 'none' will default to post_title or $text; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
726 |
* @param string $text Optional, default is false. If included, link will reflect $text variable. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
727 |
* @return string HTML content. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
728 |
*/ |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
729 |
function next_image_link($size = 'thumbnail', $text = false) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
730 |
adjacent_image_link(false, $size, $text); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
731 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
732 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
733 |
/** |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
734 |
* Display next or previous image link that has the same post parent. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
735 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
736 |
* Retrieves the current attachment object from the $post global. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
737 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
738 |
* @since 2.5.0 |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
739 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
740 |
* @param bool $prev Optional. Default is true to display previous link, true for next. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
741 |
*/ |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
742 |
function adjacent_image_link($prev = true, $size = 'thumbnail', $text = false) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
743 |
global $post; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
744 |
$post = get_post($post); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
745 |
$attachments = array_values(get_children( array('post_parent' => $post->post_parent, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => 'ASC', 'orderby' => 'menu_order ID') )); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
746 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
747 |
foreach ( $attachments as $k => $attachment ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
748 |
if ( $attachment->ID == $post->ID ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
749 |
break; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
750 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
751 |
$k = $prev ? $k - 1 : $k + 1; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
752 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
753 |
if ( isset($attachments[$k]) ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
754 |
echo wp_get_attachment_link($attachments[$k]->ID, $size, true, false, $text); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
755 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
756 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
757 |
/** |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
758 |
* Retrieve taxonomies attached to the attachment. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
759 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
760 |
* @since 2.5.0 |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
761 |
* |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
762 |
* @param int|array|object $attachment Attachment ID, Attachment data array, or Attachment data object. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
763 |
* @return array Empty array on failure. List of taxonomies on success. |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
764 |
*/ |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
765 |
function get_attachment_taxonomies($attachment) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
766 |
if ( is_int( $attachment ) ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
767 |
$attachment = get_post($attachment); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
768 |
else if ( is_array($attachment) ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
769 |
$attachment = (object) $attachment; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
770 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
771 |
if ( ! is_object($attachment) ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
772 |
return array(); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
773 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
774 |
$filename = basename($attachment->guid); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
775 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
776 |
$objects = array('attachment'); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
777 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
778 |
if ( false !== strpos($filename, '.') ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
779 |
$objects[] = 'attachment:' . substr($filename, strrpos($filename, '.') + 1); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
780 |
if ( !empty($attachment->post_mime_type) ) { |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
781 |
$objects[] = 'attachment:' . $attachment->post_mime_type; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
782 |
if ( false !== strpos($attachment->post_mime_type, '/') ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
783 |
foreach ( explode('/', $attachment->post_mime_type) as $token ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
784 |
if ( !empty($token) ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
785 |
$objects[] = "attachment:$token"; |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
786 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
787 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
788 |
$taxonomies = array(); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
789 |
foreach ( $objects as $object ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
790 |
if ( $taxes = get_object_taxonomies($object) ) |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
791 |
$taxonomies = array_merge($taxonomies, $taxes); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
792 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
793 |
return array_unique($taxonomies); |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
794 |
} |
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
795 |
|
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff
changeset
|
796 |
?> |