web-dev-qa-db-fra.com

Extra "upload" ajouté dans le chemin

Bien que cela soit lié aux champs personnalisés avancés, cette fonction utilise toutes les fonctionnalités natives WP, je pense donc que cela convient de demander ici. Où est le supplément "/ uploads /" dans le chemin vient-il?

Dans le back-end, je vois des liens corrects vers les fichiers téléchargés (domain.com/wp-content/member-files/name.pdf), mais sur le front-end, les URL s'affichent avec un extra "/ uploads /" dans path (domain.com/wp-content/uploads/member-files/name.pdf) et produit bien sûr un fichier 404 pour le fichier.

// file upload to custom location

add_filter( 'acf/upload_prefilter/name=protected_files',
'protected_upload_prefilter' );
add_filter( 'acf/prepare_field/name=protected_files', 
'protected_files_field_display' );
function protected_upload_prefilter( $errors ) {

add_filter( 'upload_dir', 'protected_upload_directory' );

return $errors;

}

function protected_upload_directory( $param ) {

  $folder = '/member-files';

  $param['path'] = WP_CONTENT_DIR . $folder;
  $param['url'] = WP_CONTENT_URL . $folder;
  $param['subdir'] = $folder;
  $param['basedir'] = WP_CONTENT_DIR;
  $param['baseurl'] = WP_CONTENT_URL;

  return $param;

}

// front-end display

function protected_files_field_display( $field ) {

  // update paths accordingly before displaying link to file
  add_filter( 'upload_dir', 'protected_upload_directory' );

  return $field;

}

Utilisé avec un champ de répéteur, les liens de fichier de sortie comme celui-ci:

       // check if the repeater field has rows of data
        if( have_rows('protected_uploads') ):

            // loop through the rows of data
            while ( have_rows('protected_uploads') ) : the_row(); 
            $file_url = get_sub_field('protected_files'); 
        ?>

           <p><a href="<?php echo $file_url; ?>">
                <?php the_sub_field('date'); ?> Appendix</a>
           </p>

* EDIT *

Supprimer cette ligne n'a aucun effet sur rien du tout:

$param['subdir'] = $folder;

* EDIT 2 *

J'ai essayé de changer $ param en WP_PLUGIN_DIR et WP_PLUGIN_URL. Encore une fois, cela afficherait les URL correctes dans le back-end (maintenant changé dans le répertoire/plugins/au lieu de/uploads /), mais curieusement, sur le front-end, tous les liens de fichiers pointent vers domain.com/wp-content/ uploads/fichier.pdf

Ce qui confirme qu'il est défini par le bit upload_dir dans la deuxième partie. Donc, je l'ai en quelque sorte réduit. Avec quoi devrait-il être remplacé pour obtenir le répertoire de téléchargement réel? À ce stade, je serais d'accord avec même coder en dur l'emplacement des fichiers téléchargés.

1
Phantasmix

Résolu d'une manière complètement différente. Googlé cela, donc techniquement pas ma propre réponse, mais fait le travail:

// ACF upload prefilter
   function Gist_acf_upload_dir_prefilter($errors, $file, $field) {

// This filter changes directory just for item being uploaded
   add_filter('upload_dir', 'Gist_acf_upload_dir');
}

// ACF hook, set to field key of your file upload field
   add_filter('acf/upload_prefilter/key=field_5b2b0326ea0e1', 'Gist_acf_upload_dir_prefilter');
// Custom upload directory function Gist_acf_upload_dir($param) {

// Set to whatever directory you want the ACF file field to upload to
$custom_dir = '/uploads/member-files';
$param['path'] = WP_CONTENT_DIR . $custom_dir;
$param['url'] = WP_CONTENT_URL . $custom_dir;
return $param;
}
0
Phantasmix