Wordpress 阻止用户发布全尺寸图片上传

Kyl*_*yle 2 wordpress

Wordpress 中是否有任何方法可以防止内容编辑器在将图像上传到帖子时选择“全尺寸”选项?我希望它们只有“缩略图”、“中”和“大”选项。我曾经使用 Scissors 插件来做到这一点,但从 Wordpress 2.9 开始,这个插件不再有效。

Ner*_*mer 5

您可以通过强制 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);
Run Code Online (Sandbox Code Playgroud)

接下来我们创建我们的两个函数。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;
}
Run Code Online (Sandbox Code Playgroud)

与普通的 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),
  );
}
Run Code Online (Sandbox Code Playgroud)

在最后一个函数中,只有两件事发生了变化。在顶部,我们去掉了 $size_names 数组定义中对“全尺寸”的引用。然后那句话说$enabled = ( $downsize[3] || 'large' == $size );,我们变了。我们简单地替换'full' == $size'large' == $size.

这是结果的屏幕截图: 替代文字