Como converter o caminho do arquivo para uma URL do mesmo arquivo?

2

Como faço para converter o caminho do sistema de arquivos para URL? Eu encontrei algumas soluções gerais do PHP que podem ser propensas a erros.

Existe alguma maneira específica do WordPress para fazer isso?

    
por Boykodev 06.02.2016 / 22:17

4 respostas

7

Depende de onde você está no ambiente WordPress.

Plugins

Se você estiver em um plug-in, use plugins_url .

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

O texto acima lhe dará o caminho relativo ao arquivo passado ao segundo argumento. Então, se você estiver no arquivo de plug-in principal, poderá receber algo como http://example.com/wp-content/plugins/your-plugin/css/admin.css .

Há também plugin_dir_url para obter o URL de um diretório. Um padrão bastante comum é definir uma constante com o URL do seu plug-in no arquivo de plug-in principal.

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

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

Temas

Os temas, por outro lado, devem usar get_template_directory_uri ou get_stylesheet_directory_uri .

get_template_directory_uri retornará o URI do diretório do tema pai se houver um tema pai. get_stylesheet_directory_uri retornará o URI do tema filho se houver um tema filho ou o tema do pai, caso contrário. Leia o códice para mais sobre as diferenças. O tema vinte e quinze tem alguns exemplos de como esses são usados.

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

Uploads

Use wp_get_attachment_image_src para as imagens enviadas. O valor de retorno também incluirá a largura e a altura da imagem. Isso também permite dizer qual tamanho você deseja.

Ou wp_get_attachment_url para recuperar o URL do anexo que foi enviado. Se usado em imagens, isso retornará o URL da imagem original.

Se você precisar do URL (ou caminho) do diretório de upload para poder fazer algo como um upload personalizado ou outro, use wp_upload_dir que retorna uma matriz com todas as informações necessárias.

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

Outras funções úteis de URL

Todos eles têm a mesma assinatura, urlFunc($path, $scheme) , e ambos os argumentos são opcionalmente.

home_url retorna um caminho relativo à página inicial dos sites.

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

site_url retorna uma URL relativa a onde estão os arquivos principais do WordPress. Digamos que você tenha o WordPress no diretório wp ...

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

admin_url retorna um URL relativo ao caminho wp-admin . Útil quando você precisar do caminho para admin-ajax.php , por exemplo.

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

Existem alguns outros, como content_url e includes_url , que retornam os caminhos para o conteúdo do WP e incluem diretórios (ou caminhos relativos a eles), respectivamente.

    
por chrisguitarguy 06.02.2016 / 22:53
5

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

Em um tema, se você quiser literalmente converter um caminho do sistema de arquivos em uma URL para um determinado arquivo, faça o seguinte:

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

    
por Corey C. 07.03.2017 / 23:12
0

Isso deve funcionar com qualquer caminho do wordpress:

function path_to_url( $path ) {

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

}

echo path_to_url( YOUR_PATH_HERE );
    
por Johannes Grandy 21.09.2018 / 10:31