¿Cómo convertir la ruta del archivo a una URL del mismo archivo?

6 feb 2016, 23:17:32
Vistas: 22.4K
Votos: 7

¿Cómo convierto la ruta del sistema de archivos a una URL? He encontrado algunas soluciones generales en PHP que pueden ser propensas a errores.

¿Existe alguna forma específica de hacerlo en WordPress?

0
Todas las respuestas a la pregunta 5
4
12

O 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 );
}
25 abr 2017 18:26:41
Comentarios

¿Qué quieres decir con o global? Probablemente ayudaría si incluyeras una explicación de lo que hace tu código, por qué ayuda a resolver el problema y cómo usarlo.

kaiser kaiser
25 abr 2017 21:23:59

Hola, disculpa por ser demasiado breve. Simplemente pega la función anterior en tu código (por ejemplo, en functions.php) y luego puedes obtener la URL del script desde el archivo PHP así: $url = abs_path_to_url( dirname(__FILE__) . '/css/styles.css' ); asumiendo que la carpeta css con el archivo styles.css está en la misma carpeta que tu script.

Serge Liatko Serge Liatko
29 may 2017 23:02:39

aquí global significa que la función anterior funciona tanto en temas como en plugins

Serge Liatko Serge Liatko
29 may 2017 23:07:28

Como edición a tu respuesta, por favor :)

kaiser kaiser
30 may 2017 07:57:06
1
11

Depende de dónde te encuentres dentro del entorno WordPress.

Plugins

Si estás en un plugin, puedes usar plugins_url.

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

Lo anterior te dará la ruta relativa al archivo pasado como segundo argumento. Así que si estás en el archivo principal del plugin, podrías obtener algo como http://ejemplo.com/wp-content/plugins/tu-plugin/css/admin.css.

También existe plugin_dir_url para obtener la URL de un directorio. Un patrón bastante común es definir una constante con la URL de tu plugin en el archivo principal del plugin.

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

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

Temas

Los temas, por otro lado, deben usar get_template_directory_uri o get_stylesheet_directory_uri.

get_template_directory_uri devolverá el URI del directorio del tema padre si existe uno. get_stylesheet_directory_uri devolverá el URI del tema hijo si existe uno, o del tema padre en caso contrario. Consulta el codex para más diferencias. El tema twenty fifteen tiene algunos ejemplos de cómo se usan.

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

Subidas

Usa wp_get_attachment_image_src para imágenes subidas. El valor de retorno también incluirá el ancho y alto de la imagen. Esto también te permite especificar qué tamaño deseas.

O está wp_get_attachment_url para obtener la URL del adjunto que se subió. Si se usa en imágenes, devolverá la URL de la imagen original.

Si necesitas la URL (o ruta) del directorio de subidas para hacer algo como una subida personalizada o similar, puedes usar wp_upload_dir que devuelve un array con toda la información que necesitarás.

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

Otras Funciones Útiles para URLs

Todas estas tienen la misma firma, urlFunc($path, $scheme), y ambos argumentos son opcionales.

home_url devuelve una ruta relativa a la página de inicio del sitio.

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

site_url devuelve una URL relativa a donde están los archivos núcleo de WordPress. Digamos que tienes WordPress en el directorio wp...

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

admin_url devuelve una URL relativa a la ruta de wp-admin. Útil cuando necesitas la ruta a admin-ajax.php, por ejemplo.

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

Hay algunas otras como content_url y includes_url que devuelven las rutas a los directorios de contenido e includes de WP (o rutas relativas a ellos) respectivamente.

6 feb 2016 23:53:00
Comentarios

Gracias por la explicación detallada. Al principio estaba buscando una solución universal para convertir cualquier ruta de archivo a la misma URL de archivo. Pero creo que get_template_directory_uri() hará el trabajo.

Boykodev Boykodev
7 feb 2016 00:05:30
0

Aquí está mi solución para esto:

function convert_url_to_path( $url ) {
  return str_replace( 
      wp_get_upload_dir()['baseurl'], 
      wp_get_upload_dir()['basedir'], 
      $url
  );
}
27 ago 2019 19:04:41
0

En un tema, si deseas convertir literalmente una ruta del sistema de archivos a una URL para un archivo determinado, harías lo siguiente:

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

8 mar 2017 00:12:32
0

Esto debería funcionar con cualquier ruta de WordPress:

// Función para convertir una ruta de archivo a URL
function path_to_url( $path ) {

    // Obtiene la URL base del sitio y concatena la ruta relativa
    return get_site_url() . '/' . str_replace( ABSPATH, '', $path );

}

// Ejemplo de uso - reemplazar YOUR_PATH_HERE con tu ruta
echo path_to_url( YOUR_PATH_HERE );
21 sept 2018 11:31:52