我应该使用哪种筛选器/操作来为“虚拟”文件提供内容

时间:2018-04-25 作者:epc

我正在开发一个自定义帖子类型的插件,其真实内容缓存在redis数据库中。

当用户请求时http://my-site/some-post 我的插件从redis检索内容并检索它。

现在我需要为孩子后的资产提供服务http://my-site/some-post/picture.jpghttp://my-site/some-post/subdir/media.mp3 插件也应该从redis中检索到这些内容,但是我很难弄清楚如何在wordpress中处理这些内容,因为它们实际上并不存在于目录中。Wordpress总是返回404。

我可以使用哪些过滤器或操作来实现我的目标?

1 个回复
SO网友:Milo

我认为你最早可以采取的行动是muplugins_loadedplugins_loaded. muplugins_loaded 只会为Must Use Plugins.

一些plugins_loaded 伪代码:

add_action( \'plugins_loaded\', \'wpd_plugin_routes\' );
function wpd_plugin_routes() {
    if( is_a_virtual_file() ){
        serve_file();
        exit;
    }
}
如果您想要完整的WordPress环境、插件、主题和经过身份验证的用户,就在WordPress解析请求之前,您已经获得了do_parse_request 过滤器:

add_filter( \'do_parse_request\', \'wpd_do_parse_request\', 1, 3 );
function wpd_do_parse_request( $continue, WP $wp, $extra_query_vars ){
    // do something and halt execution, or
    return $continue; // true by default, meaning continue parsing the request
}
如果您想在WordPress解析请求后获得以上所有内容,那么parse_request 行动您可以在此处更改主查询变量:

add_action( \'parse_request\', \'wpd_parse_request_thing\' );
function wpd_parse_request_thing( $query ) {
    if( isset( $query->query_vars[\'pagename\'] ) ){
        if( \'some-page\' == $query->query_vars[\'pagename\'] ){
            $query->query_vars[\'pagename\'] = \'some-other-page\';
        }
    }
}
加载模板之前的最后一个操作是template_redirect. 这里所有的is_ 条件工作:

add_action( \'template_redirect\', \'wpd_page_template_redirect\' );
function wpd_page_template_redirect() {
    if( is_404() ) {
        // do something
        die;
    }
}

结束

相关推荐

WordPress Plugins won't save

我有一个WordPress网站,我刚刚接管了一个客户,因此我没有能力与以前的网站管理员/开发人员交谈。该网站使用的是YOOtheme对Subway稍加修改的版本。为了更新插件位置,Subway的一部分有“小部件选项”。我无法更改外观或小部件显示的页面,因为我无法保存任何内容。它看起来像已保存,但没有保存,或者您会在保存按钮旁边看到“加载循环”,它一直在运行。Things to note:<WordPress和插件是最新的。在我们转移到新服务器之前,插件是可更新的。新服务器有一个max\\u inpu