Dapatkan URL halaman saat ini (termasuk pagination)


13

Apakah ada fungsi WP untuk secara otomatis mendapatkan URL yang benar dari halaman saat ini? Berarti jika saya baru saja membuka satu posting, fungsinya kembali sama dengan get_permalink(), tetapi jika saya menggunakan contoh halaman yang diberi halaman (ketika membuat halaman komentar-komentar), fungsi mengembalikan sama seperti yang get_pagenum_link(get_query_var('paged'))akan dilakukan.

Saya telah mencari kodeks tetapi tidak menemukan apa yang saya cari. (Tetapi bahkan get_pagenum_link()tidak didokumentasikan di sana.)

Saya sudah tahu tentang fungsi ini , tetapi saya akan senang jika ada fungsi WP "asli" yang berfungsi.

Terima kasih sebelumnya! Salam, René

Jawaban:


27

Selain jawaban Rajeev Vyas, Anda tidak perlu memberikan parameter yang tidak kosong add_query_arg(). Berikut ini selalu bekerja dengan baik untuk saya:

// relative current URI:
$current_rel_uri = add_query_arg( NULL, NULL );

// absolute current URI (on single site):
$current_uri = home_url( add_query_arg( NULL, NULL ) );

Fungsi kembali aktif $_SERVER[ 'REQUEST_URI' ]dan berlaku urlencode_deep()untuk itu. Lihat https://github.com/WordPress/WordPress/blob/3.8/wp-includes/functions.php#L673

Sunting: Sebagai $_SERVER[ 'REQUEST_URI' ]mewakili input pengguna tanpa filter, orang harus selalu keluar dari nilai balik add_query_arg()ketika konteks diubah. Misalnya, gunakan esc_url_raw()untuk penggunaan DB atau esc_attr()atau esc_url()untuk HTML.

Memperbarui

Contoh yang ditampilkan yang harus membuat URI absolut (mengandung skema dan host) tidak berfungsi pada multisite dengan sub-direktori karena home_url()akan mengembalikan URI lengkap termasuk segmen jalur. Solusi yang lebih baik untuk kode sadar multisite adalah:

// absolute URI in multisite aware environment
$parts = parse_url( home_url() );
$current_uri = "{$parts['scheme']}://{$parts['host']}" . add_query_arg( NULL, NULL );

WordPress inti tidak mendukung port, pengguna atau kata sandi dalam URL situs multisite jadi ini sudah cukup.


Frustasi bahwa OP tidak memilih jawaban ini sebagai Solusi, yang mana itu. Terima kasih.
cfx

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

Bukan fungsi, tetapi pasti menggunakan kode wordpress ..

http://kovshenin.com/2012/current-url-in-wordpress/


2
Ini berfungsi sebagian, tetapi beberapa hal tidak berfungsi seperti yang saya inginkan: Parameter suka yearditambahkan ke string kueri, meskipun belum pernah ada sebelumnya, dan parameter lainnya, misalnya replytocomparameter, hilang. Apakah Anda tahu solusi untuk ini?
René Schubert

0

1) $_SERVER['REQUEST_URI']- Ini mengembalikan URL untuk mengakses halaman yang menjalankan skrip. Jika Anda perlu mengetik http://www.example.com/product.php?id=5untuk mengakses halaman kemudian $_SERVER['REQUEST_URI']kembali /product.php?id=5.

2) $_SERVER['DOCUMENT_ROOT']- Mengembalikan direktori root server yang ditentukan dalam file konfigurasi server. Variabel ini biasanya mengembalikan path seperti /usr/yoursite/wwwdi Linux dan D:/xamps/xampp/htdocsdi windows.

3) $_SERVER['HTTP_HOST']- Mengembalikan nama host seperti yang ditemukan di header http. Variabel ini biasanya mengembalikan path seperti example.comketika Anda temukan http://example.comdi bilah alamat browser dan kembali www.example.comketika Anda melihat http://www.example.comdi bilah alamat. Ini sangat berguna ketika Anda harus menyimpan sesi saat melakukan pembayaran online menggunakan PHP karena sesi yang disimpan http://example.comtidak sama dengan untuk http://www.example.com.

4) $_SERVER['HTTP_USER_AGENT']- Mengembalikan detail agen pengguna (browser) yang mengakses halaman web. Kita dapat menggunakan strpos($_SERVER["HTTP_USER_AGENT"],”MSIE”)untuk mendeteksi Microsoft Internet explorer atau Anda dapat menggunakan strpos($_SERVER["HTTP_USER_AGENT"],”Firefox”)untuk mendeteksi browser firefox dalam PHP.

5) $_SERVER['PHP_SELF']- Mengembalikan nama file dari skrip yang sedang dieksekusi. Misalkan Anda sedang mengakses URL http://www.example.com/product.php?id=5lalu $_SERVER['PHP_SELF']kembali /product.phpdalam skrip Anda.

6) $_SERVER['QUERY_STRING']- Mengembalikan string kueri jika string kueri digunakan untuk mengakses skrip yang sedang dieksekusi. String kueri adalah string yang tersedia setelah “?” sign.jika Anda menggunakan $_SERVER['QUERY_STRING']skrip yang mengeksekusi URL berikut, http://www.example.com/index.php?id=5&page=productmaka id=5&page=productskrip tersebut kembali dalam skrip Anda.

7) $_SERVER['REMOTE_ADDR']- Mengembalikan alamat IP mesin jarak jauh yang mengakses halaman saat ini. Tetapi Anda tidak dapat mengandalkan $_SERVER['REMOTE_ADDR']untuk mendapatkan alamat IP asli dari mesin klien. Lihat artikel ini untuk mengetahui cara mendapatkan alamat IP nyata di PHP.

8) $_SERVER['SCRIPT_FILENAME']- Mengembalikan jalur absolut dari file yang sedang dieksekusi. Ia mengembalikan path seperti var/example.com/www/product.phpdi Linux dan path seperti D:/xampp/xampp/htdocs/test/example.phpdi windows.


1
Perlu diingat bahwa tidak ada yang tersedia di CLI Anda dan karenanya tidak berguna untuk pekerjaan cron.
kaiser

0

wp_guess_url adalah apa yang Anda cari.

Tebak URL untuk situs tersebut.

Akan menghapus tautan wp-admin untuk hanya mengambil kembali URL yang tidak ada di direktori wp-admin.


Ini mengembalikan URL yang sama sekali berbeda dari halaman saat ini ketika saya mencoba menggunakannya.
Kirby

0

add_query_args( null, null ) akan membuat elemen array dengan kunci kosong ( $qs[""] = null) meskipun tidak akan memengaruhi hasilnya.


Menurut add_query_arg () | Fungsi | Sumber Daya Pengembang WordPress , parameter ke-2, ke-3 bersifat opsional dan dapat dihilangkan.

add_query_args( null, null )bisa lebih pendek .

$current_url = add_query_args( [] );

Ada juga versi terpendek meskipun tidak direkomendasikan karena parameter 1 adalah parameter yang diperlukan.

$current_url = add_query_args();

Selain itu, perhatikan bahwa keduanya home_url( add_query_vars( [] ) )dan home_url( add_query_arg( null, null ) ) mungkin tidak mengembalikan URL aktual ketika WordPress diinstal di sub-direktori.

mis. https://example.com/wp/wp/foomungkin dikembalikan ketika WordPress diinstal di https://example.com/wp/.


Pembaruan: 2017/01/23

Versi saya berdasarkan pada solusi David untuk mendapatkan URL absolut.

$parts = parse_url(home_url());
$uri   = $parts['scheme'] . '://' . $parts['host'];

if (array_key_exists('port', $parts)) {
    $uri .= ':' . $parts['port'];
}

$uri .= add_query_arg([]);

0

Bagi saya <?php esc_url(the_permalink()); ?>berfungsi (pada halaman arsip dengan pagination).


Mustahil. the_permalink()menggemakan permalink yang lolos, itu tidak mengembalikan apa pun. Tidak esc_url()mendapatkan apa-apa, dan jika mau, itu akan menjadi URL yang lolos.
fuxia

Anda benar, itu berhasil hanya karena caching permalink saya pikir.
Henning Fischer

-1

Saya tidak lagi menggunakan pagination tetapi Anda dapat menggunakan fungsi ini untuk mendapatkan url dalam loop

<?php $ID = get_the_ID(); 
echo get_permalink( $ID ); ?>

Atau jika Anda tidak suka menggunakan php, Anda juga dapat memilih metode jquery di sini (ini akan membantu Anda membuatnya bekerja di luar loop)

$(document).ready(function () {
var vhref = $(location).attr('href');
var vTitle = $(this).attr('title');
$('#spnTitle').html('' + vTitle + '');
$('#spnURL').html('' + vhref + '');
});​

atau jika Anda lebih suka menggunakan fungsi php Anda perlu mendapatkan id di luar loop


1
Maaf, tapi ini bukan yang saya minta ... + the_permalink()tidak perlu id ketika dipanggil di dalam loop.
René Schubert

2
Jawaban ini hampir tidak ada hubungannya dengan pertanyaan awal. Itu tidak menjawab dengan benar juga tidak benar-benar memberikan informasi berharga mengenai topik tersebut.
jounileander

-2

Anda dapat menggunakan fungsi wordpress untuk mendapatkan URL halaman saat ini

the_permalink()

Ini akan mengembalikan Anda tautan URL halaman saat ini.


4
Hampir; the_permalink()akan mencetak URL posting saat ini. Tapi itu tidak akan berfungsi untuk permintaan lain, dan tidak akan memasukkan variabel seperti pagination. Jadi tidak benar-benar jawaban yang dicari @ René Schubert.
TheDeadMedic
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.