更改自定义插件页面上的上传目录

时间:2015-06-30 作者:EHerman

在自定义插件的这个特定页面上,我试图更改上传目录的路径。该页面是一个标准的php页面,而不是任何特定类型的post类型页面。

我已经找到了许多文章来解释这个过程,我可以看到如果这是一个自定义的帖子类型,它将如何工作,但如果不是这样的话,示例就不能按预期工作。

我的自定义页面的URL如下所示:http://localhost/custom-plugin/wp-admin/admin.php?page=custom-plugin-page&id=1.

$\\u POST变量是动态的,取决于用户正在编辑的项目。

我遇到了以下问题,并根据自己的需要进行了调整:

function edd_load_upload_filter() {
    global $pagenow;

    if ( ! empty( $_POST[\'page\'] ) && $_POST[\'page\'] == \'custom-plugin-page\' && ( \'async-upload.php\' == $pagenow || \'media-upload.php\' == $pagenow ) ) {
        add_filter( \'upload_dir\', \'edd_set_upload_dir\' );
    }
}
add_action(\'admin_init\', \'edd_load_upload_filter\');

function edd_set_upload_dir($upload) {
    $upload[\'subdir\']   = \'/edd\' . $upload[\'subdir\'];
    $upload[\'path\'] = $upload[\'basedir\'] . $upload[\'subdir\'];
    $upload[\'url\'] = $upload[\'baseurl\'] . $upload[\'subdir\'];
    return $upload;
}
但正如您所看到的,该函数正在检查post类型是否为“download”。

据我所知,在初始页面加载时,$\\u POST变量不是空的,但当打开媒体模式时,它是空的。由于它在媒体模式中返回为空,因此无法正确设置上载目录的路径。如果我删除!empty( $_POST[ page\'] ); 检查路径是否正确调整,然后在整个站点上进行调整,而不仅仅是在我的自定义页面上。

不知道为什么网络上的示例都使用一些$\\u POST或$\\u REQUEST变量,但当我使用它时,它是空的,所以我的函数永远不会启动。有什么想法吗?

1 个回复
最合适的回答,由SO网友:EHerman 整理而成

在处理了一段时间并检查了GLOBALS变量是否有任何有用的内容后,看起来媒体模式中的引用URL与我的自定义插件页面的URL相同。

使用它并将其拆分一点,我能够确认我在适当的页面上。我确信还有其他更优雅的解决方案,但这就是我能够想到的。我已经测试过了,它似乎工作正常。

这是我的最终解决方案:

    add_filter( \'admin_init\' , \'check_if_we_should_change_upload_dir\', 999 );
    function check_if_we_should_change_upload_dir() {   
            global $pagenow;
            $referrer = isset( $_SERVER[\'HTTP_REFERER\'] ) ? $_SERVER[\'HTTP_REFERER\'] : \'\';
            if( $referrer != \'\' ) {
                $explode_1 = explode( \'page=\' , $referrer );
                if( isset( $explode_1[1] ) ) {
                    $referring_page = explode( \'&id=\' , $explode_1[1] );
                    if( isset( $referring_page[0] ) && $referring_page[0] == \'custom-plugin-page\' && ( \'async-upload.php\' == $pagenow || \'media-upload.php\' == $pagenow ) ) {
                        add_filter( \'upload_dir\', \'alter_the_upload_dir\' );
                    }
                }
            }
       }


  function alter_the_upload_dir( $upload ) {
        $upload[\'subdir\'] = \'/custom-directory\' . $upload[\'subdir\'];
        $upload[\'path\'] = $upload[\'basedir\'] . $upload[\'subdir\'];
        $upload[\'url\']  = $upload[\'baseurl\'] . $upload[\'subdir\'];
        return $upload;
    }
如果有人有更好的检查方法,我洗耳恭听!

埃文

结束

相关推荐

使用Apply_Filters帮助输出POST类

我不熟悉脚本,这是一个插件,我想修改它来输出post类。当我尝试使用时:apply_filters( \'post_class\', $page->post_class ) it仅输出array=\" \". 我是否需要一个附加函数来连接到post类?在我的研究中,我无法判断我的语法是否错误,或者我在类中缺少了一个要“拉”的函数apply_filters 抓住。非常感谢你的帮助。 var $db_fields = array (\'parent\' => \'post_parent\',