图像裁剪/调整大小功能/代码片段/插件,用于在上传过程中调整/裁剪图像

时间:2017-02-10 作者:Sheryl

我们有一个目录网站http://prntscr.com/e76vrf 以列表主题运行。

目前,当用户注册并上传“个人资料照片”、“封面照片”时,没有规定在保存后调整照片和更宽的照片。因此,我们想添加一个图像大小调整器/裁剪器,它可以让用户调整或裁剪图像。我试图找到一个插件,但我无法解决任何。您是否知道代码段/函数,或者可能是可以实现此功能的插件?如果是代码解决方案,请告诉我如何集成代码。

还有,如何在主页上动态获取和显示列表的总数http://prntscr.com/e76u5i

请提供最有效的解决方案。提前感谢!

3 个回复
最合适的回答,由SO网友:bynicolas 整理而成

-= 1 =-

这是未经测试的,如果它使用自定义功能上载实际图像,可能无法与您的主题配合使用,但我会添加您想要使用的大小add_image_size( \'profile_photo\', $width, $height, array( \'center\', \'middle\' ) ); 到您的functions.php 文件

然后可以使用wp_get_attachment_image_src() 作为size 参数,自定义大小名称profile_photo 创建时间add_image_size().

作为补充说明wp_handle_upload_prefilter 过滤器仅在管理区域工作。所以请记住这一点。

此外,我认为您的主题可能已经在使用add_image_size 对于配置文件图像,它可能已经在functions.php 文件看看吧,因为你可能已经可以调整那里的大小了。

-= 2 =-

对于第二个问题,这同样取决于您的设置,但我建议您查看found_posts 的属性WP_Query 对象

因此,您可以构建一个查询来查找您的所有列表,并回显found_posts属性,类似于

$args = array (
  \'post_type\' => \'listings\', // assuming your listing have their own post type
  \'post_per_page\' => -1,

);


$my_query = new WP_Query( $args );

// Then print where you want
echo $my_query->found_posts;
当然,您可以修改查询,通过其他适合您需要的参数来过滤帖子。查看WP_Query 对于所有可用的参数和属性。

SO网友:user6552940

您需要的是wp_handle_upload_prefilter 用于在上载图像后但在实际保存之前对图像执行操作

您可以对文件执行各种操作,例如调整图像大小

使用if ( false !== strpos ( $file[\'type\'], \'image\' ) )
确定上载的文件是否为图像
$file[\'tmp_name\'] 将指向保存前的实际文件,即文件的临时名称,这是您需要对其执行操作的文件。

SO网友:NicoHood

我不确定我是否理解了这个问题。

这里有一个关于如何在上传时调整图像大小的解决方案,这样用户就无法上传大于1920x1920的图像。通过这种方式,您可以指示用户始终上载最大的图像,网站将为您完成其余操作以节省磁盘空间。

// Hook the function to the upload handler
// https://developer.wordpress.org/reference/hooks/wp_handle_upload/
add_filter(\'wp_handle_upload\', \'resize_image_after_upload\');

function resize_image_after_upload($image_data){
  // Set to null to disable that width/height resizing
  $max_width  = 1920;
  $max_height = 1920;

  // Check if there is a valid file
  if(empty($image_data[\'file\']) || empty($image_data[\'type\'])) {
    return $image_data;
  }

  // NOTE: We are not resizing any gifs, to avoid resizing animated gifs
  //      (which I think is the most common gif nowadays)
  $valid_types = array(\'image/png\',\'image/jpeg\',\'image/jpg\', \'image/webp\');
  if(!in_array($image_data[\'type\'], $valid_types)) {
    return $image_data;
  }

  // Get image image_editor
  // https://developer.wordpress.org/reference/classes/wp_image_editor/
  $image_editor = wp_get_image_editor($image_data[\'file\']);
  if(is_wp_error($image_editor)) {
    return $image_data;
  }

  // Check if the image editor supports the image type
  if(!$image_editor->supports_mime_type($image_data[\'type\'])) {
    return $image_data;
  }

  // Perform resizing
  $sizes = $image_editor->get_size();
  if((isset($sizes[\'width\']) && $sizes[\'width\'] > $max_width)
    || (isset($sizes[\'height\']) && $sizes[\'height\'] > $max_height)) {
    // Resize, but do not crop
    $image_editor->resize($max_width, $max_height, false);

    // We will use the default recommended image quality
    // Change, if you want to set a custom quality
    //$image_editor->set_quality(90);

    $image_editor->save($image_data[\'file\']);
  }

  return $image_data;
}
希望这有帮助!如果我更新此代码段,您也可以找到它on my blog. 还有一个plugin 对此,我个人更喜欢一个小片段。

相关推荐

Testing Plugins for Multisite

我最近发布了一个WordPress插件,它在单个站点上非常有效。我被告知该插件在多站点安装上不能正常工作,我理解其中的一些原因。我已经更新了代码,现在需要一种方法来测试更新后的代码,然后才能转到实时客户的多站点安装。我有一个用于测试的WordPress安装程序的单站点安装,但需要在多站点安装上进行测试。根据我所能找到的唯一方法是在网络上至少有两个站点来安装整个多站点安装,以测试我的插件。设置WordPress的整个多站点安装是插件开发人员的唯一/首选方式,还是有更快的测试环境可用。