web-dev-qa-db-fra.com

Un add_filter conditionnel pour le répertoire de téléchargement?

J'ai un bouton de téléchargement de média personnalisé (dans la page d'édition standard, à côté du bouton de téléchargement de média standard), et j'ai besoin de changer le répertoire de téléchargement dynamiquement si ce bouton est cliqué - en utilisant add_filter ('wp_handle_upload_prefilter', 'ma_fonction').

Ce message & réponse: add_filter conditionnel? semblent donner la solution, mais pour une raison quelconque ne fonctionne pas pour moi - le paramètre supplémentaire 'hexProtected' est not set & so add_filter n'est pas appelé.

Mon code est en dessous ... est-ce que je fais quelque chose de stupide ou est-ce que la solution publiée ne fonctionne pas?!

<?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

Je sais que cela fait longtemps, mais je voulais proposer une solution, ne serait-ce que pour ceux qui rencontrent cette question via Google.

Le problème est lié à l'ordre des paramètres dans la chaîne de requête lorsque vous créez l'URL du programme de téléchargement de média. D'après mon expérience, tous les paramètres figurant après 'TB_iframe = 1' sont ignorés. Vous souhaitez donc que vos valeurs personnalisées soient placées avant. Je n'ai pas vu cela documenté (et n'ai pas exploré le noyau pour voir pourquoi les paramètres sont gérés de cette façon), mais je ne vois aucune bonne raison à cela - j'ai probablement passé une heure à me déchirer les cheveux avant de découvrir le problème.

Je n'ai pas encore essayé cette version 3.5. Avec tous les changements apportés au programme de téléchargement de média, il est possible que cela ait été résolu.

5
Brendan Gannon