web-dev-qa-db-ja.com

WPのアップロード/挿入メディア機能の拡張

私はPDFファイルをsettingsのMediaメニューで指定されたメディアディレクトリ以外のユーザー指定ディレクトリにアップロードするための私の最初のプラグインを書いています。

私はWPのネイティブアップローダを拡張して、この場合の特定の種類のファイルが画像とは異なるディレクトリにアップロードされるようにする必要があります。さらに、このユーザー定義ディレクトリにアップロードされたファイルは、ページまたは投稿に挿入する必要が生じたときはいつでもネイティブのアップロード/挿入ウィンドウで表示できるはずです。

プラグインを通してWPのネイティブアップローダーを拡張することは可能ですか、それとも私は私自身のアップローダーを設計しなければなりませんか?利用可能な優れたアップローダがすでにあることを考えると、これは1種類のファイルだけではやり過ぎるようです。

私は、WPのコードを詳しく調べてそれを変更することは選択肢ではないと思います。

前もって感謝します。

2
navanitachora

どちらも可能です。

メディアライブラリに添付ファイルを挿入する

wp_insert_attachment関数 を使用すると、アップロードした画像をメディアライブラリに挿入できます。

これはDocsのコード例です。

<?php
  $wp_filetype = wp_check_filetype(basename($filename), null );
  $wp_upload_dir = wp_upload_dir();
  $attachment = array(
     'guid' => $wp_upload_dir['baseurl'] . _wp_relative_upload_path( $filename ), 
     'post_mime_type' => $wp_filetype['type'],
     'post_title' => preg_replace('/\.[^.]+$/', '', basename($filename)),
     'post_content' => '',
     'post_status' => 'inherit'
  );
  $attach_id = wp_insert_attachment( $attachment, $filename, 37 );
  // you must first include the image.php file
  // for the function wp_generate_attachment_metadata() to work
  require_once(ABSPATH . 'wp-admin/includes/image.php');
  $attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
  wp_update_attachment_metadata( $attach_id, $attach_data );
?>

アップロードディレクトリの変更

アップロードのディレクトリを変更するには、upload_dirフィルタを使用する必要があります。 Yoastにはその方法についてのかなり良いチュートリアル があります。

add_filter('upload_dir', 'my_upload_dir');
$upload = wp_upload_dir();
remove_filter('upload_dir', 'my_upload_dir');

function my_upload_dir($upload) {
    $upload['subdir']   = '/sub-dir-to-use' . $upload['subdir'];
    $upload['path']     = $upload['basedir'] . $upload['subdir'];
    $upload['url']      = $upload['baseurl'] . $upload['subdir'];
    return $upload;
}
4
Matthew Muro