私はカスタムメディアアップロードボタンを持っていて(標準のメディアアップロードボタンと並んで)、add_filter( 'wp_handle_upload_prefilter'、 'my_function')を使ってアップロードディレクトリを動的に変える必要があります。
この投稿と回答: 条件付きadd_filter? は解決策を与えるようですが、何らかの理由で動作しない - 追加パラメータ 'hexProtected'は設定されていないため、add_filterは呼び出されません。
私のコードは下にあります...私は愚かなことをしているのでしょうか、それとも投稿されたソリューションは機能しませんか。
<?php
/* Custom Upload Directory for protected posts */
function hex_protected_media_button($context) {
global $post;
$media_button_image = 'http://www.example.com/wp-admin/images/media-button.png?ver=20111005';
$media_button = ' %s' . '<a href="media-upload.php?post_id='.$post->ID.'&TB_iframe=1&hexProtected=1" class="thickbox"><img src="'.$media_button_image.'" /></a>';
return sprintf($context, $media_button);
}
add_filter('media_buttons_context', 'hex_protected_media_button');
add_filter('wp_handle_upload_prefilter', 'hex_pre_upload');
add_filter('wp_handle_upload', 'hex_post_upload');
function hex_pre_upload($file){
if (isset($_GET['hexProtected'])) {
add_filter('upload_dir', 'hex_custom_upload_dir');
}
return $file;
}
function hex_custom_upload_dir($path){
if(!empty($path['error'])) { return $path; } //error; do nothing.
$path['path'] = str_replace($path['subdir'], '/protected'.$path['subdir'], $path['path']);
$path['url'] = str_replace($path['subdir'], '/protected'.$path['subdir'], $path['url']);
$path['subdir'] = '/protected';
return $path;
}
?>
私はそれがしばらく経ったことを知っています、しかし私がグーグルを通してこの質問に遭遇する人々のためにだけならば、私は解決策を提供したかったです。
問題は、メディアアップローダのURLを作成するときのクエリ文字列内のパラメータの順序にあります。私の経験では、 'TB_iframe = 1'の後に来るパラメータはすべて無視されるので、この前にカスタム値を置きたいと思います。私はこれが文書化されているのを見たことがありませんし(そしてなぜパラメータがこのように扱われるのかコアを探ることもしませんでした)。問題。
私はまだ3.5でもこれを試していません。メディアアップローダへのすべての変更により、これに対処した可能性があります。