0

download次のサンプルプラグインを使用すると、管理パネルでボタンが押されたときにテキストファイルをダウンロードできます。問題は、テキストファイル名がそうなると思ってhello_world.txtいたのに、どういうわけかになってしまうことoptions-general.txtです。

この行header('Content-Disposition: attachment; filename="' . $file_name . '"');を直接設定すると、正常header('Content-Disposition: attachment; filename="hello_world.txt"');に機能するようにファイル名が設定されます。

/* Plugin Name: Sample Download Button  */

$sample_download_button = new Sample_Download_Button_AdminPage('Sample Download Button');
add_action('init', array($sample_download_button, "download_text"));
add_action('admin_menu', array($sample_download_button , "admin_menu"));

class Sample_Download_Button_AdminPage {
    function __construct($pagetitle, $menutitle='', $privilege='manage_options', $pageslug='') {
        $this->pagetitle = $pagetitle;
        $this->menutitle = !empty($menutitle) ? $menutitle : $pagetitle;
        $this->privilege = $privilege;
        $this->pageslug = !empty($pageslug) ? $pageslug : basename(__FILE__, ".php");
    }
    function admin_menu() {
        add_options_page($this->pagetitle, $this->menutitle, $this->privilege, $this->pageslug, array(&$this, 'admin_page'));
    }
    function admin_page() {     
        ?>
        <div class="wrap">
            <h1>Download Button Sample</h1>
            <form action="" method="post" target="_blank">
            <input type="submit" value="download" name="download">
            </form>
        </div>
        <?php
    }   
    function download_text($file_name='hello_world.txt') {
        if (!isset($_POST['download'])) return;
        $your_text = 'hello world';
        header("Content-type: text/plain");
        header('Content-Disposition: attachment; filename="' . $file_name . '"');
        echo $your_text;
        exit;
    }       
}

それはなぜです?また、デフォルトのパラメータ値を設定するにはどうすればよいですか?通常の機能で試してみましたが、デフォルト値も反映されていません。あなたの情報をありがとう。

4

1 に答える 1

1

私はこれをいくつかの方法でテストしました。これには、完全な関数を「サンドボックス」インストールにコピーすることも含まれます。

すべてのフックがパラメータを渡すわけではありません。私の知る限り、initフックはそうではありません。パラメータを受け入れるか渡すかは、フックが定義されたときに決定されます。どうやら、パラメータを渡すことを意図していないフックが起動すると、それは空の文字列をコールバックに渡します。あなたの場合、これはデフォルトを効果的に上書きし、ファイル名を残さないことを意味します。これにより、ブラウザはフォームが送信されたページのファイル名(options-general.php)を使用します。

ファイル名をフォームの非表示フィールドとして渡して送信し$_POST、デフォルトを設定した方法で設定します$your_text

function download_text() {
    if (!isset($_POST['download'])) return;
    if (!isset($_POST['filename'])) $file_name = $_POST['filename'];
    else $file_name = 'hello_world.txt';
    $your_text = 'hello world';
    header("Content-type: text/plain");
    header('Content-Disposition: attachment; filename="' . $file_name . '"');
    echo $your_text;
    exit;
}  
于 2012-10-14T14:53:24.243 に答える