it-swarm.com.de

Zusätzliche "Uploads" im Pfad hinzugefügt

Obwohl dies mit erweiterten benutzerdefinierten Feldern zusammenhängt, verwendet diese Funktion alle nativen WP -Funktionen. Ich denke, dies ist hier angebracht. Woher kommt der zusätzliche Pfad "/ uploads /"?

Im Backend sehe ich korrekte Links zu hochgeladenen Dateien (domain.com/wp-content/member-files/name.pdf), aber im Frontend werden die URLs mit einem zusätzlichen "/ uploads /" in angezeigt Pfad (domain.com/wp-content/uploads/member-files/name.pdf) und erzeugt natürlich eine 404 für die Datei.

// 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;

}

Wird mit einem Repeater-Feld verwendet, werden Dateilinks wie folgt ausgegeben:

       // 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 *

Das Entfernen dieser Linie hat keinerlei Auswirkungen auf Folgendes:

$param['subdir'] = $folder;

* EDIT 2 *

Ich habe versucht, $ param in WP_PLUGIN_DIR und WP_PLUGIN_URL zu ändern. Das würde wieder die korrekten URLs im Back-End anzeigen (jetzt geändert in das Verzeichnis/plugins/anstelle von/uploads /), aber merkwürdigerweise verweisen alle Dateilinks im Front-End auf domain.com/wp-content/ uploads/file.pdf

Was bestätigt, dass es durch das upload_dir-Bit im zweiten Teil gesetzt ist. Also habe ich es irgendwie eingegrenzt. Womit sollte es ersetzt werden, um das eigentliche Upload-Verzeichnis zu erhalten? An diesem Punkt wäre es in Ordnung, den Speicherort der hochgeladenen Dateien sogar hart zu codieren.

1
Phantasmix

Ganz anders gelöst. Das gegoogelt, also technisch nicht meine eigene Antwort, macht aber den Job:

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