Wordpress 根据用户名有条件地更改XMLRPC调用上的上载目录

Wordpress 根据用户名有条件地更改XMLRPC调用上的上载目录,wordpress,file-upload,xml-rpc,Wordpress,File Upload,Xml Rpc,我似乎已经搜索了所有与此相关的问题,但我被卡住了,因为没有一个问题涉及通过XML RPC上传的特定情况 我希望有条件地更改Wordpress文件上载目录,仅当文件通过XML RPC调用传入,并且仅当调用来自特定用户时 我的方法基于和的组合 以下是我在没有运气的情况下尝试的: add_filter( 'xmlrpc_methods', 'call_intercept1' ); function call_intercept1( $methods ) { $methods[

我似乎已经搜索了所有与此相关的问题,但我被卡住了,因为没有一个问题涉及通过XML RPC上传的特定情况

我希望有条件地更改Wordpress文件上载目录,仅当文件通过XML RPC调用传入,并且仅当调用来自特定用户时

我的方法基于和的组合

以下是我在没有运气的情况下尝试的:

    add_filter( 'xmlrpc_methods', 'call_intercept1' );
    function call_intercept1( $methods ) {

    $methods[ 'metaWeblog.newMediaObject' ] = 'custom_upload1';

    return $methods;}

function custom_upload1( $args ) {
    global $wpdb;

        $username = $this->escape( $args[1] );
        $password = $this->escape( $args[2] );
        $data     = $args[3];

        $name = sanitize_file_name( $data['name'] );
        $type = $data['type'];
        $bits = $data['bits'];

    if ( !$user = $this->login($username, $password) )
            return $this->error;

    if ( $username = "XXX" ) {
    add_filter('upload_dir', 'custom_upload_dir1');

}
$upload = wp_upload_bits($name, null, $bits);
        if ( ! empty($upload['error']) ) {
            /* translators: 1: file name, 2: error message */
            $errorString = sprintf( __( 'Could not write file %1$s (%2$s).' ), $name, $upload['error'] );
            return new IXR_Error( 500, $errorString );
            }
    return $upload;
}

function custom_upload_dir1( $param ){
    $custom_dir = '/the-desired-directory';

    $param['path'] = $param['path'] . $custom_dir;
    $param['url'] = $param['url'] . $custom_dir;

    error_log("path={$param['path']}");  
    error_log("url={$param['url']}");
    error_log("subdir={$param['subdir']}");
    error_log("basedir={$param['basedir']}");
    error_log("baseurl={$param['baseurl']}");
    error_log("error={$param['error']}"); 

    return $param;
}
文件已正确上载,但没有发生有条件的目录更改


有人知道为什么会这样吗

我能够解决这个问题,基本上是使用Ulf B作为模型,并从那里简化它

对于其他面临同样问题的人,以下是有效的方法:

    // XMLRPC Conditional Upload Directory
    add_action('xmlrpc_call', 'redirect_xmlrpc_call'); 

    function redirect_xmlrpc_call($call){
        if($call !== 'metaWeblog.newMediaObject'){return;}      
        global $wp_xmlrpc_server; 
        $username = $wp_xmlrpc_server->message->params[1];
        $data = $wp_xmlrpc_server->message->params[3];
        if($username !== "XXX"){return;}
        else {custom_pre_upload($data);}}

    function custom_pre_upload($data){  
        add_filter('upload_dir', 'custom_upload_dir');
        return $data;}

    function custom_post_upload($fileinfo){ 
        remove_filter('upload_dir', 'custom_upload_dir');
        return $fileinfo;}

    function custom_upload_dir($path){      
        if(!empty($path['error'])) { return $path; } //error; do nothing.   
        $customdir = '/' . 'your-directory-name';   
        $path['subdir']  = $customdir;
        $path['path']   .= $customdir; 
        $path['url']    .= $customdir;  
        return $path;}

这个问题的格式很好。欢迎来到sobuddy:)