¿Cómo convertir la ruta del archivo a una URL del mismo archivo?
¿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?

¿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.

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.

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

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.

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