WordPress'e yönlendirme nasıl çalışır?


13

Çekirdek wp yönlendirmesi nasıl çalışır? Anlamakta zorlanıyorum ... MVC'de URL'niz MyController-> myaction () ile eşleşen mycontroller / myaction gibi görünüyor

Drupal'da, tema düzeninize "temalı" bir içerik döndüren, istediğiniz herhangi bir işleve eşleştirilebilen index.php? Q = mycustomerpath / hello.

Ama wp, ben işler nasıl yapılır hiçbir ipucu var ... bu? P = 1 sonra? Ürün = 1 ... Yönlendirme akışının belgelerini aradım ama herhangi bir bulamıyorum (google sadece özel makaleleri döndürür Öncelikle çekirdek yönlendirmenin temellerini anlamak istiyorum.


kod kazma, ben sorgu_posts çağırır her istek görmek? neden her seferinde gönderileri sorgulamak gerekiyor? gerçekten yayınları görüntülemek istemediğiniz durumlar yok ??
yeahman

1
İçindekiler WP'ye posta olarak kaydedilir. Yani, içeriği göstermeniz gerektiğinde bunu sorgulamanız gerekir
Sisir

WordPress'in nasıl çalıştığını bilmek için anlamanız gereken kavram olan "döngü" hakkında okumanızı öneririm. Temel "döngü", sorgu_postlarının sonucu olan bir dizi yayını görüntüler. Yönetici olmayan URL istekleri için WP yalnızca yayınları göstermek üzere tasarlanmıştır ve bir gönderinin yanında bir şey göstermek için özel programlama gerektirir. Yönetici URL istekleri farklıdır ve bunlar "döngü" kullanmaz ve yayın olmayan şeyleri gösterir.

tamam ama bu yaklaşım biraz garip ve çok esnek değil tbh
yeahman

Ben bir iletişim formu görüntülemek istiyorum demek .. html bir sayfa içerik türü koymak gerekir? Hala form gönderme için mantığı nereye koymaya çalışıyorum ... (tema page.php? Çok çirkin bir yaklaşım)
evet

Yanıtlar:


20

WordPress'te URL'ler rotalarla eşleşmez. Veritabanı sorgularıyla eşlenirler.

WordPress'i "varsayılan" kalıcı bağlantı modunda kullanırken, ana URL sorgusunda? P = 1 veya? Sayfa = 234 gibi bir dizi değişkeniniz vardır. Ayrıca? S = arama ve diğerleri de var.

"Güzel" kalıcı bağlantılar kullanırsanız, çeşitli URL kalıplarını doğrudan aynı URL parametreleri kümesiyle eşleyen "yeniden yazma kuralları" adı verilen büyük bir kural kümesi oluşturulur. / 2014/04/12 / example gibi bir URL? Yıl = 2014 & ay = 04 & gün = 12 & postname = örnek veya benzeri ile eşlenir. Dolayısıyla, bu haritalama yapıldıktan sonra, aşağıdakiler için de geçerlidir.

Bu değişkenler esasen WP_Query sınıfının ana örneğini kontrol etmektedir. WP_Query sınıfı, veritabanından "gönderiler" almak için veritabanı sorgusunu oluşturan tüm bilgileri tutar. İçine geçirilen çeşitli parametreler, ne tür bir sorgu oluşturduğunu ve hangi verileri aldığını kontrol eder.

Bakın, WordPress tarafından görüntülenebilecek her şey aslında bir "gönderi" dir. Blog ters zamana dayalı bir dizi gönderi. "Sayfa", tanımlı ada sahip statik bir gönderidir. "Özel gönderi türü" tam olarak göründüğü gibi, tanımladığınız özel türde bir "gönderi" dir. WordPress'te bir şey görüntülemek için tüm ana sorgular, wp_posts tablosundan yayınların bazı alt kümesini alıyor.

WP_Query bunu yapar. Ve URL'deki parametreler doğrudan bu ana sorguya gönderilir ve orada kullanılır.

Tema daha sonra sorgunun geri döndüğüne göre hangi şablonu kullanacağını belirler. / Category / example isteğinde bulunmuş olsaydınız, bu? Category_name = example olur, bu da ana $ wp_query-> query_vars dizisinin bu bilgiyi alacağı ve WP_Query'nin "example" kategorisi için son X gönderilerini çekeceği anlamına gelir ve is_category bayrağını true olarak ayarlar.

Şablon yükleyici bundan sonra çalışır, is_category () öğesinin true değerini döndürür ve kategori şablonunu seçmeye karar verir, böylece Template-example.php öğesini arar ve Template'e göre category.php'ye döner. Hiyerarşi.

Dolayısıyla, URL'lerin çalışma şeklini değiştirmek isteyip istemediğiniz soru basittir: URL'leri mi değiştirmek istiyorsunuz veya neyle eşleştirildiniz? URL'ler işlevlerle eşlenmediğinden, sorguyu denetleyen parametrelere eşlenirler. URL'nin bu ana sorguyu ayarlamasını istiyorsanız, özel bir URL'nin tamamen diğer bazı özel kodları çalıştırmasını istediğinizden biraz farklı bir işlemdir.

Ve yorumlarınızda özel sorunuza cevap vermek için: "gerçekten yayın görüntülemek istemediğiniz durumlar yok mu?" Hayır yok. Her şey bir gönderi. Tüm içerik yayınlarda saklanır. İçeriği başka bir yerde saklamak ve farklı olmak istiyorsanız, bunu yapabilirsiniz, ancak daha zor çünkü dürüst olmak gerekirse, genellikle gerekli değildir. Özel içeriğiniz varsa, özel bir gönderi türü oluşturun, içeriğinizi bu tür bir gönderi olarak saklayın, bir URL kalıbı ile eşleyin. Kolay.


Her şeyin drupal 6'daki özel türlere çok benzeyen bir yayında (özel gönderi türleri vb. Yoluyla) temsil edilmesi gerektiğini anlıyorum ... ancak sitenin her içeriğini depolamak için tek bir gönderi tablosuna sahip performansı etkiler mi? drupal 7, varlık türünü tanıtarak çözdü, böylece özel bir tür oluşturmanız ve her şeyi düğüm tablosunda değil de drupal çerçevesinden kaldırabilecek kendi varlık tablonuzda saklamanız gerekmez. Umarım wordpress gelecekte böyle bir yaklaşım getirir. detaylı açıklama için teşekkürler.
yeahman

kendi işlevi / tema için bir url eşlemek istiyorsanız, wp yönlendirici yardımcı olur sanırım?
yeahman

Tam bir yönlendirme sistemi eklemek genellikle gerekli değildir. Daha basit yollar var. WordPress'in temeli, tümü yayınlar tablosunda depolanan kullanıcı tarafından oluşturulan içeriği görüntülemektir. Kullanıcı tarafından oluşturulmayan içeriği görüntülemek istiyorsanız, genellikle temada veya bir eklentide yaparsınız. Sayfa oluşturulurken yüzlerce (binlerce) işlem kancası ve filtresi ve kodun sürecin çeşitli bölümlerini geçersiz kılması için başka yollar vardır. Kısa kodlar gibi şeylerle, içeriğe özel html eklemek nispeten kolaydır.
Otto

Oluşturduğum yazı türüne nasıl özel html / php ekleyebilirim? temanın single.php'sini değiştirmeden veya tek bir
mycustompost.php

7
1 yıldan fazla bir süredir wordpress ile çalıştıktan sonra ... Hala buna ikna olmadım ... çerçeve zarif ve çirkin değil ... Basit bir blog olarak çalışır, ancak diğer web sitesi türlerini geliştirmek istiyorsanız. Bu, yapılması gerekmeyen bir şeyi yapmak için wordpress'i hacklemek.
yeahman
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.