Bagaimana cara mendapatkan url file php?

Mendapatkan URL halaman saat ini atau file PHP saat ini adalah tugas yang sangat umum. Dan itu tidak luar biasa di WordPress. Sebagai contoh. saat Anda menyertakan plugin dalam tema atau menggunakan compiler LESS PHP. Ada beberapa teknik yang tersedia, tetapi saya menemukan bahwa semuanya tidak cukup baik untuk bekerja di semua situasi, jadi saya harap apa yang saya tulis di posting ini adalah pendekatan yang lebih baik.

Mari kita lihat metode ini sebelum sampai ke solusi akhir

1. Dapatkan URL saat ini melalui $wp->request

Teknik ini diperkenalkan oleh Konstantin Kovshenin. Ini menggunakan

global $wp;
$url = home_url( add_query_arg( [], $wp->request ) );
0 dan
global $wp;
$url = home_url( add_query_arg( [], $wp->request ) );
1 untuk mendapatkan URL halaman saat ini di ujung depan

global $wp;
$url = add_query_arg( $wp->query_string, '', home_url( $wp->request ) );

Cukup bagus jika Anda hanya menginginkan URL untuk halaman saat ini dan di bagian depan. Tidak membantu jika Anda ingin memiliki URL ke file plugin

Versi terbaru dari teknik ini oleh Stephen Harris

global $wp;
$url = home_url( add_query_arg( [], $wp->request ) );

2. Dapatkan URL file PHP saat ini, pendekatan umum

Ada beberapa tutorial di Internet tentang teknik ini, semuanya mirip dengan ini

$url = @$_SERVER['HTTPS'] == 'on' ? 'https://' : 'http://';
if ( $_SERVER['SERVER_PORT'] != '80' ) {
    $url .= $_SERVER['HTTP_HOST'] . ':' . $_SERVER['SERVER_PORT'] . $_SERVER['REQUEST_URI'];
} else {
    $url .= $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
}
_

Atau dengan cara WordPress

$current_url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );

Ini juga bekerja dengan cukup baik. Logikanya mirip dengan metode pertama, berdasarkan permintaan URI, nama server

Tapi itu hanya memiliki satu kelemahan. metode ini hanya berfungsi dengan file PHP yang diminta saat ini. Dan itu benar-benar gagal jika Anda ingin mendapatkan URL ke plugin WordPress (Anda mungkin tidak pernah mengakses file plugin PHP secara langsung, bukan?)

3. Ganti WP_CONTENT_DIR dengan WP_CONTENT_URL

Logikanya sederhana. semua file PHP kami terletak di

global $wp;
$url = home_url( add_query_arg( [], $wp->request ) );
_2 dir, sehingga mengganti
global $wp;
$url = home_url( add_query_arg( [], $wp->request ) );
3 dengan
global $wp;
$url = home_url( add_query_arg( [], $wp->request ) );
4 adalah harapan yang baik untuk mendapatkan URL yang benar

$file = __FILE__; // Current PHP file, but can be anyone
$url = str_replace( WP_CONTENT_DIR, WP_CONTENT_URL, $file );
_

Tentu saja, ini sangat sederhana dan berfungsi dalam banyak kasus. 2 variabel ini diinisialisasi saat WordPress dimuat. Kami tidak perlu mempertimbangkan tentang jalur server, permintaan server, daftar string kueri metode 1 dan 2. Cukup aman

Tapi ada 2 masalah dengan metode ini

  • Di lingkungan Windows, karena ketidakkonsistenan penggunaan garis miring ke belakang (
    global $wp;
    $url = home_url( add_query_arg( [], $wp->request ) );
    5) dan garis miring ke depan (
    global $wp;
    $url = home_url( add_query_arg( [], $wp->request ) );
    6) di jalur oleh WordPress (caranya mendefinisikan konstanta ini tanpa mempertimbangkan masalah ini), fungsi tidak mengembalikan URL yang benar

Kode uji

add_action( 'init', function () {
    $file = __FILE__;
    $url = str_replace( WP_CONTENT_DIR, WP_CONTENT_URL, $file );
    echo
        '<pre>',
        '__FILE__      : ' . $file . '<br>',
        'WP_CONTENT_DIR: ' . WP_CONTENT_DIR . '<br>',
        'WP_CONTENT_URL: ' . WP_CONTENT_URL . '<br>',
        'URL           : ' . $url . '<br>',
        '</pre>'
    ;
    die;
} );

Hasil

__FILE__      : D:\Dropbox\UniServer\www\wp\wp-content\mu-plugins\test.php
WP_CONTENT_DIR: D:\Dropbox\UniServer\www\wp/wp-content
WP_CONTENT_URL: http://localhost:8080/wp/wp-content
URL           : D:\Dropbox\UniServer\www\wp\wp-content\mu-plugins\test.php
  • Masalah kedua berasal dari lingkungan Multisite dengan plugin Pemetaan Domain diinstal. Karena konstanta
    global $wp;
    $url = home_url( add_query_arg( [], $wp->request ) );
    4 didefinisikan melalui fungsi
    global $wp;
    $url = home_url( add_query_arg( [], $wp->request ) );
    8, itu tidak memberi Anda URL yang benar ke folder
    global $wp;
    $url = home_url( add_query_arg( [], $wp->request ) );
    2 di sub-situs

Asumsikan kita memiliki multisite dengan domain utama

$url = @$_SERVER['HTTPS'] == 'on' ? 'https://' : 'http://';
if ( $_SERVER['SERVER_PORT'] != '80' ) {
    $url .= $_SERVER['HTTP_HOST'] . ':' . $_SERVER['SERVER_PORT'] . $_SERVER['REQUEST_URI'];
} else {
    $url .= $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
}
0, dan sub-site dengan domain
$url = @$_SERVER['HTTPS'] == 'on' ? 'https://' : 'http://';
if ( $_SERVER['SERVER_PORT'] != '80' ) {
    $url .= $_SERVER['HTTP_HOST'] . ':' . $_SERVER['SERVER_PORT'] . $_SERVER['REQUEST_URI'];
} else {
    $url .= $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
}
1. Jika kita menjalankan kode tes yang sama seperti di atas, kita akan melihat hasil ini

Di situs utama (benar)

__FILE__      : /var/home/testuser/www/test.com/wp-content/mu-plugins/test.php
WP_CONTENT_DIR: /var/home/testuser/www/test.com/wp-content
WP_CONTENT_URL: http://test.com/wp-content
URL           : http://test.com/wp-content/mu-plugins/test.php

Di subsitus (salah)

__FILE__      : /var/home/testuser/www/test.com/wp-content/mu-plugins/test.php
WP_CONTENT_DIR: /var/home/testuser/www/test.com/wp-content
WP_CONTENT_URL: http://test.com/exam/wp-content
URL           : http://test.com/exam/wp-content/mu-plugins/test.php

4. Solusi akhir (bekerja).

Jika Anda menjalankan situs Anda di lingkungan Linux dan bukan dalam mode Multisite, Anda dapat menggunakan cara ke-3 di atas. Ini pendek dan bekerja seperti pesona

Tetapi jika Anda menginginkan solusi yang berfungsi di semua situasi, coba ini

$file = __FILE__;

// Get correct URL and path to wp-content
$content_url = untrailingslashit( dirname( dirname( get_stylesheet_directory_uri() ) ) );
$content_dir = untrailingslashit( WP_CONTENT_DIR );

// Fix path on Windows
$file = wp_normalize_path( $file );
$content_dir = wp_normalize_path( $content_dir );

$url = str_replace( $content_dir, $content_url, $file );

Pada dasarnya, solusi ini merupakan versi tambahan dari metode ke-3 di atas dengan 2 perbaikan yang telah disebutkan. Silakan coba ini, dan jika Anda memiliki saran atau ide, beri tahu saya melalui komentar

Bagaimana cara mendapatkan ID URL di PHP?

penggunaan php. $id = $_GET['id']; Anda kemudian dapat menggunakan $id di seluruh halaman Anda.

Bagaimana cara mendapatkan URL di akhir PHP?

Dapatkan Segmen URL Terakhir . use array_pop() function in PHP.

Apa itu URL PHP?

Definisi URL PHP. Umumnya, URL berarti Uniform Resource Locater . Demikian juga URL dalam Bahasa Pemrograman PHP juga sama. URL tidak lain adalah alamat situs web. Ini membantu dalam menghubungkan klien dan server saat dijelajahi menggunakan tautan tertentu.