Bagaimana cara kerja perutean di wordpress?


13

Bagaimana cara kerja inti wp routing? Saya mengalami kesulitan memahami ... Dalam MVC, url Anda terlihat seperti mycontroller / myaction yang memetakan ke MyController-> myaction ()

Dalam drupal, itu index.php? Q = mycustomerpath / halo yang dapat dipetakan ke fungsi apa pun yang Anda suka yang mengembalikan konten yang "bertema" ke tata letak tema Anda.

Tetapi dalam wp, saya tidak tahu bagaimana hal-hal dilakukan ... itu? P = 1 lalu? Produk = 1 ... Saya telah mencari dokumentasi dari aliran routing tetapi tidak dapat menemukan (google hanya mengembalikan artikel pada custom rute) .. saya ingin memahami dasar-dasar core routing terlebih dahulu ..


menggali dalam kode, saya melihat pada setiap permintaan itu memanggil query_posts? mengapa harus melakukan kueri posting setiap kali? tidakkah ada kasus di mana Anda tidak benar-benar ingin menampilkan tulisan ??
yeahman

1
Konten disimpan sebagai pos di WP. Jadi, ketika Anda perlu menampilkan konten, Anda perlu menanyakannya
Sisir

Bolehkah saya menyarankan Anda membaca tentang "loop" yang merupakan konsep yang perlu Anda pahami untuk mengetahui cara kerja WordPress. Esensial "loop" menampilkan array posting yang merupakan hasil dari query_posts. Untuk permintaan URL non-admin, WP dirancang untuk hanya menampilkan posting dan dibutuhkan pemrograman khusus untuk menampilkan sesuatu selain posting. Permintaan URL Admin berbeda dan ini tidak menggunakan "loop" dan menunjukkan hal-hal yang bukan posting.

ok tapi pendekatan ini agak aneh dan tbh tidak terlalu fleksibel
yeahman

katakanlah saya ingin menampilkan formulir kontak .. saya harus meletakkan html saya di jenis konten halaman? Saya masih berusaha menemukan di mana harus meletakkan logika untuk pengiriman formulir ... (di theme page.php? Pendekatan yang sangat jelek)
yeahman

Jawaban:


20

Di WordPress, URL tidak memetakan ke rute. Mereka memetakan ke permintaan basis data.

Saat menggunakan WordPress dalam mode permalinks "default", Anda memiliki satu set variabel dalam permintaan URL utama, seperti? P = 1 atau? Halaman = 234 dan sebagainya. Ada juga? S = pencarian dan banyak lainnya.

Jika Anda menggunakan permalink "cantik", maka seperangkat aturan besar yang disebut "aturan penulisan ulang" dibuat yang secara langsung memetakan berbagai pola URL ke set parameter URL yang sama. Jadi URL seperti / 2014/04/12 / contoh akan dipetakan ke? Tahun = 2014 & bulan = 04 & hari = 12 & postname = contoh atau serupa. Jadi yang berikut berlaku untuk ini juga, setelah pemetaan ini dilakukan.

Variabel-variabel ini pada dasarnya mengendalikan instance utama dari kelas WP_Query. Kelas WP_Query menampung semua informasi yang membangun kueri basis data untuk mendapatkan "kiriman" dari basis data. Berbagai parameter yang dilewatkan ke dalamnya mengontrol jenis permintaan apa yang dibuatnya dan data apa yang didapatnya.

Lihat, semua yang dapat ditampilkan oleh WordPress pada dasarnya adalah "posting". Blog adalah serangkaian posting dalam urutan berdasarkan waktu terbalik. "Halaman" adalah pos statis dengan nama yang ditentukan. "Tipe posting khusus" persis seperti apa itu, "posting" dengan tipe kustom yang Anda tentukan. Semua kueri utama untuk menampilkan apa pun di WordPress mendapatkan beberapa bagian posting dari tabel wp_posts.

WP_Query adalah apa artinya itu. Dan parameter dari URL dikirim langsung ke permintaan utama itu dan digunakan di sana.

Tema kemudian menentukan templat apa yang akan digunakan berdasarkan pada permintaan apa yang muncul. Jika Anda meminta / kategori / contoh, maka itu menjadi? Category_name = contoh yang berarti bahwa array $ wp_query-> query_vars utama akan mendapatkan informasi itu, dan WP_Query akan mengeluarkan posting X terakhir untuk kategori "example", dan itu akan mengatur flag is_category menjadi true.

Template-loader akan berjalan setelah ini, lihat is_category () mengembalikan true, dan memutuskan untuk memilih templat kategori, sehingga ia akan mencari kategori-example.php dan kembali ke category.php dan seterusnya, sesuai dengan Templat Hirarki.

Jadi, pertanyaannya jika Anda ingin mengubah cara kerja URL itu sederhana: Apakah Anda ingin mengubah URL, atau dipetakan ke mana? Karena URL tidak dipetakan ke fungsi, mereka dipetakan ke parameter yang mengontrol kueri. Jika Anda ingin URL menyesuaikan permintaan utama itu, maka itu proses yang sedikit berbeda daripada jika Anda ingin URL khusus untuk menjalankan beberapa kode khusus yang sama sekali berbeda.

Dan untuk menjawab pertanyaan spesifik Anda di komentar: "tidakkah ada kasus di mana Anda sebenarnya tidak ingin menampilkan tulisan?" Tidak, tidak ada. Semuanya adalah pos. Semua konten disimpan dalam posting. Jika Anda ingin menyimpan konten di tempat lain dan menjadi berbeda, maka Anda dapat melakukannya, tetapi itu lebih sulit karena, jujur, biasanya tidak diperlukan. Jika Anda memiliki konten khusus, buat jenis posting khusus, simpan konten Anda sebagai posting dengan jenis itu, petakan pola URL-nya. Mudah.


Saya mengerti bahwa semuanya harus direpresentasikan dalam sebuah posting (melalui tipe posting kustom dll.) Sangat mirip dengan tipe kustom di drupal 6 ... tetapi apakah itu mempengaruhi kinerja memiliki tabel posting tunggal untuk menyimpan setiap konten situs? drupal 7 menyelesaikannya dengan memperkenalkan tipe entitas sehingga Anda tidak harus membuat tipe kustom dan menyimpan segala sesuatu di tabel simpul tetapi dalam tabel entitas Anda sendiri yang masih dapat memanfaatkan dari kerangka drupal. Saya harap wordpress memperkenalkan pendekatan seperti itu di masa depan. Terima kasih untuk penjelasan terperinci.
yeahman

saya kira jika saya ingin memetakan url ke fungsi / tema saya sendiri, router wp akan membantu?
yeahman

Menambahkan sistem perutean penuh biasanya tidak diperlukan. Ada cara yang lebih sederhana. Dasar dari WordPress adalah untuk menampilkan konten yang dibuat pengguna, yang semuanya disimpan dalam tabel posting. Jika Anda ingin menampilkan konten yang bukan hasil pengguna, maka Anda biasanya melakukannya dalam tema atau dalam sebuah plugin. Ada ratusan (ribuan) kait tindakan dan filter dan cara-cara lain untuk kode untuk menimpa berbagai bagian proses saat halaman dihasilkan. Dan dengan hal-hal seperti shortcode, memasukkan html khusus ke dalam konten relatif mudah.
Otto

bagaimana cara menambahkan html / php khusus ke dalam jenis tulisan yang saya buat? tanpa harus memodifikasi tema single.php atau membuat single-mycustompost.php (bukan pendekatan yang sangat portabel)
yeahman

6
setelah lebih dari 1 tahun bekerja dengan wordpress sekarang ... Saya masih tidak yakin dengan itu ... kerangka kerjanya tidak elegan dan cukup jelek ... Ini berfungsi sebagai blog sederhana tetapi jika Anda ingin mengembangkan jenis situs web lain. semacam meretas wordpress untuk melakukan sesuatu yang tidak seharusnya dilakukan.
yeahman
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.