(Pertanyaan WP pertama saya pernah diajukan! Lembut!)
Saya sedang membangun situs yang sebagian besar adalah halaman (yaitu statis), menggunakan WP sebagai CMS. Di bagian bawah beberapa halaman, akan muncul 1, 2, atau 3 "kotak promo" - pada dasarnya gambar-tombol yang menghubungkan ke bagian lain dari situs. Meskipun hanya hingga 3 kotak promo akan muncul pada halaman tertentu, akan ada ~ 30 yang berbeda untuk dipilih.
Ketika klien saya membuat halaman baru, saya ingin dia dapat memilih kotak promo dari sesuatu seperti daftar dropdown dari semua kotak promo yang mungkin.
Menurut saya ini seharusnya bekerja seperti ini:
- Buat jenis posting khusus yang disebut "kotak promo". (Meskipun bisa dengan mudah menjadi tag untuk posting biasa.)
- Gunakan alat seperti Template Bidang Kustom untuk membuat dropdown pada editor halaman, di mana nilai opsi dropdown dihasilkan secara dinamis dari daftar semua posting kotak promo yang ada. ( Ini adalah bagian yang saya tidak tahu bagaimana melakukannya. )
- Akses metadata yang dihasilkan (nomor posting benar-benar yang saya butuhkan, maka saya bisa mendapatkan yang lain) pada templat halaman.
Berdasarkan tanggapan terhadap pertanyaan lain di sini, saya telah melihat WPAlchemy MetaBox, Posts-2-Post, dan SLT Custom Fields, tetapi saya akui dokumentasi untuk masing-masingnya sedikit lebih geekier daripada saya, jadi saya belum menggali terlalu dalam.
Nasihat? Apakah salah satu alat di atas solusi yang tepat untuk saya, dan saya hanya harus mencari tahu? Apakah saya melewatkan sesuatu di sini?
sumber
Jawaban:
Sebagai penulis dari WPAlchemy , aku bias sedikit, tetapi Anda pada dasarnya memiliki baik model kerja yang digariskan untuk mengikuti tergantung pada apa yang pernah rute yang Anda pilih.
Namun, jika menggunakan WPAlchemy, Anda pada dasarnya akan melakukan sesuatu seperti berikut (langkah # 2):
custom/meta.css
dapat berisi gaya yang Anda dapat gaya dengan formulir Anda dancustom/meta.php
pada dasarnya adalah file HTML dengan isi FORMULIR dari kotak meta, dalam hal ini drop-down Anda, untuk menghasilkan drop-down Anda, Anda akan melakukan permintaan wp kustom untuk mendapatkan semua posting kustom Anda jenis. WPAlchemy memiliki beberapa fungsi pembantu khusus untuk membantu menciptakan elemen formulir Anda.Ada dokumentasi tambahan untuk membantu Anda saat bekerja dalam templat.
Tujuan utama WPAlchemy adalah untuk tetap memegang kendali di tangan pengembang, mulai dari penataan (tampilan + nuansa) hingga definisi konten kotak meta.
Dan saya dan orang lain selalu bersedia membantu mereka yang berkomentar dan mengajukan pertanyaan.
sumber
do_meta_boxes
dengan beberapa logika kondisional atau sebagai alternatif keadd_meta_boxes_{%TYPE%}
..Hehe, kamu seorang pemula! Kami akan merobekmu sampai hancur ...!
j / k :) Kami menawarkan sambutan hangat untuk semua pemula di sini, senang memiliki Anda.
Jadi ini yang ketiga kalinya saya mendengar persyaratan ini, dua kali dari klien dan bukan lagi dari Anda (dan klien Anda.) Itu memberitahu saya bahwa ini adalah kebutuhan yang cukup umum.
Saya menyukai analisis Anda sehingga saya memutuskan untuk membuat kode kelas untuk membahas poin ke-2 Anda. Saya menyebutnya
LittlePromoBoxes
karena saya tidak pernah bisa mengeluarkan lagu ini dari kepala saya, terima kasih kepada mereka . Pada dasarnya saya menggunakan kelas untuk merangkum untuk menghindari kemungkinan konflik penamaan dengan fungsi yang harus saya tulis.Anda dapat meletakkan kelas ini di
functions.php
file tema Anda atau dalam file .PHP dari plugin yang mungkin Anda tulis (tapi jangan khawatir, ini terlihat jauh lebih kompleks daripada sebelumnya.)Fungsi pertama
on_load()
adalah fungsi statis yang saya panggil di akhir deklarasi kelas untuk menginisialisasi tiga (3) kait yang Anda perlukan (fyi fungsi statis pada dasarnya adalah fungsi yang terkait dengan kelas , bukan instance) :The
init
kait untuk mendaftarkanpromo-box
jenis pos,The
add_meta_boxes_post
kait untuk memungkinkan Anda untuk menentukan metabox, danThe
wp_insert_post_data
kait untuk memungkinkan Anda untuk menangkap kotak promo yang dipilih dan menyimpan ke database.Masing-masing kait merujuk fungsi statis lain di kelas (ini adalah fungsi yang saya enkapsulasi dengan membuat kelas.)
Saya akan lewati menjelaskan
action_init()
fungsi dan fungsimake_labels()
pembantu saya dengan asumsi Anda tahu cara mendaftarkan jenis posting berdasarkan pertanyaan Anda.The
action_add_meta_boxes_post()
Fungsi register metabox menggunakan fungsi inti WordPressadd_meta_box()
dan saya sudah berkomentar parameter itu untuk menjelaskan mengapa saya melewati apa yang saya lulus untuk setiap. Fungsi panggilan balikthe_little_promo_boxes_metabox()
tentu saja merupakan fungsi statis lain dari kelas dan inilah yang sebenarnya menampilkan konten dalam metabox. Ini terutama menggunakan fungsi inti WordPresswp_dropdown_pages()
untuk menampilkan daftar kotak promo (perhatikan bahwa itu akan menampilkan jenis posting lain selain 'halaman' tetapi hanya jika mereka ditandai sebagai sedang'hierarchical'=>true
dalam pendaftaran jenis posting mereka. Mengapa hanya hierarkis? Karena itu cara mereka menulisnya, itu sebabnya! :)Karena kami menunjukkan tiga (3) dropdown, kami perlu memberikan masing-masing ID unik dalam HTML (
"promo_box_{$i}"
) tetapi nama yang sama dengan tanda kurung siku ('promo_boxes[]'
) sehingga PHP akan mengumpulkannya menjadi$_POST
variabel dalam array (yang diakses WordPress untuk kami; Anda akan melihat bagaimana dalam satu menit) . Dan tentu saja kita perlu mengatur nilai yang dipilih ((empty($promo_boxes[$i]) ? 0 : $promo_boxes[$i])
) jika memang salah satu nilai sebelumnya telah dipilih.Saya juga menggunakan fungsi inti WordPress
get_post_type_object()
untuk menunjukkan cara mendapatkan label dari jenis posting, dan juga menggunakan fungsi inti WordPressget_post_meta()
untuk mengambil array ID kotak promo dari menggunakan tombol bidang kustom '_promo_boxes' yang akan saya tunjukkan kepada Anda. untuk menyimpan berikutnya (perhatikan saya menggunakan garis bawah sebelumnya dalam nama'_promo_boxes'
yang menyebabkan WordPress bersembunyi dari UI bidang kustom standar saat pengguna mengedit posting.) .Fungsi terakhir untuk menggambarkan sebelum Anda melihat kode adalah
filter_wp_insert_post_data()
yang menerima data posting yang ada di parameter pertama ($data
) dan isi$_POST
array berkat WordPress sebagai parameter kedua ($postarr
). Di dalam fungsi ini kami memanggil fungsi inti WordPressupdate_post_meta()
dan mengekstrak array kotak promo ($postarr['promo_boxes']
) untuk menyimpan ke nilai bidang khusus untuk kunci'_promo_boxes'
untuk posting yang ditentukan oleh$_POST
array (yaitu$postarr['ID']
).Yang mengatakan, inilah kode untuk
LittlePromoBoxes
kelas:Masih ada dua (2) fungsi statis yang belum disebutkan:
get_promo_boxes()
danget_promo_box()
; ini adalah fungsi pembantu untuk membantu Anda mengambil tulisanpost_type='promo-box'
dengan nomor urut 1..3. Tetapi untuk menjadikannya lebih banyak WordPress seperti di sini adalah dua fungsi pembungkus untuk ditambahkan kefunctions.php
file tema Anda (perhatikan bahwa Anda dapat mengirimkan sebuah postingan sebagai parameter tetapi Anda tidak harus melakukannya kecuali Anda menggunakan postingan berbeda dari yang ada di The Loop ) :Sekarang Anda dapat memanggil satu atau kedua fungsi ini di
single.php
file tema Anda dengan kode yang mungkin terlihat seperti ini (kode ini bisa ditulis dalam satu lingkaran tetapi kebanyakan WordPress WordPress sepertinya suka menggandakan kode sehingga mereka dapat membacanya alih-alih menghilangkan redundansi Jadi, ketika di Roma ...):sumber