상현
개발 덕후

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

( 업데이트: )

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

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

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

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


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

.
├── image1.svg
├── image1.svg
└── PNG
    ├── image1.png
    └── image2.pngCode language: CSS (css)

이런 식으로 구성되어있다하면 해당 파일이 있는지 확인한다음 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;
}Code language: PHP (php)
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);
    ...
  }
}Code language: PHP (php)

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