WP_Query'deki URL'den özel veriler için uygun akış nedir?


14

Karmaşık kaplamayı WP sorgularına entegre eden çok aşamalı bir işlemim var. Sorun şu ki - ne kadar derin bulanıklaşırsa, nasıl çalışması gerektiği konusunda daha fazla olurum ve yaratıcı olmak (ve kendimi bir delik kazmak) yerine bir rehber kullanabilirim.

Genel aşamaları var (sözde kod, ancak gerçek yakın):

  1. URL'den değer al (basit bir şey gibi person=1)
  2. değeri işleme ve özel sorgu talimatları ekleme ( $relationship_query[] = array('relationship' => 'person_to_cat', 'object' => 1 );)
  3. son özel sorgu talimatlarını alın ve uygun SQL yönergelerini oluşturun

Şimdiye kadar böyle bir çok şey var (ilişkiler, taksonomiler, tarihler) ve kırılgan hale geliyor (kodun bir köşesi, kodun diğer köşesinin bulmasını beklediği ve her şey parçalandığı yerde değer vermez).

Yani büyük soru - özel verileri URL yoluyla WP'ye aktarmak, almak, depolamak ve işlemek için uygun protokol nedir?

Daha küçük parçalar:

  • WP internals ile çarpışmadığımı nasıl garanti ederim?
  • aracı verileri nerede ve nasıl saklarım?
    • queryve query_varsözellikleri arasındaki fark nedir? Kodda hemen hemen aynı kullanılmış gibi görünüyorlar, ancak farklı değerleri ve yöntemleri tutmaya eğilimlidirler query_vars.

Yanıtlar:


6

Aradığınız WP işlevinin add_rewrite_tag olduğunu düşünüyorum . URL'nize özel GET parametreleri eklemeyi ve URL'yi otomatik olarak eklemeyi amaçlamaktadır query_vars.

Örneğin, başlangıç ​​kancasına aşağıdakileri ekleyebilirsiniz:

add_rewrite_tag('%person%','([^&]+)');

Gibi bir url için http://example.com?person=joe , küresel $wp_queryolacaktır

$wp_query->query_vars['person'] = 'joe'

URL'yi daha güzel hale getirmek için bir yeniden yazma kuralı da ekleyebilirsiniz , örneğin http://example.com/person/joe

add_rewrite_rule('^person/([^/]*)/?','index.php?person=$matches[1]','top');

Daha fazla bilgi ve örnek için Yeniden Yazma API'sına bakın .


2
Ben tüm ilgili kod üzerinden okumak için (sonunda) biraz zaman buldum WPve WP_Queryorada neler bir çok şey varken ve ben düşünüyorum add_rewrite_tag()özel sorgu var WP haberdar etmek ve onunla iyi oynamak için en özlü şekilde görünüyor.
Rarst

1
  1. Ayrılmış sorgu_varlarını kontrol etmek için wp-include / class-wp.php dosyasına bakın
  2. Aracı verilerle ne demek istediğinizden emin değilim. Biraz daha fazla açıklayabilir misin?
  3. WP, URL'de sorgu olarak çevrilen bir sorgu_dizisine dayalı olarak sayfayı yükler, daha sonra hangi sorgu_varının kullanıldığını belirlemek için WP_Query tarafından işlenir.

Örnek: /? Pagename = about içeren bir sayfa yükleyerek WP, sorgu dizesini işler ve kullanılan query_var'ın page_id olduğunu bulur.

Başka bir örnek: /? Cat = 1, /? Category_name = kategorize edilmemiş ve / kategori / kategorize edilmemiş aynı query_var 'cat'


0

Bunun $_GETve / veya yoluyla yapıldığını varsayardım $_POST, sonra buna göre manipüle ederdim .

Alternatif olarak, büyük veri demetini db'de saklayın ve sonra URL'ye bir kimliği ayrıştırın

$data_id = $_GET['id'];

$data = $wpbd->get_results("SELECT * FROM wp_epic_table WHERE id=".$id);

Sorgu o kadar basit olmayacak, çok fazla birleştirme ve birleştirme tabloları içerebilir. Sayfalarımdan birinde yaptığım şey bu, benzersiz bir kimliği ayrıştırıp MySQL ile veri oluşturmak.

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.