Come convertire il percorso del file in URL dello stesso file?

6 feb 2016, 23:17:32
Visualizzazioni: 22.4K
Voti: 7

Come posso convertire un percorso del file system in un URL? Ho trovato alcune soluzioni PHP generiche che possono essere soggette a errori.

Esiste un modo specifico di WordPress per farlo?

0
Tutte le risposte alla domanda 5
4
12

Oppure globale

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 apr 2017 18:26:41
Commenti

Cosa intendi con o globale? Probabilmente sarebbe utile se aggiungessi una spiegazione su cosa fa il tuo codice, perché aiuta a risolvere il problema e come usarlo.

kaiser kaiser
25 apr 2017 21:23:59

Scusa per essere stato troppo breve. Basta incollare la funzione sopra nel tuo codice (ad esempio functions.php) e poi puoi ottenere l'URL dello script dal file php così: $url = abs_path_to_url( dirname(__FILE__) . '/css/styles.css' ); assumendo che la cartella css con il file styles.css sia nella stessa cartella del tuo script.

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

qui globale significa che la funzione sopra funziona sia nei temi che nei plugin

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

Come modifica alla tua risposta, per favore :)

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

Dipende da dove ti trovi nell'ambiente WordPress.

Plugin

Se sei in un plugin, puoi usare plugins_url.

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

Il codice sopra ti darà il percorso relativo al file passato come secondo argomento. Quindi se sei nel file principale del plugin potresti ottenere qualcosa come http://example.com/wp-content/plugins/tuo-plugin/css/admin.css.

C'è anche plugin_dir_url per ottenere l'URL di una directory. Uno schema abbastanza comune è definire una costante con l'URL del plugin nel file principale del plugin.

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

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

Temi

I temi, invece, dovrebbero usare get_template_directory_uri o get_stylesheet_directory_uri.

get_template_directory_uri restituirà l'URI della directory del tema genitore se esiste un tema genitore. get_stylesheet_directory_uri restituirà l'URI del tema figlio se esiste un tema figlio, altrimenti quello del tema genitore. Leggi il codex per maggiori informazioni sulle differenze. Il tema twenty fifteen ha alcuni esempi di come vengono utilizzati.

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

Upload

Usa wp_get_attachment_image_src per le immagini caricate. Il valore restituito includerà anche la larghezza e l'altezza dell'immagine. Questo ti permette anche di specificare la dimensione desiderata.

Oppure c'è wp_get_attachment_url per recuperare l'URL dell'allegato che è stato caricato. Se usato sulle immagini, restituirà l'URL dell'immagine originale.

Se hai bisogno dell'URL (o del percorso) della directory degli upload per fare qualcosa come un caricamento personalizzato o altro, puoi usare wp_upload_dir che restituisce un array con tutte le informazioni di cui avrai bisogno.

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

Altre Funzioni Utili per gli URL

Tutte queste hanno la stessa firma, urlFunc($path, $scheme), e entrambi gli argomenti sono opzionali.

home_url restituisce un percorso relativo alla home page del sito.

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

site_url restituisce un URL relativo a dove si trovano i file core di WordPress. Supponi di avere WordPress nella directory wp...

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

admin_url restituisce un URL relativo al percorso wp-admin. Utile quando hai bisogno del percorso per admin-ajax.php, ad esempio.

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

Ce ne sono alcune altre come content_url e includes_url che restituiscono rispettivamente i percorsi alle directory WP content e includes (o percorsi relativi ad esse).

6 feb 2016 23:53:00
Commenti

Grazie per la spiegazione dettagliata. Inizialmente cercavo una soluzione universale per convertire qualsiasi percorso di file nello stesso URL del file. Ma penso che get_template_directory_uri() farà al caso mio.

Boykodev Boykodev
7 feb 2016 00:05:30
0

Ecco la mia soluzione per questo:

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

In un tema, se vuoi convertire letteralmente un percorso del file system in un URL per un determinato file, dovresti fare così:

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

8 mar 2017 00:12:32
0

Dovrebbe funzionare con qualsiasi percorso di WordPress:

function path_to_url( $path ) {

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

}

echo path_to_url( IL_TUO_PERCORSO_QUI );
21 set 2018 11:31:52