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

2

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

¿Hay alguna forma específica de hacerlo para WordPress?

    
pregunta Boykodev 06.02.2016 - 22:17

4 respuestas

7

El tipo de depende de dónde se encuentre en el entorno de WordPress.

Complementos

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

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

Lo anterior le dará la ruta relativa al archivo pasado al segundo argumento. Entonces, si estás en el archivo principal del complemento, podrías obtener algo como http://example.com/wp-content/plugins/your-plugin/css/admin.css .

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

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

// wp_enqueue_style('example', 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 principal si hay un tema principal. get_stylesheet_directory_uri devolverá el URI del tema secundario si hay un tema secundario, o el tema principal, de lo contrario. Lea el códice para más sobre las diferencias. El veinte quince años de los que es necesario. se utilizan.

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

Subidas

Utilice wp_get_attachment_image_src para las imágenes cargadas. El valor de retorno también incluirá el ancho y la altura de la imagen. Esto también te permite decir qué tamaño quieres.

O hay wp_get_attachment_url para recuperar la URL del archivo adjunto que se cargó. Si se usa en imágenes, esto devolverá la URL de la imagen original.

Si necesita la URL (o ruta) del directorio de carga para poder hacer algo como una carga personalizada o de otra manera, puede usar wp_upload_dir que devuelve una matriz con toda la información que necesitarás.

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

Otras funciones útiles de URL

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

home_url devuelve una ruta relativa a la página de inicio de los sitios.

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

site_url devuelve una URL relativa a la ubicación de los archivos principales de WordPress. Digamos que tenía WordPress en el directorio wp ...

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

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

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

Hay algunos otros como content_url y includes_url que devuelven las rutas al contenido de WP e incluyen directorios (o rutas relativas a ellos) respectivamente.

    
respondido por el chrisguitarguy 06.02.2016 - 22:53
5

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 );
}
    
respondido por el Serge Liatko 25.04.2017 - 17:26
0

En un tema, si quieres convertir literalmente una ruta del sistema de archivos a una URL para un archivo dado, harías esto:

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

    
respondido por el Corey C. 07.03.2017 - 23:12
0

Esto debería funcionar con cualquier ruta de wordpress:

function path_to_url( $path ) {

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

}

echo path_to_url( YOUR_PATH_HERE );
    
respondido por el Johannes Grandy 21.09.2018 - 10:31

Lea otras preguntas en las etiquetas