web-dev-qa-db-ja.com

アップロードディレクトリの条件付きadd_filter?

私はカスタムメディアアップロードボタンを持っていて(標準のメディアアップロードボタンと並んで)、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.'&amp;TB_iframe=1&amp;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;
}

?>
1
Sarah

私はそれがしばらく経ったことを知っています、しかし私がグーグルを通してこの質問に遭遇する人々のためにだけならば、私は解決策を提供したかったです。

問題は、メディアアップローダのURLを作成するときのクエリ文字列内のパラメータの順序にあります。私の経験では、 'TB_iframe = 1'の後に来るパラメータはすべて無視されるので、この前にカスタム値を置きたいと思います。私はこれが文書化されているのを見たことがありませんし(そしてなぜパラメータがこのように扱われるのかコアを探ることもしませんでした)。問題。

私はまだ3.5でもこれを試していません。メディアアップローダへのすべての変更により、これに対処した可能性があります。

5
Brendan Gannon