web-dev-qa-db-fra.com

Comment convertir le chemin du fichier en une URL du même fichier?

Comment convertir le chemin du système de fichiers en URL? J'ai trouvé des solutions générales PHP susceptibles de générer des erreurs.

Existe-t-il un moyen spécifique à WordPress de le faire?

2
Boykodev

Le genre de dépend de l'endroit où vous vous trouvez dans l'environnement WordPress.

Plugins

Si vous êtes dans un plugin, vous pouvez utiliser plugins_url .

<?php
$url = plugins_url('css/admin.css', __FILE__);

Ce qui précède vous donnera le chemin relatif au fichier passé dans le deuxième argument. Donc, si vous êtes dans le fichier de plugin principal, vous obtiendrez peut-être quelque chose comme http://example.com/wp-content/plugins/your-plugin/css/admin.css.

Il y a aussi plugin_dir_url pour obtenir l'URL d'un répertoire. Un modèle assez courant consiste à définir une constante avec votre URL de plugin dans le fichier de plugin principal.

<?php
/** plugin name: wpse216913 example */
define('WPSE216913_PLUGINURL', plugin_dir_url(__FILE__));

// wp_enqueue_style('example', WPSE216913_PLUGINURL.'css/admin.css');

Des thèmes

Les thèmes, par contre, devraient utiliser get_template_directory_uri ou get_stylesheet_directory_uri .

get_template_directory_uri renverra l'URI du répertoire du thème parent s'il existe un thème parent. get_stylesheet_directory_uri renverra l'URI du thème enfant s'il existe un thème enfant, ou sinon le thème parent. Lisez le codex pour en savoir plus sur les différences. Le thème vingt-quinze présente quelques exemples de leur utilisation.

wp_enqueue_style(
  'twentyfifteen-ie',
  get_template_directory_uri().'/css/ie.css',
  array('twentyfifteen-style'),
  '20141010'
);

Uploads

Utilisez wp_get_attachment_image_src pour les images téléchargées. La valeur de retour inclura également la largeur et la hauteur de l'image. Cela vous permet également de dire quelle taille vous voulez.

Ou bien il y a wp_get_attachment_url pour récupérer l'URL de la pièce jointe qui a été téléchargée. Si utilisé sur des images, cela renverra l'URL de l'image d'origine.

Si vous avez besoin de l'URL (ou du chemin) du répertoire de téléchargement pour pouvoir effectuer un téléchargement personnalisé ou autre, vous pouvez utiliser wp_upload_dir qui renvoie un tableau contenant toutes les informations dont vous avez besoin.

print_r(wp_upload_dir())
/*
Array
(
    [path] => /path/to/wordpress/wp-content/uploads/2016/02
    [url] => http://example.com/wp-content/uploads/2016/02
    [subdir] => /2016/02
    [basedir] => /path/to/wordpress/wp-content/uploads
    [baseurl] => http://example.com/wp-content/uploads
    [error] => false
)
*/

Autres fonctions utiles sur les URL

Tous ont la même signature, urlFunc($path, $scheme), et les deux arguments sont optionnels.

home_url renvoie un chemin relatif à la page d'accueil du site.

echo home_url('/example'); // http://example.com/example

site_url renvoie une URL relative à l'emplacement des fichiers de base WordPress. Supposons que WordPress soit dans le répertoire wp...

echo site_url('/example'); // http://example.com/wp/example

admin_url renvoie une URL relative au chemin wp-admin. Utile lorsque vous avez besoin du chemin d'accès à admin-ajax.php, par exemple.

echo admin_url('admin-ajax.php');  // http://example.com/wp/wp-admin/admin-ajax.php

Il existe quelques autres, comme content_url et includes_url, qui renvoient les chemins d'accès au contenu WP et incluent les répertoires (ou les chemins relatifs).

8
chrisguitarguy

Ou global

function abs_path_to_url( $path = '' ) {
    $url = str_replace(
        wp_normalize_path( untrailingslashit( ABSPATH ) ),
        site_url(),
        wp_normalize_path( $path )
    );
    return esc_url_raw( $url );
}
7
Serge Liatko

Dans un thème, si vous souhaitez convertir littéralement un chemin de système de fichiers en une URL pour un fichier donné, procédez comme suit:

$url = str_replace( get_stylesheet_directory(), get_stylesheet_directory_uri(), $systempath);

1
Corey C.

Cela devrait fonctionner avec n'importe quel chemin wordpress:

function path_to_url( $path ) {

    return get_site_url() . '/' . str_replace( ABSPATH, '', $path );

}

echo path_to_url( YOUR_PATH_HERE );
0
GDY