web-dev-qa-db-de.com

wie bekomme ich den Pfad zu Bildern im Upload-Ordner, die in einem Plugin verwendet werden sollen?

Ich habe einen Ordner mit Bildern in /wp-content/uploads. Ich habe auch eine Plugin-Datei in /wp-content/plugins. Ich möchte die in /wp-content/uploads gespeicherten Bilder abrufen und in der Plugin-Datei verwenden.

Ich habe versucht

echo'<img src="../../USER_PHOTOS/ronny'" href="#"></img>';

kann mir jemand zeigen, wie ich den Pfad zu diesen Bildern finden kann? Vielen Dank.

5
Ronny

Wenn ich mich nicht irre, können Sie die Funktion wp_uploads_dir folgendermaßen ausprobieren:

$uploads = wp_upload_dir(); 

echo '<img src="' . esc_url( $uploads['baseurl'] . '/USER_PHOTOS/ronny/' ) . '" href="#">';
7
Andy Adams

Leider gibt es einen dokumentierten Bug , bei dem wp_upload_dir() https (ssl) nicht berücksichtigt. Mein Vorschlag ist, einen Wrapper zu schreiben, um das Protokoll aus der zurückgegebenen URL zu entfernen und es an die Umgebung anzupassen:

function wp_upload_dir_url() {
  $upload_dir = wp_upload_dir();
  $upload_dir = $upload_dir['baseurl'];
  return preg_replace('/^https?:/', '', $upload_dir);
};
echo(wp_upload_dir_url() . '/2017/01/my-img.jpg');
// outputs something like '//mysite.test/wp-content/uploads/2017/01/my-img.jpg'
// which is perfectly acceptable as an img src

Wenn Sie sich Sorgen über die Leistung machen, wenn Sie preg_replace() mehrmals verwenden, setzen Sie eine Konstante in Ihrer functions.php-Datei:

define('WP_UPLOAD_DIR_URL', wp_upload_dir_url() . '/');
3
Dan S

Ich habe die Antwort gefunden. Ich habe wp_upload_dir();wordpress codex

1
Ronny

Dies ist, was ich verwendet habe, um auf eine Bilddatei namens "rock_01.jpg" zuzugreifen, die in den WordPress-Ordner "uploads/complete-theme /" hochgeladen wurde.

<?php $upload_dir = wp_upload_dir(); ?>
<img src="<?php echo $upload_dir['baseurl'] . '/complete-theme/rock_01.jpg'; ?>" />

Es hat wie erwartet funktioniert.

0
surya_hs

Dan S weist auf ein Trac-Ticket hin, bei dem wp_upload_dir() https nicht unterstützt. Ich habe nicht festgestellt, dass dies auf meinen Websites der Fall ist, aber wenn es Sie betrifft, können Sie upload_dir einen Filter hinzufügen und das richtige Protokoll basierend auf der Bedingung is_ssl() manuell zurückgeben.

add_filter( 'upload_dir', function( $upload_dir ){
  return array_map( function( $value ) {
    return is_ssl() ?
      str_replace( 'http://', 'https://', $value ) :
      str_replace( 'https://', 'http://', $value );
  }, $upload_dir );
}, 10, 1 );

Dann können Sie wp_upload_dir() weiter verwenden, wie Sie es immer getan haben.

Wie bereits erwähnt hier sollten Sie https: // verwenden, es sei denn, Sie haben spezielle Leistungsprobleme.

0
Nathan Johnson