web-dev-qa-db-ja.com

管理プラグイン、どうやって違うコンテントタイプを出力できますか?

私は管理ページでプラグインを作成しています。

  • ダウンロード用のファイルをストリーミングする(content-typeと他のヘッダを設定する)
  • 管理メニューなどを使わずにHTMLを表示する

どちらの場合も、 'pages'にログインした管理者だけがアクセスできる必要があります。これまでのところ、以下のように、wp-blog-header.phpをphpファイルにインクルードし、ユーザーが管理者であることを確認してから自分で作業を行うことによって、これらの両方を達成する1つの方法を見つけました。

require('../../../wp-blog-header.php');

if (!current_user_can('administrator'))
{
    wp_die( __('You do not have sufficient permissions to access this page.') );
} 

...set headers & stream file

これを行うより良い方法はありますか?

このようにしてはいけない理由はありますか?

ありがとう:)

5
JimmyCricket

私はこの2つの方法をやった:

1) - csvエクスポート機能 - wpが何も出力する前に、特別なコンテンツタイプの処理が必要であることを検出します。

add_action ('plugins_loaded',           'amr_meta_handle_csv');

function amr_meta_handle_csv ($csv, $suffix='csv') {
// chcek if there is a csv request on this page BEFORE we do anything else ?
if (( isset ($_POST['csv']) )) {
// do some stuff
      to_csv ($csv, $suffix)
}
}


function to_csv ($csv, $suffix) {
/* create a csv file for download */
    if (!isset($suffix)) $suffix = 'csv';
    $file = 'userlist-'.date('YmdHis').'.'.$suffix;
    header("Content-Description: File Transfer");
    header("Content-type: application/octet-stream");
    header("Content-Disposition: attachment; filename=$file");
    header("Pragma: no-cache");
    header("Expires: 0");
    echo $csv;
    exit(0);   /* Terminate the current script sucessfully */
}       

もう1つの方法は、よりフィード指向ですが、wpが特別な処理を検出することを除いて、同じ原則です(?feed = icsまたはのチェック)。 add_feedコードをinitアクションに入れます。

add_feed('ics', 'ical_feed');

関数 'ical_feed'はヘッダ全体を処理します。

2
anmari