【问题标题】:Wordpress Prevent Users from posting full size image uploadsWordpress 阻止用户发布全尺寸图片上传
【发布时间】:2010-01-05 16:08:04
【问题描述】:

Wordpress 中是否有任何方法可以防止内容编辑者在将图片上传到帖子时选择“全尺寸”选项?我希望他们只有“缩略图”、“中”和“大”选项。我曾经使用 Scissors 插件来执行此操作,但从 Wordpress 2.9 开始,此插件不再有效。

【问题讨论】:

    标签: wordpress


    【解决方案1】:

    您可以通过强制 WordPress 不显示完整大小选项来实现此结果。创建尺寸单选按钮的函数在wp-admin/includes/media.php 中,名为image_size_input_fields

    据我所知,该函数没有过滤器或操作挂钩,但调用它的函数 (image_attachment_fields_to_edit) 有一个过滤器挂钩 attachment_fields_to_edit

    所以基本上我们可以使用过滤器钩子来用我们自己的覆盖这两个函数,只是稍微修改一下。

    这可以在标准的functions.php文件中使用,或者我想你可以将它合并到一个插件中。

    首先,添加新的过滤器:

    add_filter('attachment_fields_to_edit', 'MY_image_attachment_fields_to_edit', 11, 2);
    

    接下来我们创建我们的两个函数。对于这种情况,我只是在名称前加上 MY_

    function MY_image_attachment_fields_to_edit($form_fields, $post) {
     if ( substr($post->post_mime_type, 0, 5) == 'image' ) {
      $alt = get_post_meta($post->ID, '_wp_attachment_image_alt', true);
      if ( empty($alt) )
       $alt = '';
    
      $form_fields['post_title']['required'] = true;
    
      $form_fields['image_alt'] = array(
       'value' => $alt,
       'label' => __('Alternate text'),
       'helps' => __('Alt text for the image, e.g. “The Mona Lisa”')
      );
    
      $form_fields['align'] = array(
       'label' => __('Alignment'),
       'input' => 'html',
       'html'  => image_align_input_fields($post, get_option('image_default_align')),
      );
    
      $form_fields['image-size'] = MY_image_size_input_fields( $post, get_option('image_default_size', 'medium') );
    
    
     } else {
      unset( $form_fields['image_alt'] );
     }
    
     return $form_fields;
    }
    

    这里与普通 WordPress 函数唯一不同的是,我们调用的是 MY_image_size_input_fields 而不是 image_size_input_fields

    现在是实际隐藏的函数:

    function MY_image_size_input_fields( $post, $check = '' ) {
    
      // get a list of the actual pixel dimensions of each possible intermediate version of this image
      /* $size_names = array('thumbnail' => __('Thumbnail'), 'medium' => __('Medium'), 'large' => __('Large'), 'full' => __('Full size')); */
      $size_names = array('thumbnail' => __('Thumbnail'), 'medium' => __('Medium'), 'large' => __('Large'));
    
      if ( empty($check) )
       $check = get_user_setting('imgsize', 'medium');
    
       echo '<pre>'; print_r($check); echo '</pre>';
    
    
      foreach ( $size_names as $size => $label ) {
    
       $downsize = image_downsize($post->ID, $size);
       $checked = '';
    
       // is this size selectable?
       $enabled = ( $downsize[3] || 'large' == $size );
       $css_id = "image-size-{$size}-{$post->ID}";
       // if this size is the default but that's not available, don't select it
       if ( $size == $check ) {
        if ( $enabled )
         $checked = " checked='checked'";
        else
         $check = '';
       } elseif ( !$check && $enabled && 'thumbnail' != $size ) {
        // if $check is not enabled, default to the first available size that's bigger than a thumbnail
        $check = $size;
        $checked = " checked='checked'";
       }
    
       $html = "<div class='image-size-item'><input type='radio' " . ( $enabled ? '' : "disabled='disabled' " ) . "name='attachments[$post->ID][image-size]' id='{$css_id}' value='{$size}'$checked />";
    
       $html .= "<label for='{$css_id}'>$label</label>";
       // only show the dimensions if that choice is available
       if ( $enabled )
        $html .= " <label for='{$css_id}' class='help'>" . sprintf( __("(%d&nbsp;&times;&nbsp;%d)"), $downsize[1], $downsize[2] ). "</label>";
    
       $html .= '</div>';
    
       $out[] = $html;
    
      }
    
      return array(
       'label' => __('Size'),
       'input' => 'html',
       'html'  => join("\n", $out),
      );
    }
    

    在最后一个函数中,只有两件事发生了变化。在顶部,我们去掉了 $size_names 数组定义中对“Full Size”的引用。然后写着$enabled = ( $downsize[3] || 'large' == $size );的那一行,我们改变了。我们只是将'full' == $size 替换为'large' == $size

    这是结果的屏幕截图:

    【讨论】:

    • 谢谢!!这正是我想要的!
    【解决方案2】:

    我不认为您可以禁用大尺寸,但您可以将其宽度和高度设置为与中尺寸相同。它在设置→媒体下

    【讨论】:

    • 我不想禁用大尺寸。我只是想禁用完整大小,它基本上只是“按原样”插入图像而不调整大小。而且您似乎无法对此设置上限。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 2011-07-08
    • 2012-03-08
    • 1970-01-01
    相关资源
    最近更新 更多