Bagaimana cara agar URL halaman saat ini ditampilkan?

56

Saya ingin menambahkan kode PHP khusus untuk memastikan bahwa setiap kali halaman di situs saya dimuat di browser saya, URL dari halaman itu bergema ke layar. Saya dapat menggunakan echo get_permalink(), tetapi itu tidak berfungsi pada semua halaman. Beberapa halaman (mis. Beranda saya ) menampilkan beberapa posting, dan jika saya gunakan get_permalink()pada halaman-halaman ini, URL dari halaman yang ditampilkan tidak dikembalikan (saya percaya ini mengembalikan URL dari posting terakhir dalam loop). Untuk halaman ini, bagaimana saya bisa mengembalikan URL?

Dapatkah saya memasang get_permalink()kait tertentu yang menyala sebelum loop dijalankan? Atau bisakah saya keluar dari loop, atau meresetnya setelah selesai?

Terima kasih.

cag8f
sumber
Bisakah Anda memberikan beberapa konteks tentang apa yang ingin Anda lakukan dengan URL ini? Apakah Anda mencoba membuat URL yang dapat dibagi? Merakit URL khusus untuk tautan / tindakan?
Tom J Nowell
@ TomJNowell Saya ingin membuat skrip JS tertentu, tetapi hanya pada halaman tertentu (dalam hal ini, halaman tersebut adalah beranda situs saya dalam berbagai bahasa: example.com , example.com/fr , example.com/es , dll). File JS akan server untuk menambahkan hyperlink ke beberapa judul yang hanya muncul di beranda.
cag8f
mengapa tidak hanya menggunakan is_home()atau is_page( 'fr' )dll dan hanya enqueue skrip jika itu benar?
Tom J Nowell
@ TomJNowell Nah sekarang kodeku adalah if ( home_url( $wp->request ) == home_url() ) { wp_enqueue_script();} ini Tampaknya menyala di setiap halaman rumah, terlepas dari bahasa. Apakah itu yang Anda sarankan?
cag8f
Mengapa tidak menggunakan $_SERVER['REQUEST_URI']dan menemani? Lihat pertanyaan ini: stackoverflow.com/q/6768793/247696
Flimm

Jawaban:

88

get_permalink() hanya sangat berguna untuk satu halaman dan posting, dan hanya berfungsi di dalam loop.

Cara paling sederhana yang pernah saya lihat adalah ini:

global $wp;
echo home_url( $wp->request )

$wp->requesttermasuk bagian jalur URL, mis. /path/to/pagedan home_url()menghasilkan URL di Pengaturan> Umum, tetapi Anda dapat menambahkan jalur ke sana, jadi kami menambahkan jalur permintaan ke URL beranda dalam kode ini.

Perhatikan bahwa ini mungkin tidak akan berfungsi jika Permalinks disetel ke Plain, dan akan menghilangkan string kueri ( ?foo=barbagian dari URL).

Untuk mendapatkan URL saat permalink diatur ke polos, Anda dapat menggunakannya $wp->query_vars, dengan meneruskannya ke add_query_arg():

global $wp;
echo add_query_arg( $wp->query_vars, home_url() );

Dan Anda dapat menggabungkan kedua metode ini untuk mendapatkan URL saat ini, termasuk string kueri, terlepas dari pengaturan permalink:

global $wp;
echo add_query_arg( $wp->query_vars, home_url( $wp->request ) );
Jacob Peattie
sumber
7
Jika permalinks diatur untuk polos: echo '//' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];.
Max Yudin
1
@ Jacob saya mencobanya, tetapi sepertinya hanya mengembalikan URL beranda saya. Seperti yang Anda lihat di kiri atas halaman ini ( dev.horizonhomes-samui.com/properties/hs0540 ), tempat saya telah memasukkan kode echo home_url( $wp->request ). Saya telah memastikan untuk memasukkan global $wpjuga. Permalink bukan 'Biasa', tetapi disetel ke 'Nama Posting'. Saya juga tidak melihat kesalahan PHP yang relevan di log. Halaman khusus ini adalah bagian dari situs dev saya, yang sebaliknya diblokir untuk pengunjung. Saya tidak yakin apakah itu penting atau tidak. sunting: Sebenarnya, pegang pemikiran itu - bisa jadi kesalahan pengguna.
Bersiaplah
@ Jacobs edit 2: OK kode Anda memang berfungsi. Masalah saya adalah bahwa saya memasukkan kode dalam functions.php 'telanjang,' yaitu tidak dalam fungsi apa pun yang dilampirkan pada sebuah kail. Jadi kode Anda mengembalikan URL beranda, terlepas dari halaman yang ditampilkan di browser saya. Setelah saya memindahkan kode di dalam fungsi - fungsi yang dilampirkan ke kait WP (wp_enqueue_scripts), itu memang mengembalikan URL halaman yang ditampilkan. Apakah Anda tahu alasan perilaku itu? Mungkin saya perlu membuat pertanyaan baru untuk itu.
cag8f
3
@ cag8f Jika kode duduk "telanjang" di functions.php maka Anda menjalankannya sebelum semua properti objek $ wp telah diatur. Ketika Anda membungkusnya dalam suatu fungsi yang terpasang pada hook yang sesuai maka Anda menunda eksekusi sampai titik yang sesuai dalam menjalankan kode Wordpress.
Andy Macaulay-Brook
Semua metode ini luar biasa, dan ide bagus untuk bekerja dengan WordPress. Anda mungkin menambahkannya trailingslashit(), tergantung pada kebutuhan Anda.
Jake
8

Anda dapat menggunakan kode di bawah ini untuk mendapatkan seluruh URL saat ini di WordPress:

global $wp;
$current_url = home_url(add_query_arg(array(), $wp->request));

Ini akan menampilkan path lengkap, termasuk parameter kueri.

penyelamatan1155
sumber
Hai - jika Anda melihat developer.wordpress.org/reference/functions/add_query_arg Anda akan melihat bahwa kode Anda tidak benar-benar mempertahankan parameter kueri yang ada.
Andy Macaulay-Brook
2
Untuk mempertahankan parameter kueri, Anda harus mengganti yang kosong array()dengan $_GET. yaitu:home_url(add_query_arg($_GET,$wp->request));
Brad Adams
Ini tidak akan berfungsi jika WordPress diinstal di subdirektori
ManzoorWani
1
function current_location()
{
    if (isset($_SERVER['HTTPS']) &&
        ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
        isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
        $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
        $protocol = 'https://';
    } else {
        $protocol = 'http://';
    }
    return $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
}

echo current_location();
Shree Sthapit
sumber
Bisakah Anda menjelaskan bagaimana dan mengapa kode ini menyelesaikan pertanyaan?
Kero
Menurut saya solusi yang paling fleksibel. Ini berfungsi pada halaman WP apa saja (bahkan pada wp-admin, wp-login.php, halaman arsip, dll). Perhatikan saja, bahwa itu tidak termasuk params URL
Philipp
1

Kode berikut akan memberikan URL saat ini:

global $wp;
echo home_url($wp->request)

Anda dapat menggunakan kode di bawah ini untuk mendapatkan URL lengkap beserta parameter kueri.

global $wp;  
$current_url = home_url(add_query_arg(array($_GET), $wp->request));

Ini akan menampilkan path lengkap, termasuk parameter kueri. Ini akan mempertahankan parameter kueri jika sudah ada di URL.

Adiyya Tadikamalla
sumber
Cuplikan ini melompati wp-admin/plugins.phpURL saya saat ini, itu hanya path root dan string kueri.
Ryszard Jędraszyk
0

Ini adalah cara contoh yang ditingkatkan yang disebutkan sebelumnya. Ini berfungsi ketika URL cantik diaktifkan namun dibuang jika ada parameter kueri seperti / page-slug /? Param = 1 atau URL jelek sama sekali.

Contoh berikut akan bekerja pada kedua kasus.

    $query_args = array();

    $query = wp_parse_url( $YOUR_URL );

    $permalink = get_option( 'permalink_structure' );

    if ( empty( $permalink ) ) {

        $query_args = $query['query'];

    }

    echo home_url( add_query_arg( $query_args , $wp->request ) )
Tolginho
sumber
0

Mungkin wp_guess_url()itulah yang Anda butuhkan. Tersedia sejak versi 2.6.0.

Mengalir
sumber
Ini hanya menebak URL dasar. Di frontend, Anda berakhir dengan efek yang mirip dengan home_url().
Jake
0

Kenapa tidak pakai saja?

get_permalink(get_the_ID());
Dario Zadro
sumber