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

时间:2012-03-26 作者:Travis Pflanz

我正在创建一个有多个作者的棒球网站。从过去的经验来看,无论你对某人个人有多了解,这并不意味着他们会遵守甚至阅读你的指示。

也就是说,我想要求作者决定“用作特色图像”的任何图像的宽度至少为640px,高度至少为360px。

我要求每个帖子都有一个使用WyPiekacz plugin; 如果没有特色图片,帖子将不会发布。我已阻止作者通过以下方式热链接到其他网站removing the "From URL" tab in Add Media 使用Bainternet的代码。

现在我需要要求用作特征图像的任何图像至少为640px x 360px。我绝不是一个程序员,但我一直在玩弄并试图使用Maor Barazany的代码作为起点,但没有任何效果。他的代码强制minimum dimensions for any image that is uploaded.

6 个回复
最合适的回答,由SO网友:Rajeev Vyas 整理而成

如果您使用的是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\') );
        }
我不明白你说的“媒体库标签”是什么意思。

SO网友:brasofilo

我检查了核心,显然没有多少机动空间。

/wp管理员/包括/媒体。php是生成添加媒体选项卡的地方

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

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

过滤器media_upload_form_url

  • custom fields 附件media uploader 控制
  • 我想另一种解决方案是更改上传图像的标题并附加其维度。我不确定是否要更改上载文件的post\\u标题,但可以通过以下两个过滤器重命名文件本身:sanitize_file_namewp_handle_upload_prefilter

    SO网友:ungestaltbar

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

    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操作。

    我现在应该在工作,没有时间做实验。但我想尽可能多地帮助别人,也许这是其他人的起点。

    干杯

    SO网友:Ryan Taylor

    这不是最优雅的答案。。。但它起作用了!“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会重定向,即使这样,也不会显示在快速编辑上(我的方法在快速编辑上会显示警告,尽管它没有设置样式)。

    SO网友:Sam Margulies

    以下是一种在显示缩略图之前确保缩略图大小正确的方法。

    首先,创建此助手函数:

    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();
    }
    

    SO网友:David

    这将满足Cha的需要:)

    //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\\u the\\u post\\u缩略图,这也可以帮助您,因此您不需要创建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\\u image\\u size fn的几行匹配。所以如果你有add_image_size( \'small-square\', 100, 100, true ); 你可以去拜访\'small-square\' 或者。

    干杯

    结束

    相关推荐

    Images don't show up

    我刚刚安装了一个新的多站点安装。一切都像我一样工作,只是图像没有显示在任何子网站上。Any idea why the images don\'t show up?我正在共享Windows服务器(由Arvixe.com托管)中的IIS6上运行Wordpress 3.1.1。辅助站点位于子目录而不是子域中。主站点的图像与标题图像一样有效,但子站点中的图像不会显示。我知道这些图片在博客中出现时,正在正确上传。服务器上的dir文件夹。如果我这样导航它们,它们也会出现:http://www.example.com/