web-dev-qa-db-fra.com

télécharger des fichiers dynamiquement dans les dossiers de l'utilisateur

nous avons plusieurs utilisateurs sur notre site. nous avons créé un dossier distinct pour chaque utilisateur. Les administrateurs ont une zone de sélection pour sélectionner les utilisateurs du site. nous devons donner la possibilité de télécharger des fichiers à cet utilisateur particulier lors de la sélection.

J'ai créé un crochet pour upload_dir. cela fonctionne bien avec l'utilisateur connecté. mais comment le rendre dynamique sur le panneau d'administration. Comment cela fonctionne-t-il lorsque l'administrateur sélectionne un utilisateur dans le menu déroulant et télécharge des fichiers vers cet utilisateur qu'il a sélectionné?.

    function custom_upload_directory( $args ) {
        global $current_user;
        get_currentuserinfo();
        $base_directory = ABSPATH."user_documents/".$current_user->user_login;
        $base_url = home_url()."/user_documents/".$current_user->user_login;
        $args['path'] = $base_directory;
        $args['url']  = $base_url;
        $args['subdir'] = $current_user->user_login;
        $args['basedir'] = $base_directory;
        $args['baseurl'] = $base_url;return $args;
    }
    add_filter( 'upload_dir', 'custom_upload_directory' );

admin screen

lors de la sélection d'un utilisateur dans la liste déroulante, je dois télécharger un fichier dans son dossier.

code déroulant

<div id="userlistdiv" >
    <form method="post" action="">
        <h2><?php echo "users: " ?></h2>
        <select id="userselection" name="userselection">
        <?php
            $blogusers = get_users('blog_id=1&orderby=login&role=subscriber');
            echo '<option value="" selected="selected"></option>';
            foreach ($blogusers as $user) {
                echo '<option>' . $user->user_login . '</option>';
            }
        ?>
        </select>
        <INPUT TYPE="submit" name="submit" />
    </form>
</div>
2
criticalboot

Vous pouvez récupérer une instance WP_User avec get_user_by() - Codex qui documente assez bien .

add_filter( 'upload_dir', 'userLoginUploadDir' );
function userLoginUploadDir( $args )
{
    // Assuming that your forms user login (search? autocomplete? AJAX-ified? foo?) is named
    // name="user_login" id="user_login"
    $userLogin = esc_attr( $_GET['user_login'] );
    $user = get_user_by( 'login', $userLogin );

    $upload_dir = wp_upload_dir();

    return array_merge( $upload_dir, array(
        # 'path'    => '',
        # 'url'     => '',
        'subdir'  => $user->user_login,
        # 'basedir' => '',
        # 'baseurl' => '',
    ) );
}

Fondamentalement, il devrait suffire de définir uniquement la clé subdir. Le reste devrait être disponible à partir de wp_upload_dir() . Dans tous les cas: n'utilisez pas de constantes pour les chemins ou les URL/URI. Utilisez les fonctions comme celles qui appliquent les filtres nécessaires.

1
kaiser