web-dev-qa-db-ja.com

バックエンド管理者に、ダウンロードするファイルを一覧表示するページを追加しますか? WP 3.3

私は現在WP 3.3.1を使用しています。

基本的に私はただwp-login.phpを通してログインしてバックエンド管理者パネルを見るユーザーのために彼らがダウンロードすることができるファイルのリストを示すことができるページを見ることができるようにしたいです。

  1. ファイルは.Zip、.pdf、または.txtのいずれかになります。
  2. ダウンロードのリストがあなたが投稿>>すべての投稿を見たときと同じ正確なフォーマットを持っていれば素晴らしいでしょう。
  3. 物事を始めるために、それはソートやフィルタ機能を必要としません。 1つはいいでしょうが。

ファイルをアップロードする方法が正確にわからない。しかし、上記の方法を最も簡単にするための方法が何であれ、私には問題ありません。

上記を実行するか、または私が正しい方向から始められるようにするためのヒントやコードスニペットは素晴らしいものです。

前もって感謝します。

2
Damainman

このプロセスにはいくつかのステップが含まれますが、ここではいくつか概要を説明します。

ステップ1:プラグインを設定する

あなたはそれらについてのさらに詳しい情報を見ることができます ここ 。それはその記事の中でかなり自明であり、それに対するあなたの値は異なるだろうから、私はこの答えの中のヘッダ情報を調べない。

ステップ2:アクティベーションと機能を設定する

//run when admin menu is being created
add_action('admin_menu','my_files_plugin_menu');
//add the new item to the admin menu
function my_files_plugin_menu() {
     add_menu_page('Files','Files','editor','my-files-plugin','','',10);
     add_submenu_page('my-files-plugin','Download Files','Download Files','editor','my-files-plugin','my_files_plugin_download_page');
     add_submenu_page('my-files-plugin','Upload Files','Upload Files','administrator','my-files-upload','my_files_plugin_upload_page');
}

//run when plug-in is activated
register_activation_hook(__FILE__,'ballots_by_social_set_options');
//set up activation options for plug in
function my_file_upload_plug_in_activate() {
     //check to see if files directory has already been created
     //we check for the directory first so that if the plug-in is being reactivated
     //or updated, we won't bother trying to create the directory again
     if(!is_dir(ABSPATH . '/wp-content/files_plugin')) {
          //create directory
          mkdir(ABSPATH . '/wp-content/files_plugin',0755);
     }
}

ダウンロードページにはエディタのユーザーレベル、アップロードページには管理者のユーザーレベルを使用しましたが、必要に応じてそれらを設定できます。また、3番目のページにOptionsを追加し、register_activation_hook()add_option() を使ってデフォルトを設定することもできます。次に、 update_option() および get_option() を使用して、ページにアクセスできるユーザーレベルを調整できるようにします。それを行う場合は、それらを削除するために delete_option() を使用するところに register_deactivation_hook() を設定するようにしてください。

ステップ3:アンインストール機能を設定する

これをプラグインディレクトリのunstall.phpファイルに入れることをお勧めします。これにより、誰かがプラグインの[削除]リンクをクリックすると、ディレクトリとそのすべてのコンテンツが削除されます。さまざまなファイルタイプのメインディレクトリにサブディレクトリを設定した場合は、それらを削除するように関数を変更することもできます。

//remove /wp-content/files_plugin/
$dir = ABSPATH . '/wp-content/files_plugin';
chmod($dir,0777);
function remove_files_plugin_dir($dir) {
     //see if directory exists
     if(is_dir($dir)) {
     //open directory
     $handle = opendir($dir);
     //iterate through objects in directory and remove them
     while($obj = readdir($handle)) {
          if($obj != "." && $obj != '..') {
               if(!unlink($dir . $obj)) {
                    break;
               } 
          }
     }
     closedir($handle);
     rmdir($dir);
}
//run remove directory function
remove_files_plugin_dir($dir);

ステップ4:アップロードページを設定する

あなたはファイル入力とアップロードボタンで簡単なページを設定したいでしょう、あなたが望むならあなたは複数のファイルを受け入れるためにフォームを設定することができます。 $_FILES配列を参照して、アップロードしたファイルを新しい/ wp-content/files_plugin /ディレクトリに書き込む必要があります。

ステップ5:ダウンロードページを設定する

これは、あなたがどうやってそれをやりたいかということ次第です。アンインストール機能のように、ディレクトリを開いてファイルを繰り返し処理し、それらをページに出力するだけで済みます。

あるいは、 jQueryファイルツリー のようなものを使ってファイルブラウザをユーザーに提示することもできます。

編集2:投稿ページのように表示させる方法について、私は非常に間違っていました。もっと良い方法でこれを達成するために WP_List_Table クラスを使うことができるように見えます。私はこのクラスでの経験はありませんが、とても気まぐれに見えます。

構造とクラスの観点から、典型的な管理領域テーブルを反映するように出力を設定したところです。ただし、これからはWP_List_Tableを必ず使用します。

ステップ6:削除機能を設定する

管理者だけが見ることができるファイルを削除することを可能にすることができるそれぞれのファイルに特有のリンクを持つことをおそらく望むでしょう。

削除関数へのAjax呼び出しとして設定し、ファイル名をパラメータとして送信してから、unlink()関数を使用します。これは、アンインストール関数で行ったように、そのファイルを削除するためです。

明らかにあなたはあなたのニーズに合うようにこのコードのどれかを微調整したいかもしれません、しかしこれはあなたにまともな出発点を提供するべきです。

また、データベース内のテーブルを使用してこれらすべてを制御できることも忘れないでください。ただし、実際のファイルを追加および削除し、ファイル名をDBに格納するだけで済みます。

あなたが何か助けを必要とするか、質問をするならば、ポストバックしてください、そして、私は援助を提供しようとします。

3
Eric Allen

私は別の議論を探していましたが、このトピックに出くわしました。たとえそれがかなり古くても、おそらくあなたがあなたの仕事を達成するためにあなたができることがもっとたくさんあることを指摘したいです。

私があなただったら、アップロードのために関連メタボックスを使ってカスタム投稿タイプを作ったでしょう( wpalchemy こちら)。

それからダウンロードすることに関しては、それはあなたが本当に必要とするものによります。あなたが本当に管理領域の中にリストを表示する必要があるなら、 WP_List_Table が方法です(そしてここで をチェックしてください )。そうでなければ、私はあなたが一般的なカスタム投稿タイプのアーカイブページを設定して、それから関連するユーザプロファイルまたは機能でそれを結び付けることができると思います。

それが将来他の人に役立つことを願っています。

0
Luca Reghellin