Cum se convertește calea fișierului în URL-ul aceluiași fișier?

6 feb. 2016, 23:17:32
Vizualizări: 22.4K
Voturi: 7

Cum pot converti calea unui fișier din sistem în URL? Am găsit câteva soluții generale PHP care pot fi predispuse la erori.

Există vreo metodă specifică WordPress pentru a face acest lucru?

0
Toate răspunsurile la întrebare 5
4
12

Sau 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 apr. 2017 18:26:41
Comentarii

Ce înseamnă sau global? Probabil că ar fi de ajutor dacă ai oferi o explicație despre ce face codul tău, de ce ajută la rezolvarea problemei și cum să-l folosești.

kaiser kaiser
25 apr. 2017 21:23:59

Scuze că am fost prea concis. Pur și simplu lipește funcția de mai sus în codul tău (de exemplu în functions.php) și apoi poți obține URL-ul scriptului din fișierul php astfel: $url = abs_path_to_url( dirname(__FILE__) . '/css/styles.css' ); presupunând că folderul css cu fișierul styles.css se află în același director cu scriptul tău.

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

aici global înseamnă că funcția de mai sus funcționează atât în teme, cât și în plugin-uri

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

Ca o modificare la răspunsul tău, te rog :)

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

Depinde de unde te afli în mediul WordPress.

Plugin-uri

Dacă ești într-un plugin, poți folosi plugins_url.

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

Codul de mai sus va returna calea relativă la fișierul transmis ca al doilea argument. Deci, dacă ești în fișierul principal al plugin-ului, vei obține ceva de genul http://exemplu.com/wp-content/plugins/pluginul-tau/css/admin.css.

Există și plugin_dir_url pentru a obține URL-ul unui director. O practică comună este să definești o constantă cu URL-ul plugin-ului în fișierul principal al acestuia.

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

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

Teme

Pe de altă parte, temele ar trebui să folosească get_template_directory_uri sau get_stylesheet_directory_uri.

get_template_directory_uri va returna URL-ul directorului temei părinte, dacă există o temă părinte. get_stylesheet_directory_uri va returna URL-ul temei copil, dacă există o temă copil, sau al temei părinte în caz contrar. Citește codex-ul pentru mai multe detalii despre diferențe. Tema twenty fifteen are câteva exemple despre cum sunt folosite aceste funcții.

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

Încărcări

Folosește wp_get_attachment_image_src pentru imaginile încărcate. Valoarea returnată va include și lățimea și înălțimea imaginii. Aceasta permite și specificarea dimensiunii dorite.

Sau există wp_get_attachment_url pentru a obține URL-ul atașamentului încărcat. Dacă este folosită pe imagini, va returna URL-ul imaginii originale.

Dacă ai nevoie de URL-ul (sau calea) directorului de încărcare pentru a face ceva personalizat, poți folosi wp_upload_dir, care returnează un array cu toate informațiile necesare.

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

Alte Funcții Utile pentru URL-uri

Toate acestea au aceeași semnătură, urlFunc($path, $scheme), iar ambele argumente sunt opționale.

home_url returnează o cale relativă la pagina principală a site-ului.

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

site_url returnează un URL relativ la locația fișierelor de bază WordPress. De exemplu, dacă WordPress este în directorul wp...

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

admin_url returnează un URL relativ la calea wp-admin. Utilă atunci când ai nevoie de calea către admin-ajax.php, de exemplu.

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

Mai există câteva altele precum content_url și includes_url care returnează căile către directoarele de conținut WP și, respectiv, cele incluse (sau căi relative la acestea).

6 feb. 2016 23:53:00
Comentarii

Mulțumesc pentru explicația detaliată. Inițial căutam o soluție universală pentru a converti orice cale de fișier în aceeași adresă URL a fișierului. Dar cred că get_template_directory_uri() va face treaba.

Boykodev Boykodev
7 feb. 2016 00:05:30
0

Iată soluția mea pentru aceasta:

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

Într-o temă, dacă dorești să convertești literalmente o cale de sistem de fișiere într-un URL pentru un anumit fișier, ai face asta:

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

8 mar. 2017 00:12:32
0

Aceasta ar trebui să funcționeze cu orice cale WordPress:

function path_to_url( $path ) {

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

}

echo path_to_url( PATH_TAUA );
21 sept. 2018 11:31:52