Bedingter add_filter für Upload-Verzeichnis?

Ich habe eine benutzerdefinierte Medien-Upload-Schaltfläche (auf der standardmäßigen Post-Bearbeitungsseite neben der Standard-Schaltfläche zum Hochladen von Medien) und muss das Upload-Verzeichnis dynamisch ändern, wenn diese Schaltfläche angeklickt wird – mit add_filter (‘wp_handle_upload_prefilter’, ‘my_function’).

Dieser Beitrag und Antwort: Conditional add_filter? scheinen die Lösung zu geben, aber aus irgendeinem Grund funktionieren sie nicht für mich – der zusätzliche Parameter ‘hexProtected’ ist nicht gesetzt und so wird add_filter nicht aufgerufen.

Mein Code ist unter … mache ich etwas blöd oder funktioniert die gelostete Lösung nicht ?!

<?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' . 'ID.'&TB_iframe=1&hexProtected=1" class="thickbox">'; 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; } ?> 

Solutions Collecting From Web of "Bedingter add_filter für Upload-Verzeichnis?"

Ich weiß, dass es eine Weile her ist, aber ich wollte eine Lösung anbieten, wenn auch nur für diejenigen, die über Google auf diese Frage stoßen.

Das Problem tritt mit der Reihenfolge der Parameter in der Abfragezeichenfolge auf, wenn Sie die URL für den Medien-Uploader erstellen. Meine Erfahrung ist, dass alle Parameter, die nach ‘TB_iframe = 1’ kommen, ignoriert werden, also möchten Sie Ihre benutzerdefinierten Werte davor setzen. Ich habe das nicht dokumentiert (und habe nicht den core erforscht, um zu sehen, warum die Parameter so gehandhabt werden), aber ich kann mir keinen guten Grund dafür vorstellen – wahrscheinlich habe ich eine Stunde lang meine Haare ausgerissen, bevor ich es entdeckte Das Thema.

Das habe ich auch noch nicht in 3.5 probiert. Bei allen Änderungen am MediaUploader ist es möglich, dass dies behoben wurde.