管理插件,我如何输出不同的内容类型?

时间:2012-04-19 作者:JimmyCricket

我正在创建一个带有管理页面的插件,该插件需要:

流式传输文件以供下载(设置内容类型和其他标题)

  • 在这两种情况下,不使用管理菜单等显示HTMLmust 只能由登录的管理员访问。到目前为止,我已经找到了一种实现这两个目标的方法,包括wp blog header。php在php文件中,检查用户是否是管理员,然后自己做事情,如下所示。

    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
    
    有没有更好的方法?

    我有什么理由不这样做吗?

    谢谢:)

  • 2 个回复
    SO网友:anmari

    我有两种方法:

    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 */
    }       
    
    另一种方法更面向feed,但原理相同,除了wp进行特殊处理检测(检查feed=ics或)。将add\\u feed代码放入init操作中。

    add_feed(\'ics\', \'ical_feed\');
    
    函数“ical\\u feed”然后执行整个标题等操作。

    SO网友:Michael Ecklund

    看看WordPress HTTP API。http://core.trac.wordpress.org/browser/tags/3.3.2/wp-includes/http.php

    至于插件开发的其余部分。阅读plugin API 或关于writing a plugin.

    结束

    相关推荐

    从非核心php文件访问BloInfo、Get_Option和plugins_url

    我正在创建一个插件,插件目录中有一个php文件,可以通过自定义重写url直接访问该文件。我需要这个文件能够使用标题中提到的三个功能。目前,我正在包括wp负载。php文件,它使我能够访问所有这些函数。然而,我一直在读到不应该包括wp负载,因为它可能不总是在同一个位置,而且它包括可能不需要的wordpress文件。这就是我如何包含wp负载:$wp_base = explode($_SERVER[\'PHP_SELF\'], $_SERVER[\'SCRIPT_FILENAME\']); require