Apa aliran yang sesuai untuk data khusus dari URL di WP_Query?

14

Saya memiliki beberapa tahap proses yang mengintegrasikan faceting kompleks ke dalam pertanyaan WP. Masalahnya adalah - semakin dalam saya semakin fuzzy saya tentang bagaimana seharusnya bekerja dan saya bisa menggunakan pedoman daripada menjadi inventif (dan menggali lubang sendiri).

Tahap umum yang saya miliki (pseudo-code, tetapi hampir nyata):

  1. mengambil nilai dari URL (sesuatu yang sederhana seperti person=1)
  2. nilai proses dan tambahkan instruksi permintaan khusus ( $relationship_query[] = array('relationship' => 'person_to_cat', 'object' => 1 );)
  3. mengambil instruksi permintaan akhir kustom dan menghasilkan arahan SQL yang sesuai

Sekarang saya memiliki banyak hal yang terjadi (hubungan, taksonomi, tanggal) dan itu menjadi rapuh (satu sudut kode tidak memberikan nilai di mana sudut kode lain mengharapkannya untuk menemukan dan semuanya terpisah).

Jadi pertanyaan besar adalah - protokol apa yang tepat untuk meneruskan, menerima, menyimpan, dan memproses data khusus ke WP melalui URL ?

Bagian yang lebih kecil:

  • bagaimana cara memastikan saya tidak bertabrakan dengan WP internal?
  • di mana dan bagaimana saya menyimpan data perantara?
    • perbedaan antara querydan query_varsproperti? Mereka tampaknya digunakan hampir sama dalam kode, namun mereka cenderung memiliki nilai dan metode yang berbeda query_vars.
Jarang
sumber

Jawaban:

6

Saya pikir fungsi WP yang Anda cari adalah add_rewrite_tag . Itu bertujuan untuk menambahkan paret GET kustom ke URL Anda dan memasukkannya secara otomatis di query_vars.

Misalnya, Anda bisa menambahkan yang berikut ke init hook:

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

Untuk url seperti http://example.com?person=joe , global $wp_queryakan memilikinya

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

Anda juga dapat menambahkan aturan penulisan ulang untuk membuat URL lebih cantik, misalnya http://example.com/person/joe

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

Lihat API Menulis Ulang untuk informasi dan contoh lebih lanjut.

Fabien Quatravaux
sumber
2
Saya menemukan beberapa waktu (pada akhirnya) untuk membaca semua kode yang relevan WPdan WP_Querydan sementara ada banyak hal yang terjadi di sana, saya pikir itu add_rewrite_tag()cara yang paling ringkas untuk membuat WP mengetahui var permintaan kustom dan bermain baik dengannya.
Jarang
1
  1. Lihat wp-include / class-wp.php untuk memeriksa query_vars yang dipesan
  2. Saya tidak yakin apa yang Anda maksud dengan data perantara. Bisakah Anda menjelaskan lebih lanjut?
  3. WP memuat halaman berdasarkan query_string pada URL yang diterjemahkan sebagai query, mereka kemudian diproses oleh WP_Query untuk menentukan query_var mana yang sedang digunakan.

Contoh: dengan memuat halaman dengan /? Pagename = about, WP akan memproses string kueri dan menemukan query_var yang digunakan adalah page_id.

Contoh lain: /? Cat = 1, /? Category_name = uncategorized dan / category / uncategorized memiliki query_var 'cat' yang sama

AriePutranto
sumber
0

Saya akan mengira itu dilakukan melalui $_GETdan / atau $_POST, kemudian memanipulasi sesuai.

Bergantian, simpan kumpulan data dalam db kemudian parsing id ke url seperti itu

$data_id = $_GET['id'];

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

Query jelas tidak akan sesederhana itu, mungkin melibatkan banyak bergabung dan bergabung dengan tabel. Itulah yang saya lakukan di salah satu halaman saya, parsing id unik lalu buat data melalui MySQL.

Joshua
sumber