Mevcut sayfanın URL’sini nasıl gösterebilirim?


55

Sitemdeki bir sayfa tarayıcımda yüklendiğinde, sayfanın URL’sinin ekrana yansımasını sağlamak için özel PHP kodu eklemek istiyorum. Kullanabilirim echo get_permalink(), ancak bu tüm sayfalarda çalışmıyor. Bazı sayfalar (örneğin , ana sayfam ) birkaç gönderi görüntüler ve get_permalink()bu sayfalarda kullanırsam , görüntülenen sayfanın URL’si döndürülmez (döngüdeki son gönderinin URL’sini döndürdüğünü düşünüyorum). Bu sayfalar için URL’yi nasıl iade edebilirim?

get_permalink()Döngü yapılmadan önce ateşleyen belirli bir kancaya bağlayabilir miyim ? Veya bir şekilde döngüden ayrılabilir miyim veya tamamlandığında sıfırlayabilir miyim?

Teşekkürler.


Bu URL ile ne yapmak istediğinize ilişkin bir içerik sunabilir misiniz? Paylaşılabilir URL'ler oluşturmaya mı çalışıyorsunuz? Bağlantılar / eylemler için özel URL'ler birleştirilsin mi?
Tom J Nowell

@TomJNowell Belirli bir JS betiğini kodlamak istiyorum, ancak yalnızca belirli sayfalarda (bu durumda, bu sayfalar sitemin çeşitli dillerde ana sayfasıdır: example.com , example.com/fr , example.com/es , vb). JS dosyası, sadece ana sayfada görünen birçok başlığa köprü eklemek için sunucu oluşturacaktır.
cag8f

neden sadece etc is_home()veya is_page( 'fr' )etc kullanmıyor ve doğru ise sadece betiği sıkıyorsunuz?
Tom J Nowell

@TomJNowell Eh, şimdi kodum şudur: Dilden if ( home_url( $wp->request ) == home_url() ) { wp_enqueue_script();} bağımsız olarak her ana sayfada yangın çıkmaktadır. Önerdiğin şey bu mu?
cag8f

Neden kullanmıyor $_SERVER['REQUEST_URI']ve şirket? Bu soruya bakın: stackoverflow.com/q/6768793/247696
Flimm

Yanıtlar:


86

get_permalink() yalnızca tek sayfalar ve yayınlar için gerçekten yararlıdır ve yalnızca döngü içinde çalışır.

Gördüğüm en basit yol şudur:

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

$wp->requestURL'nin yol bölümünü içerir, örn. /path/to/pageve home_url()URL’yi Ayarlar> Genel’de çıkarır, ancak ona bir yol ekleyebilirsiniz, bu nedenle istek kodunu bu kodda ana URL’ye ekliyoruz.

Bunun muhtemelen Plain'e ayarlanmış Permalinks ile çalışmayacağına ve sorgu dizelerinin ( ?foo=barURL'nin bir kısmı) bırakmayacağına dikkat edin.

Bağlantılar düz olarak ayarlandığında URL’yi almak için $wp->query_vars, bunun yerine aşağıdakileri kullanarak kullanabilirsiniz add_query_arg():

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

Ayrıca, kalıcı bağlantı ayarlarından bağımsız olarak, sorgu dizesi de dahil olmak üzere geçerli URL'yi elde etmek için bu iki yöntemi birleştirebilirsiniz:

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

7
Kalıcı düz ayarlanırsa: echo '//' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];.
Max Yudin,

1
@Jacob Bunu denedim, ancak ana sayfamın URL’sini döndürüyor gibi görünüyor. Gördüğünüz gibi bu sayfanın sol üst köşesinde ( dev.horizonhomes-samui.com/properties/hs0540 ) kod ekledimecho home_url( $wp->request ) . Ben de dahil etmeyi sağladım global $wp. Kalıcı bağlantılar 'Düz' değildir, ancak 'Posta Adı' olarak ayarlanmıştır. Günlükte de PHP ile ilgili herhangi bir hata görmüyorum. Bu sayfa, ziyaretçilerime engellenebilecek olan dev sitemin bir parçası. Bunun önemli olup olmadığından emin değilim. düzenleme: Aslında, bu düşünce tutun - kullanıcı hatası olabilir. Beklemede ...
cag8f

@ Jacob edit 2: Tamam kodunuz gerçekten işe yarıyor. Benim sorunum, kodu "çıplak", yani bir kancaya bağlı hiçbir işleve değil. Yani kodunuz, tarayıcımda görüntülenen sayfa ne olursa olsun, ana sayfanın URL’sini döndürüyordu. Kodu bir fonksiyonun içine taşıdığımda - bir WP kancasına bağlı bir işlev (wp_enqueue_scripts), gerçekten görüntülenen sayfanın URL'sini döndürdü. Bu davranışın nedenini biliyor musunuz? Belki bunun için yeni bir soru oluşturmalıyım.
cag8f

3
@ cag8f Kod, function.php dosyasında "çıplak" durursa, $ wp nesnesinin tüm özellikleri ayarlanmadan önce onu çalıştırıyorsunuzdur. Uygun bir kancaya iliştirilmiş bir fonksiyona sardığınızda, yürütülmesini Wordpress kodunda uygun bir noktaya kadar erteliyorsunuz.
Andy Macaulay-Brook

Bu yöntemlerin hepsi harika ve WordPress ile çalışmak için harika fikirler. trailingslashit()Gereksinimlerinize bağlı olarak, bunlara ekleyebilirsiniz .
Jake

8

Geçerli URL’nin tamamını WordPress’te almak için aşağıdaki kodu kullanabilirsiniz:

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

Bu, sorgu parametreleri de dahil olmak üzere tam yolu gösterecektir.


Merhaba - developer.wordpress.org/reference/functions/add_query_arg adresine bakarsanız, kodunuzun gerçekten mevcut sorgu parametrelerini korumadığını göreceksiniz.
Andy Macaulay-Brook

2
Sorgu parametrelerini korumak için boş değiştirmek gerekiyordu array()ile $_GET. yani:home_url(add_query_arg($_GET,$wp->request));
Brad Adams

WordPress alt dizine
kurulursa

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();

Bu kodun soruyu nasıl ve neden çözdüğünü açıklayabilir misiniz?
kero

Bence en esnek çözüm. Herhangi bir WP sayfasında (hatta wp-admin, wp-login.php, arşiv sayfaları, vb.) Çalışır. Sadece, herhangi bir URL paragrafı içermediğine dikkat edin
Philipp

1

Aşağıdaki kod geçerli URL’yi verecektir:

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

Tam URL'yi sorgu parametreleriyle birlikte almak için aşağıdaki kodu kullanabilirsiniz.

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

Bu, sorgu parametreleri de dahil olmak üzere tam yolu gösterecektir. Bu, zaten URL’de olan sorgu parametrelerini koruyacaktır.


Bu pasaj wp-admin/plugins.php, geçerli URL’mde atlıyor , yalnızca kök yol ve sorgu dizeleri.
Ryszard Jędraszyk

0

Bu daha önce bahsedilen gelişmiş bir örnek yoldur. Güzel URL'ler etkinleştirildiğinde çalışır, ancak / page-slug /? Param = 1 gibi bir sorgu parametresi olup olmadığını veya URL'nin çirkin olup olmadığını atar .

Aşağıdaki örnek her iki durumda da çalışacaktır.

    $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 ) )

0

Belki de wp_guess_url()ihtiyacın olan şeydir. 2.6.0 sürümünden beri kullanılabilir.


Bu sadece temel URL'yi tahmin eder. Ön uçta, buna benzer bir etkiye sahip olursunuz home_url().
Jake

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.