始终在图像编辑时重新生成源集(新材质,尤其是自定义函数,在注释线程中的对话之后)
以下函数在图像编辑操作后自动重新生成完整的源集。
/**
* ALWAYS REGENERATE FULL SOURCE SET AFTER EDITING IMAGE
* answering StackExchange WordPress Development Question
* see: https://wordpress.stackexchange.com/questions/288581/image-scaling-using-get-the-post-thumbnail-issue-in-wordpress/
* exploits code already worked out in Regenerate Thumbnails Plugin
*/
add_action( \'edit_attachment\', \'wpse_always_regenerate\', 99);
function wpse_always_regenerate( $postID ) {
$new_url = get_attached_file( $postID );
$metadata = wp_generate_attachment_metadata( $postID, $new_url );
wp_update_attachment_metadata( $postID, $metadata );
}
您可以将其添加到主题函数中。php文件—如果您对生成并添加到原始图像的索引号感到满意,并且对由编辑(重新缩放)的图像管理的完整源集感到满意。它碰巧将原始上载及其设置保留在文件夹中。(添加一个可选的“清理器”操作是我还没有接触到的,但有一些插件可以清理文件夹中未连接/未使用的图像,其中一个可以半定期应用。)
我还没有测试它是否存在不必要的额外交互。在大多数安装中,这不会有什么坏处,甚至可能有帮助,但我可以想象,在某些情况下,您可能不希望所有图像编辑操作都“重新生成缩略图”(可能应该命名为“重新生成源集”)。对于这些安装,您显然需要更精致的东西。
完整的讨论虽然对最初的问题以及如何准确地再现它会有所帮助,但我相信答案大致如下:
上载图像时,WordPress将上载图像的完整版本以及正常的缩略图集。如果缩放图像,它还将创建一个特定的变体,使用随机数相加。因此,在一次安装中,当我将一个图像上载为post featured图像并继续对其进行重新缩放时,我会在上载文件夹中获得以下内容:
如果我要求
get_the_post_thumbnail( $postID, $type )
, 我得到:
full :
<img
width="500"
height="651"
src="http://ckmswp.com/wp-content/uploads/2017/12/pingdom_topline_before-e1514050718361.jpg"
class="attachment-full size-full wp-post-image"
alt=""
sizes="100vw"
/>
post-thumbnail :
<img
width="500"
height="651"
src="http://ckmswp.com/wp-content/uploads/2017/12/pingdom_topline_before-e1514050718361.jpg"
class="attachment-post-thumbnail size-post-thumbnail wp-post-image"
alt=""
sizes="100vw"
/>
thumbnail :
<img
width="150"
height="150"
src="http://ckmswp.com/wp-content/uploads/2017/12/pingdom_topline_before-150x150.jpg"
class="attachment-thumbnail size-thumbnail wp-post-image" alt=""
srcset="https://ckmswp.com/wp-content/uploads/2017/12/pingdom_topline_before-150x150.jpg 150w,
https://ckmswp.com/wp-content/uploads/2017/12/pingdom_topline_before-100x100.jpg 100w"
sizes="100vw"
/>
因此,在上传时缩放图像时,我创建了一个新的“完整”版本的图像,在原始文件名中添加了“随机”代码,并且,由于我将其作为特色图像上传,现在它也被定位为“后期缩略图”图像。
这也可以使用wp\\u get\\u attachment\\u image\\u src()进行验证,对于上面的“full”,它返回:
(
[0] => http://ckmswp.com/wp-content/uploads/2017/12/pingdom_topline_before-e1514050718361.jpg
[1] => 500
[2] => 651
[3] =>
)
因此,简而言之,如果您在常规图像集中调用一个命名图像,那么您将在缩放图像之前创建这些图像。如果-假设您在将图像上载为特色图像时缩放了图像-您需要完整图像或(在此安装中)
post-thumbnail
图像,您还将获得新的缩放图像。
要获取原始的完整图像,我认为您可能必须访问附件对象,如下所示:
[64755] => WP_Post Object
(
[ID] => 64755
[post_author] => 1
[post_date] => 2017-12-23 17:38:24
[post_date_gmt] => 2017-12-23 17:38:24
[post_content] =>
[post_title] => pingdom_topline_before
[post_excerpt] =>
[post_status] => inherit
[comment_status] => open
[ping_status] => closed
[post_password] =>
[post_name] => pingdom_topline_before
[to_ping] =>
[pinged] =>
[post_modified] => 2017-12-23 17:38:24
[post_modified_gmt] => 2017-12-23 17:38:24
[post_content_filtered] =>
[post_parent] => 64752
[guid] => **http://ckmswp.com/wp-content/uploads/2017/12/pingdom_topline_before.jpg**
[menu_order] => 0
[post_type] => attachment
[post_mime_type] => image/jpeg
[comment_count] => 0
[filter] => raw
)
)
If you wanted to get a 150x150 (or whatever is set for you installation for thumbnail) version of the scaled image, you\'d have to either:
1) upload the scaled image separately, and let WordPress generate the test-image-random-150x150.jpg for you. or
2) Achieve a similar effect by "regenerating thumbnails."
执行此重新生成操作后,“我的上载”文件夹显示以下内容:
请注意,原始图像集在文件夹中保持不变。
创建这样一个重新生成的图像集是最好的方法,尤其是如果您打算将缩放后的图像用于其他目的,因为重新上载它并让它生成适合您的安装的完整源图像集将有助于提高响应性和一致性。
为了达到这些目的,您将需要一个自定义函数(如本答案开头提供的函数),并且可能需要考虑一个更复杂的可选实现,尽管我不相信它会经常使用。(当我想将图像缩放到特定的尺寸时,我几乎总是与WP分开进行,并给它起一个对我有意义的名称,但我不能代表其他人。)
如果您希望获得完整的图像源集(相对于新缩放的图像),并且不希望重新上载新缩放的图像,或者在编辑库中的图像时依赖该函数为您执行此操作,则可以使用“重新生成缩略图”或类似插件。最后,还可以裁剪(或假裁剪)图像以生成缩略图集。
最后一个很容易执行:除了重新缩放图像外,在“编辑图像”中,您可以使用裁剪工具生成原始图像的虚拟近似副本,WordPress将在保存图像时生成完整的源代码集。我之所以说接近副本,是因为在测试中,编辑器不会让您完全保存一个实际上与原始版本完全相同的“副本”,但在这一点上,如果我想理解的话,我别无选择,只能详细检查代码,这件事我会留到另一天,也许会在其他地方写出来,除非其他人先提供完整的简介。
总之,
1. When you first upload an image, WordPress creates a set of thumbnails based on the uploaded file.
2. If you simply re-scale the image, it will produce a single unique scaled image, with a generated filename based on the original name, with the addition of a "random" element (actually a heterogeneous index number) 3. If you re-upload the new scaled image or if you regenerate thumbnails - using a custom function, a plugin, or an editing trick - you can produce a new set of images based on the scaled image, using the generated filename.