web-dev-qa-db-ja.com

フロントエンドにアップロードする添付ファイルの公開 - 繊細

私はおそらくここでいくつかの常識的な規則を破ります.

テーマテンプレート内のアップロードフォームの添付ファイル処理でwordpressのベイク処理を利用する方法はありますか。はい、フロントエンド - 私は知っています。

私は記念サイトを作成しています、そして私たちのコミュニティが失った親愛なる人のためにテキストの写真の「コメント」を人々に残すことができるようにしたいです。

しかし、これらはワードプレスのユーザーではありません。彼らは叔母と子供とその間のすべてです。

これらの人々はWPデフォルトのメディアUIを理解することができないでしょう、そして私は彼らがログインしていなくても済むことを望みません。あまりにも混乱します。これがそれほど具体的で繊細なプロジェクトではないとしたら、ルールをそれほど曲げようとはしないでしょう。

だれでもファイルをアップロードできるようにすることでセキュリティホールを開放していることはわかっていますが、それはいくらか必要だと思います。アップロードされた添付ファイルはすべて「保留中」になります。私はテキストと写真の両方がコメントとしてではなくカスタム投稿タイプを設定しているので、私はいくつかの内蔵投稿データを利用することができます。

ファイル処理がフロントエンドにあっても、ファイルチェック、処理、命名、サイズなどに組み込まれたworpdressを利用できれば、すばらしいになります。

wp_handle_upload()

'../ wp-admin/includes/file.php'を含めることによって

しかし、それはうまくいきませんでした。含めると致命的なエラーが発生します。テンプレートにadminインクルードを含めるのは、規則に反しているだけです...おそらく。

私は自分自身ですべてのファイル処理を行うことができますが、おそらくwordpressの機能を利用する方法があると考えています。

それとも私が一緒に進むべき別のルートについての提案はありますか?

残念なことに、これはかなり時間に敏感です...追悼式典は数日でやって来るでしょう。

どうもありがとうございます

ジョナ

1
Jonah Goldstein

これはフロントエンドからのアップロードを受け付けるときに使う関数で、テンプレートファイルでそれを使うことができます。

function insert_attachment($file_handler,$post_id,$setthumb='false') {

  // check to make sure its a successful upload
  if ($_FILES[$file_handler]['error'] !== UPLOAD_ERR_OK) __return_false();

  require_once(ABSPATH . "wp-admin" . '/includes/image.php');
  require_once(ABSPATH . "wp-admin" . '/includes/file.php');
  require_once(ABSPATH . "wp-admin" . '/includes/media.php');

  $attach_id = media_handle_upload( $file_handler, $post_id );

  if ($setthumb) update_post_meta($post_id,'_thumbnail_id',$attach_id);
  return $attach_id;
}

使用法:

// set $post_id to the id of the post you want to attach
// these uploads to (or 'null' to just handle the uploads
// without attaching to a post)

if ($_FILES) {
  foreach ($_FILES as $file => $array) {
    $newupload = insert_attachment($file,$post_id);
    // $newupload returns the attachment id of the file that
    // was just uploaded. Do whatever you want with that now.
  }
}
7
Bainternet