Wordpress 根据用户名有条件地更改XMLRPC调用上的上载目录
我似乎已经搜索了所有与此相关的问题,但我被卡住了,因为没有一个问题涉及通过XML RPC上传的特定情况 我希望有条件地更改Wordpress文件上载目录,仅当文件通过XML RPC调用传入,并且仅当调用来自特定用户时 我的方法基于和的组合 以下是我在没有运气的情况下尝试的: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[
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:)