プログラムでWordPressファイルをアップロードする: 3つの実用的な方法

公開: 2022-10-20

デフォルトでは、WordPress はメディア ライブラリまたは投稿編集画面を介したファイルのアップロードをサポートしています。 これらの組み込み関数を使用して Web サイトにファイルをアップロードすると、WordPress がすべてを処理します。 アップロードされたすべてのファイルを表示して、投稿またはページに挿入できます。

ただし、フロントエンド ファイルのアップロードなどのカスタム機能に関しては、それ以上のものが必要です。 コードを調整せずにファイルを追加、変更、および管理するのに役立つプラグインがたくさんあります。 もちろん、それらのほとんどは料金が必要です。

プラグインにお金を払いたくない場合は、WordPress サイトにプログラムでファイルをアップロードすることが解決策になる可能性があります。 この記事では、それを実現する方法について詳しく説明します。

始めましょう!

  • ちょっとしたお知らせ
  • #1 プログラムで URL からメディア ライブラリにファイルをアップロードする
  • #2 HTML フォームからファイルを追加する
  • #3 プログラムでカスタム ギャラリーにファイルを挿入する
  • おまけのヒント: ファイルのアップロードを保護する

ちょっとしたお知らせ

このメソッドは、主にコードに干渉します。 したがって、コーディングの知識がある場合にのみ、この手法を選択してください。 そうしないと、ほんのわずかな不適切な変更でサイト全体が崩壊する可能性があります。

WordPress を使い始めたばかりの場合は、Gravity Forms プラグインを使用してフロントエンド ファイルのアップロードを受け入れることを強くお勧めします。 または、WordPress フロントエンド ファイル アップロードのトップ 5 プラグインを確認してください。 FTP クライアントを使用して、バックエンドからファイルをアップロードすることもできます。

それでも、WordPress でプログラムによってファイルをアップロードする方法を学びたいですか? 読み続けます!

#1 プログラムで URL からメディア ライブラリにファイルをアップロードする

インターネットを閲覧し、WordPress メディア ライブラリにアップロードしたい素晴らしい画像を見つけます。 そのためのルートは次のとおりです。

  1. 画像の URL をコピーします。
  2. 以下のコードをサイトに埋め込み、コピーした URL を挿入します。
 /**
* プログラムで URL から画像をアップロードする
*
* @作者 ミシャ・ルドラスティ
* @リンク https://rudrastyh.com/wordpress/how-to-add-images-to-media-library-from-uploaded-files-programmatically.html#upload-image-from-url
*/
function rudr_upload_file_by_url( $image_url ) {

// download_url() および wp_handle_sideload() 関数を使用できるようにします
require_once( ABSPATH . 'wp-admin/includes/file.php' );

// 一時ディレクトリにダウンロード

$temp_file = download_url( $image_url );

if( is_wp_error( $temp_file ) ) {
false を返します。
}

// 一時ファイルをアップロード ディレクトリに移動します
$ファイル = 配列(
'名前' => ベース名( $image_url ),
'type' => mime_content_type( $temp_file ),
'tmp_name' => $temp_file,
'サイズ' => ファイルサイズ( $temp_file ),
);
$sideload = wp_handle_sideload(
$ファイル、
配列(
'test_form' => false // 'action' パラメータをチェックする必要はありません
)
);

if( ! empty( $sideload[ 'エラー' ] ) ) {
// 必要に応じてエラー メッセージを返します
false を返します。
}

// アップロードした画像を WordPress メディア ライブラリに追加します
$attachment_id = wp_insert_attachment(
配列(
'guid' => $sideload[ 'url' ],
'post_mime_type' => $sideload[ 'タイプ' ],
'post_title' => basename( $sideload[ 'file' ] ),
'post_content' => '',
'post_status' => '継承',
)、
$sideload[ 'ファイル' ]
);

if( is_wp_error( $attachment_id ) || ! $attachment_id ) {
false を返します。
}

// メタデータを更新し、画像サイズを再生成します
require_once( ABSPATH . 'wp-admin/includes/image.php' );

wp_update_attachment_metadata(
$attachment_id,
wp_generate_attachment_metadata( $attachment_id, $sideload[ 'file' ] )
);

$attachment_id を返します。
}

それでおしまい!

#2 HTML フォームからファイルを追加する

2 番目の方法は、ファイル入力と送信ボタンを備えた単純な HTML フォームを作成することです。 このフォームを任意のページまたは投稿に配置して、ユーザーがサイトにファイルをアップロードできるようにします。 HTML フォームを介して WordPress にプログラムでファイルをアップロードするには、次の手順を実行します。

  1. 次のコードを埋め込んで、単純な HTML フォームを作成します。
 1 <h2>ファイルをアップロード</h2>
2 <form method="post" enctype="multipart/form-data">
3 <input type="file" name="file" 必須 />
4 <input type="submit" name="upload_file" value="アップロード" />
5 </フォーム>

wp_upload_bits()関数を使用することで、WordPress はアップロードされたファイルをアップロードディレクトリ内に自動的に保存します。 ファイルは現在の年月フォルダー内にあります (例: wp-content/uploads/2020->03->your_file )

2. functions.phpファイルに次のコードを挿入します。

 1 <?php
2 関数 fn_upload_file() {
3 if ( isset($_POST['upload_file']) ) {
4 $upload = wp_upload_bits($_FILES['file']['name'], null, $_FILES['file']['tmp_name']);
5 // データベースに保存 $upload['url]
6 }
7 }
8 add_action('init', 'fn_upload_file');

$upload変数を出力すると、ディレクトリとアップロードされたファイルの URL を含む配列が得られます。 ユーザーは、 $upload['url]を使用してこれらの URL を検索し、データベースに保存できます。

上記のように、 wp_upload_bits()メソッドを使用すると、ファイルはデフォルトの WordPress フォルダー階層に保存されます。 しかし、自分のディレクトリ内にファイルを保存したい場合はどうすればよいでしょうか?

そのような状況では、 uploadsディレクトリにカスタム フォルダを作成し、そこにファイルを移動する必要があります。 ファイルをuploads/product-imagesディレクトリに保存するとします。 以下のコードを使用すると、 product-imagesフォルダーを生成し、その中にファイルを保存できます。

functions.phpファイルにコードを記述します。

 1 関数 fn_upload_file() {
2 if ( isset($_POST['upload_file']) ) {
3 $upload_dir = wp_upload_dir();
4
5 if ( ! empty( $upload_dir['basedir'] ) ) {
6 $user_dirname = $upload_dir['basedir'].'/product-images';
7 if ( ! file_exists( $user_dirname ) ) {
8 wp_mkdir_p( $user_dirname );
9 }
10
11 $filename = wp_unique_filename( $user_dirname, $_FILES['ファイル']['名前'] );
12 move_uploaded_file($_FILES['file']['tmp_name'], $user_dirname .'/'.$filename);
13 // データベースに保存 $upload_dir['baseurl'].'/product-images/'.$filename;
14 }
15 }
16 }
17 add_action('init', 'fn_upload_file');

ここでは、 wp_unique_filename()手法を適用して、特定のディレクトリに一意のファイル名を付けています。

#3 プログラムでカスタム ギャラリーにファイルを挿入する

「gallery」というカスタム メタ フィールドとして追加されたギャラリーがあるとします。 media_sideload_image()を介して大量の画像をアップロードします。 次に、ID をシリアル化し、 update_post_meta( $post_id , 'gallery', $serialized)によってギャラリーに挿入します。

したがって、バックエンドの [投稿の編集]ページで投稿を見ると、アップロードされたすべての写真が表示されます。 ただし、バックエンドで [更新] をクリックするまで、これらの写真はフロントエンドのスライドショーに表示されません。

では、ギャラリーを作成した後、プログラムで [更新] ボタンをクリックするにはどうすればよいでしょうか? 以下のガイドに従ってください。

  1. 投稿ギャラリーを更新したら、次のコードを追加して、プログラムで [更新] ボタンを選択します。
 wp_update_post(['ID'=>$post_id]);

2. 検索およびフィルター機能を使用するようにキャッシュを更新します。

 do_action('search_filter_update_post_cache', $post_id);

おまけのヒント: ファイルのアップロードを保護する

アップロードしたファイルへの不正アクセスを防ぐ方法はありますか? 答えはイエスです。 詳細については、WordPress ファイルを保護するための 21 の便利な .htaccess トリックに関する詳細ガイドを参照してください。 .htaccess はサイトを円滑に運営するための重要なファイルであるため、変更を行う際は注意が必要です。

一方、コーディング スキルに自信がない場合は、PDA Gold プラグインをインストールしてください。 .htaccess ファイルへの影響を心配することなく、面倒な作業を処理するのに役立ちます。

考慮すべきもう 1 つの方法は、WordPress ファイルをパスワードで保護することです。 詳細については、記事をご覧ください。

専門家のように WordPress にプログラムでファイルをアップロードしましょう!

WordPress でプログラムによってファイルをアップロードする 3 つの方法を紹介しました。 これで、ファイルをメディア ライブラリに簡単にアップロードしたり、HTML フロントエンド ファイル アップロード フォームを介してアップロードしたりできます。 カスタム ギャラリーにファイルを追加することもできます。 そして最も重要なことは、コードを使用するか、プラグインをインストールして、WordPress ファイルを保護することを忘れないでください.

WordPress でプログラムによってファイルをアップロードする方法がすべてです。 他の方法を知っていますか? 以下のコメントセクションで私たちと共有してください。