web-dev-qa-db-ja.com

私のフォームアクションURLの前に存在しないディレクトリが追加されています

ユーザーがフォームとHTTP POST要求を介して音声をアップロードできるようにしています。

これが私のpage-profile.phpからの関連フォームコードです:

<form method="post" action="wp-content/themes/freelanceengine-child/audio_upload.php" enctype="multipart/form-data">
                              <input type="file" name="file" id="file" accept="audio/*">

しかし、ブラウザが私のphpファイルに到達することはありません。次のエラーが表示されます。要求されたリソース/profile/wp-content/themes/freelanceengine-child/audio_upload.phpがこのサーバー上に見つかりませんでした。

このプロファイルディレクトリは私のサイトのどこにもないので、なぜURLの先頭に追加されるのかわかりません。私はサーバーを再起動し、さまざまなURLやブラウザを試してみましたが、/ profileは一貫して追加されています。

もしあなたが洞察をお持ちなら、どうしてこれが起こっているのか理解してください。壊れている理由がわかっていれば、おそらく修正できます。

ちなみに、私はプラグインがこのようなことをする最善の方法であると思います、しかし正直なところ私はWordPressプラグインで働いたことがないので、私は今のところ私が知っていることに固執しています。

1
Keenan Diggs

相対URLを使用しないでください。 私はすでにこれについて多くの答えを書きました 相対URLはブラウザが見ている通りあなたがいるページに相対的です。かなりパーマリンクがオンになっていると、それはほとんどいつもひどくうまくいくでしょう。この問題/間違いはごく一般的なので、私はあなたの役目を見て答えを推測しました。

第二に、あなたはそのようなスタンドアロンのテーマファイルに投稿するべきではありません。 AJAX API を使用します(実際にはAJAXリクエストでなくても)。それはとても、とても簡単です:

function my_ajax_wpse_213294() {
  // your upload code

  exit();
}
add_action('wp_ajax_my_ajax', 'my_ajax_wpse_213294'); // logged in only
add_action('wp_ajax_nopriv_my_ajax', 'my_ajax_wpse_213294');

/wp-admin/admin-ajax.php URLパラメーターを使用してadmin_url('/admin-ajax.php');で作成できる?action=my_ajaxに送信します。

1
s_ha_dum