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.
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;
}