상현에 하루하루
All 개발자의 하루

워드프레스 미디어 파일 다운로드

( 업데이트: )

워드프레스에서 미디어에 사진을 보면서 쉽게 다운로드 받는 방법이 없을까 고민했다

항상 자료를 다운받을때 URL을 입력하고 해당 URL에 접속해서 save했으니까.. 불편했다.

https://wordpress.org/plugins/download-media-file/

이 플러그인을 이용하면 미디어 파일에 손쉽게 다운로드 받을수 있는 UI를 만들어 준다


추가적으로 동일 파일에 미디어에 표시는 하고 싶지않고 uploads에 직접적으로 올려둔 이미지들도 링크해 두고 싶어서 플러그인 내부를 조금 수정해서 개인적으로 사용하게 만들었다.

.
├── image1.svg
├── image1.svg
└── PNG
    ├── image1.png
    └── image2.png

이런 식으로 구성되어있다하면 해당 파일이 있는지 확인한다음 PNG를 다운받을 수 있는 버튼을 추가했다.

public function add_download_button($meta, $post)
{
  $form = '<div style="display: flex; gap: 8px">';
  $form .= '<form class="download-media-file-form" method="POST" style="margin: 7px 0 0;">';
  $form .= wp_nonce_field('download_media_file_action', 'download_media_file_nonce_field', true, false);
  $form .= '<input type="hidden" name="post_id" value="' . esc_attr($post->ID) . '">';
  $form .= '<input type="submit" class="button button-primary button-small" name="download_media_file" value="' . esc_html__('다운로드', 'download-media-file') . '">';
  $form .= '</form>';

  // 커스텀 START
  $file_path = get_attached_file($post->ID);
  $re = '/(.+\/)([^?]+)(\.svg)/';
  $subst = '$1png/$2.png';
  if (preg_match($re, $file_path) && is_file(preg_replace($re, $subst, $file_path, 1))) {
    $form .= '<form class="download-media-file-form" method="POST" style="margin: 7px 0 0;">';
    $form .= wp_nonce_field('download_media_file_action', 'download_media_file_nonce_field', true, false);
    $form .= '<input type="hidden" name="post_id" value="' . esc_attr($post->ID) . '">';
    $form .= '<input type="submit" class="button button-primary button-small" name="download_media_file_png" value="' . esc_html__('PNG 다운로드', 'download-media-file') . '">';
    $form .= '</form>';
  }
  // 커스텀 END
  $form .= '</div>';

  $meta .= $form;

  return $meta;
}
public function process_downloading_media_file()
{
  if (isset($_POST['download_media_file'])) {...}
  // 위 코드와 동일
  // 커스텀 START
  if (isset($_POST['download_media_file_png'])) {
    ...

    $file_name = wp_basename($file_path);
    $re = '/(.+\/)([^?]+)(\.svg)/';
    $subst = '$1png/$2.png';
    $file_path = preg_replace($re, $subst, $file_path, 1);
    $file_size = filesize($file_path);
    $file_name = preg_replace('/(.+)\.svg/', '$1.png', $file_name, 1);
    ...
  }
}

$file_name 부터 위 코드만 수정해서 사용했다.