特色图片的最小尺寸要求?


14

我正在创建一个有多个作者的棒球网站。根据过去的经验,无论您对某人的了解程度如何,并不意味着他们会遵循甚至阅读您的说明。

话虽这么说,我想要求作者决定要“用作特征图像”的任何图像,其宽度至少应为640px,高度至少应为360px。

我要求每个帖子都必须有使用WyPiekacz插件的精选图片;如果没有精选图片,该帖子将不会发布。通过使用Bainternet的代码删除“添加媒体”中的“来自URL”选项卡,我阻止了作者热链接到另一个站点的功能。

现在,我需要任何用作特色图像的图像至少为640px x 360px。我绝对不是编码人员,但我一直在尝试并尝试使用Maor Barazany的代码作为起点,但无济于事。他的代码 要求为上传的任何图像设置最小尺寸


无法回答您的问题,但是我不得不说谢谢您提供了方便的过滤器和函数;)
Ole HenrikSkogstrøm2012年

同上,Ole Henrik :)
brasofilo 2012年

附加到帖子但不打算用作帖子精选图像的图像怎么样?它是绝对不可能每一个岗位将永远只能附上邮政特色照片?
Chip Bennett

不可以,但是每个帖子都必须有精选图片。这是毛拉·巴拉赞尼(Maor Barazany)的代码(强制以上)的主要原因。上传时的尺寸无效(或下面的ungestaltbar代码)。这些代码段将所有上传的图片强制设为最小尺寸。用户可以在其帖子中添加其他图像,但是“特征图像”必须足够大以适合主题而不会拉伸。这也是为什么我要在上传器的“媒体库”标签上创建“图像尺寸”列的原因。用户将能够迅速选择足够大的图像作为特色图像。
特拉维斯·普弗兰兹

知道您希望所有帖子都具有精选图片。但这将永远是帖子附带的唯一图片吗?或者可能职位有其他图像除了该特色图片?
Chip Bennett

Answers:


2

好,如果您使用的是WyPiekacz插件;正如您所说的,检查是否已上传特色图片,您可以对其进行一些微调,以检查是否有特色图片具有所需的最小尺寸。

$has_thumbnail = false;
            if ( ( $post_id > 0 ) && function_exists( 'has_post_thumbnail' ) ) {
                $has_thumbnail = has_post_thumbnail( $post_id );
            }

            $has_thumbnail = apply_filters( 'wypiekacz_check_thumbnail', $has_thumbnail, $post_id, $post_data );

            if ( !$has_thumbnail ) {
                $this->errors[] = array( 'post_thumbnail', __('Post thumbnail (Featured image) is required.', 'wypiekacz') );
            }

您可以将上述代码在wypiekacz.php中更改为,

$has_thumbnail_proper_dimension = false;
        if ( ( $post_id > 0 ) && function_exists( 'has_post_thumbnail' ) ) {
            $has_thumbnail = has_post_thumbnail( $post_id );
              list($url, $width, $height) = wp_get_attachment_image_src(get_post_thumbnail_id( $post->ID ), "Full");
                echo $imgsrc[0];
              if($width>=640 and $height>=360){
                  $has_thumbnail_proper_dimension=true;
               }
        }

        $has_thumbnail = apply_filters( 'wypiekacz_check_thumbnail', $has_thumbnail, $post_id, $post_data );

        if ( !$has_thumbnail ) {
            $this->errors[] = array( 'post_thumbnail', __('Post thumbnail (Featured image) is required.', 'wypiekacz') );
        }
        if ( !$has_thumbnail_proper_dimension ) {
            $this->errors[] = array( 'post_thumbnail', __('Post thumbnail (Featured image) should be atleast 640x360.', 'wypiekacz') );
        }

好吧,我不明白您所说的“媒体库标签”是什么意思。


你是一个美丽的男人!完美的作品!“媒体库选项卡”位于媒体上传屏幕中,就像单击媒体的“设置特色图像”或“上传/插入”一样。这里是我的想法截图- picasaweb.google.com/lh/photo/...
特拉维斯Pflanz

我确实做了一个改变。list($url, $width, $height) = wp_get_attachment_image_src($post_id, 'full');更改为list($url, $width, $height) = wp_get_attachment_image_src(get_post_thumbnail_id( $post->ID ), "Full"); echo $imgsrc[0];仅检查“特色图像”的尺寸,而不是所有附加图像的尺寸。
特拉维斯·弗拉茨

@TravisPflanz这是输出“ Medial Library Tab”行的函数codex.wordpress.org/Function_Reference/get_media_item 这里没有过滤器,所以我不认为您可以将其挂接到wordpress文件中来进行更改。...您可以接受回答/投票是否有用……
拉杰夫·维斯

2

我检查了核心,显然没有什么余地。

/wp-admin/includes/media.php是生成“添加媒体”选项卡的位置

第1034行中的get_media_item函数是呈现附件/媒体表的函数。我看不到任何可用的过滤器或调用此过滤器的先前功能。

有关此问题的一些参考和代码示例。

我猜一个替代解决方案是更改上载图像的标题并附加其尺寸。我不确定要更改已上传文件的post_title,但是可以使用以下两个过滤器来重命名文件本身:sanitize_file_namewp_handle_upload_prefilter


所以,你是说这有可能……也许吗?我真的不是编码员,所以在编写函数时我会受其他人的摆布。任何支持将是巨大的。
特拉维斯·弗拉茨

1

这不是一个完整的答案,也不是为了赏金,只是证明基本概念有效:

function wpse_attachment_dimension_check( $form_fields, $post ) {

    $meta = wp_get_attachment_metadata($post->ID);

    if ( !empty[$meta['width']] )
        if ( $meta['width'] <= 999 or $meta['height'] <= 349 ) 
        {   
            echo '<p class="error">Image dimensions ...bla</p>';
            exit;
        }
        else
        {
             // Return all form fields
             return $form_fields;
        }
}

add_filter( 'attachment_fields_to_edit', 'wpse_attachment_dimension_check', 10, 2 );

只是一个60秒的片段,并且有一个大问题:每次上传都会触发此问题,不仅是因为有人准备添加特色图片,还因为我们没有办法获取图片上传者的上下文。有一些解决方法,基本上是通过一些js操作实现的。

我现在应该在工作,没有时间去尝试。但是我想提供最大的帮助,也许这是其他人的起点。

干杯


感谢您的答复,尽管您的代码要好得多,但是您的代码基本上可以完成Maor Barazany的代码(在问题中已链接)。
特拉维斯·普弗兰兹

1

这不是最优雅的答案...但是可以!“ WyPiekacz”插件虽然很酷,但三年未更新。

add_action('transition_post_status', 'check_featured_image_size_after_save', 10, 3);

function check_featured_image_size_after_save($new_status, $old_status, $post){
  $run_on_statuses = array('publish', 'pending', 'future');
  if(!in_array($new_status, $run_on_statuses))
    return;

  $post_id = $post->ID;
  if ( wp_is_post_revision( $post_id ) )
    return; //not sure about this.. but apparently save is called twice when this happens

  $image_data = wp_get_attachment_image_src( get_post_thumbnail_id( $post_id ), "Full" );
  if(!$image_data)
    return; //separate message if no image at all. (I use a plugin for this)

  $image_width = $image_data[1];
  $image_height = $image_data[2];

  // replace with your requirements.
  $min_width = 900;
  $min_height = 400;
  if($image_width < $min_width || $image_height < $min_height){
    // Being safe, honestly $old_status shouldn't be in $run_on_statuses... it wouldn't save the first time!
    $reverted_status = in_array($old_status, $run_on_statuses) ? 'draft' : $old_status;
    wp_update_post(array(
      'ID' => $post_id,
      'post_status' => $reverted_status,
    ));
    $back_link = admin_url("post.php?post=$post_id&action=edit");
    wp_die("Featured Image not large enough, must be at least ${min_width}x$min_height. Reverting status to '$reverted_status'.<br><br><a href='$back_link'>Go Back</a>");
  }
}

具有最佳用户体验的最优雅的解决方案是使用JavaScript来处理快速编辑和后期编辑页面。然后,祝您好运,我将添加一些内容到update_post_metadata过滤器中(它完全可以防止出现特色图像,但是由于它与AJAX一起运行,因此不会发出警告)。

管理员通知不会显示,因为WordPress重定向,即使这样也不会显示在Quick Edit上(我的方法的确在样式上显示了警告,尽管它没有设置样式)。


已经测试过了吗?我暂时不需要这样做,但是将书签添加为好。
特拉维斯·弗朗茨

也许星期一,我可以在我们的登台服务器上运行它,但是我确实有99%与生产环境中运行的类似。
Ryan Taylor

0

这是在显示缩略图之前确保其尺寸正确的一种方法。

首先,创建此辅助函数:

function has_post_thumbnail_of_size($width, $height) {
    $thumbnail_id = get_post_thumbnail_id();
    if( $thumbnail_id ) {
        $thumbnail_metadata = wp_get_attachment_metadata( $thumbnail_id );
        if( $thumbnail_metadata['height'] >= $height && $thumbnail_metadata['width'] >= $width ) {
            return true;
        }
    }
    return false;
}

然后,您现在可以在显示帖子缩略图之前进行检查:

if( has_post_thumbnail_of_size(640, 360) ) {
    the_post_thumbnail();
}

我需要限制用户附加的图像太小,而不是限制图像显示不小的图像。每个帖子必须包含一张图片。每个帖子都会显示一张图片。
特拉维斯·普弗兰兹

必须进行测试,但是我有一种方法可以看到如何完成:只要上传成功,WP就会通过ajax获取附件数据,然后显示附件详细信息表单。这意味着图像已作为附件插入,并且元数据可用。想法:可以将其连接到attachments_fields_to_edit,该附件将附件对象作为参数,然后检查元数据的高度和宽度,如果此检查失败,则不像往常一样显示附件详细信息表单,而是显示错误消息,然后立即删除附件。只是一个主意。
ungestaltbar 2012年

@ungestaltbar,听起来您的想法正确。我不是编码员,所以我受社区的约束。
特拉维斯·普弗兰茨

0

这将满足需要:)

//Adding script to deligate Thumbnail Size
if ( function_exists( 'add_theme_support' ) ) {
  add_theme_support( 'post-thumbnails' );
    set_post_thumbnail_size( 960, 276, true ); // default Post Thumbnail dimensions   
}
//Set different Thumbnail Sizes for Later
if ( function_exists( 'add_image_size' ) ) { 
  add_image_size( 'large-thumb', 960, 276, true ); //(cropped)  
  add_image_size( 'medium-thumb', 605, 174, true ); //(cropped) 
  add_image_size( 'small-thumb', 288, 83, true ); //(cropped) 
  add_image_size( 'small-square', 100, 100, true ); //(cropped) 
}

<?php if ( has_post_thumbnail() ) {
      global $post; //I usually define this in the function that outputs this, fyi
      echo '<a href="' . get_permalink( $post->ID ) . '" title="' . esc_attr( $post->post_title ) . '">';
      echo get_the_post_thumbnail($thumbnail->ID, 'small-thumb', array( 'alt' => esc_attr( $post->post_title ), 'title' => esc_attr( $post->post_title ) ));
      echo '</a>'; 
      } else {

      $thumbnails = get_posts(array('numberposts'=>1,'orderby'=>'rand','meta_key' => '_thumbnail_id'));
      foreach ($thumbnails as $thumbnail) {
      echo '<a href="' . get_permalink( $post->ID ) . '" title="' . esc_attr( $post->post_title ) . '">';
      echo get_the_post_thumbnail($thumbnail->ID, 'small-thumb', array( 'alt' => esc_attr( $post->post_title ), 'title' => esc_attr( $post->post_title ) ));
      echo '</a>';
      }           
    }   
    ?>

它正在使用get_the_post_thumbnail,这也可能对您有所帮助,因此您无需创建一堆WordPress已经可以为您处理的fn代码。

这款采用$thumbnails = get_posts(array('numberposts'=>1,'orderby'=>'rand','meta_key' => '_thumbnail_id'));抢随机的,如果一个不存在,这可能会帮助你前进。

这一点echo get_the_post_thumbnail($thumbnail->ID, 'small-thumb', array( 'alt' => esc_attr( $post->post_title ), 'title' => esc_attr( $post->post_title ) ));注意'small-thumb'它与我们将几行放在一起的add_image_size fn匹配。因此,如果您有add_image_size( 'small-square', 100, 100, true );,可以选择致电'small-square'

干杯


谢谢回复。但是,这不能满足我的需要。该网站是美国职业棒球大联盟(MLB)棒球网站,因此,如果您明白我的意思,就无法将阿尔伯特·普约尔斯(Albert Pujols)的随机图片添加到有关Prince Fielder的文章中。此外,如上所述,我使用WyPiekacz插件强制用户添加特色图片。因此,问题不在于他们是否添加图像,而是我要强迫他们添加大于640宽和360高的图像。
特拉维斯·普弗兰兹
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.