web-dev-qa-db-ja.com

wp_handle_upload() - アップロード内のカスタムサブディレクトリにアップロードする方法

wp_handle_upload()は私のために働きます、しかしそれが望むところにファイルをアップロードします(uploads/year/month)。

質問:ファイルをカスタムディレクトリにアップロードするように指示する方法(uploads/mycustomdir)はありますか。またはこれを行うことができるいくつかの他の機能はありますか?

私が試したこと:

  1. phpのmove_uploaded_file()(ターゲットディレクトリのパラメータを把握できませんでした - これはプラグイン用です。私はそれが彼らのdir構造に関係なく全員のために働くために必要です).

  2. https://yoast.com/smarter-upload-handling-wp-plugins

このコードをプラグインのコアファイルに貼り付けました。何も起こらなかった。しかし、私はコメントでこれが人々のために働くように思えます。

答えがある場合は、完全な答えを記入してください。 $ _FILES ['myfile']を取得できます。そのファイルをuploads/mycustomfolderに移動させるためにそこから実行する手順は何ですか?

4
CodeVirtuoso

Joostが提供したアイデアに取り組み、upload_dirフィルタを使用してアップロードパスを別の場所に一時的に設定することができます。

/**
 * Override the default upload path.
 * 
 * @param   array   $dir
 * @return  array
 */
function wpse_141088_upload_dir( $dir ) {
    return array(
        'path'   => $dir['basedir'] . '/mycustomdir',
        'url'    => $dir['baseurl'] . '/mycustomdir',
        'subdir' => '/mycustomdir',
    ) + $dir;
}

そして実際には、次のように簡単です。

// Register our path override.
add_filter( 'upload_dir', 'wpse_141088_upload_dir' );

// Do our thing. WordPress will move the file to 'uploads/mycustomdir'.
$result = wp_handle_upload( $_FILE['myfile'] );

// Set everything back to normal.
remove_filter( 'upload_dir', 'wpse_141088_upload_dir' );
8
TheDeadMedic