Saya ingin secara terprogram menambahkan widget ke dua sidebar yang saya miliki. Saya tidak dapat menemukan cara resmi untuk melakukannya?
Saya mulai mencari di database. Saya telah menemukan bahwa itu adalah opsi 'sidebars_widgets' yang menempatkan widget di sidebars. Saat melihat opsi, nama widget memiliki nomor yang ditambahkan di akhir seperti: widget_name-6. Dari mana angka itu berasal?
ada ide untuk memperbaiki ini?
Jawaban:
Ketika saya memulai jawaban ini, itu seharusnya hanya sebuah catatan kecil. Yah, saya gagal. Maaf! Tetap bersamaku, ada yang tersembunyi di dalam hati ...
Bagaimana widget WordPress disimpan
Daftar widget disimpan dalam opsi bernama
'sidebars_widgets'
. Avar_export()
dapat memberikan sesuatu seperti berikut:Abaikan
'wp_inactive_widgets'
dan'array_version'
. Kami tidak perlu peduli tentang itu.Kunci lainnya adalah pengidentifikasi untuk bilah samping yang terdaftar. Dalam hal ini bilah sisi mungkin telah terdaftar dengan kode ini:
Secara default, sidebar kosong setelah pendaftaran. Tentu saja.
Untuk setiap kelas widget terdaftar, opsi terpisah dibuat, berisi semua opsi yang diperlukan. Opsi diawali oleh string
widget_
. Untuk mendapatkan opsi untuk semua widget RSS aktif, kita harus melihat ke ...Output yang mungkin:
Catat angka 2 . Argumen untuk beberapa instance semuanya disimpan dalam opsi yang diurutkan berdasarkan angka.
Untuk melihat kelas widget mana yang sudah diketahui oleh WordPress, buka
wp-admin/options.php
dan gulir ke bawah sampai Anda melihat sesuatu seperti ini:Ya, data serial. Tidak, Anda tidak dapat membacanya di sini. Jangan khawatir, kamu tidak harus.
Widget demo
Untuk menggambarkan pekerjaan dalam yang lebih baik, saya telah menulis widget demo yang sangat sederhana:
Perhatikan konstruktor:
't5_demo_widget'
adalah$id_base
, pengidentifikasi untuk widget ini. Seperti yang Anda lihat di screen shot, argumennya disimpan dalam opsiwidget_t5_demo_widget
. Semua widget khusus Anda akan diperlakukan seperti ini. Anda tidak perlu menebak namanya. Dan karena Anda telah menulis widget Anda (mungkin), Anda tahu semua argumen dari$instance
parameter kelas Anda .Dasar-dasar tema
Pertama, Anda harus mendaftarkan beberapa sidebar dan widget khusus. Tindakan yang tepat untuk ini adalah mudah diingat:
'widgets_init'
. Masukkan semuanya ke dalam wadah - kelas atau fungsi. Untuk mempermudah saya akan menggunakan fungsi bernamat5_default_widget_demo()
.Semua kode berikut masuk ke
functions.php
. KelasT5_Demo_Widget
harus sudah dimuat. Saya hanya memasukkannya ke file yang sama ...Sejauh ini, sangat sederhana. Tema kami sekarang widget siap, widget demo dikenal. Sekarang menyenangkan.
Anda benar-benar tidak ingin merusak pengaturan pengguna. Jika sudah ada beberapa konten di sidebar, kode Anda tidak boleh melewatinya. Itu sebabnya kami berhenti dalam kasus ini.
Oke, anggap sidebar kosong ... kita perlu penghitung:
Widget diberi nomor . Angka-angka ini adalah pengidentifikasi kedua untuk WordPress.
Mari kita minta array untuk mengubahnya:
Kami juga membutuhkan penghitung (lebih lanjut tentang itu nanti):
Dan inilah cara kami menggunakan penghitung, nama bilah sisi, dan argumen widget (well, kami hanya punya satu argumen:)
text
.Perhatikan bagaimana pengenal widget dibuat: the
id_base
, a minus-
dan the counter. The isi dari widget tersebut disimpan dalam variabel lain$demo_widget_content
. Ini adalah counter kuncinya dan argumen widget disimpan dalam array.Kami menambah penghitung satu demi satu ketika kami selesai untuk menghindari tabrakan.
Itu mudah. Sekarang widget RSS. Lebih banyak bidang, lebih menyenangkan!
Ini adalah sesuatu yang baru:
update_option()
ini akan menyimpan argumen widget RSS dalam opsi terpisah. WordPress akan menemukan ini secara otomatis nanti.Kami tidak menyimpan argumen widget demo karena kami menambahkan instance kedua ke sidebar kedua kami sekarang ...
... dan simpan semua argumen untuk
t5_demo_widget
satu pencarian. Tidak perlu memperbarui opsi yang sama dua kali.Nah, cukup widget untuk hari ini, mari kita simpan
sidebars_widgets
juga:Sekarang WordPress akan tahu bahwa ada beberapa widget terdaftar dan di mana argumen untuk setiap widget disimpan. A
var_export()
di sidebar_widgets akan terlihat seperti ini:The lengkap kode lagi:
Jika Anda masuk ke
wp-admin/widgets.php
sekarang Anda akan melihat tiga widget yang telah ditetapkan:Dan itu saja. Gunakan ...
... untuk mencetak widget.
Ada kesalahan kecil: Anda harus memuat front-end dua kali untuk pendaftaran awal. Jika ada yang bisa membantu di sini saya akan sangat berterima kasih.
sumber
widget_t5_demo_widget
dengan di siniupdate_option( 'widget_t5_demo_widget', $demo_widget_content );
:?Terima kasih telah membagikan solusi Anda. Saya telah menggunakan apa yang telah dijelaskan dalam pertanyaan ini untuk membuat sepotong kode yang dapat digunakan untuk menginisialisasi sidebar dengan sangat mudah. Ini sangat fleksibel, Anda dapat membuat widget sebanyak yang Anda inginkan tanpa harus mengubah kode sama sekali. Cukup gunakan kait saringan dan berikan argumen dalam sebuah array. Berikut adalah kode yang dikomentari:
Ini adalah fungsi pembantu yang memeriksa apakah bilah samping sudah memiliki konten di dalamnya:
Sekarang kita perlu membuat fungsi yang terhubung ke aksi 'sidebar_init'.
Dan sekarang inisialisasi widget:
Tindakan terakhir adalah membuat widget di setiap bilah sisi:
Fungsi ini digunakan untuk melacak berapa banyak contoh widget tertentu yang telah ditentukan:
Hal terakhir yang perlu kita lakukan adalah memberikan nilai. Manfaatkan fungsi filter ini:
Dan:
Idealnya Anda akan memanggil initialize_sidebars dalam fungsi pengaturan yang dipanggil pada plugin atau aktivasi tema seperti ini: Aktivasi tema:
Aktivasi plugin:
Untuk meringkas penggunaan konglomerat fungsi ini:
buat fungsi yang menginisialisasi bilah samping yang terhubung ke filter 'alter_initialization_sidebars'.
buat fungsi untuk setiap sidebar yang baru saja Anda tambahkan yang terhubung ke filter 'alter_initialization_widgets_ $ sidebarname'. Ganti $ sidebarname dengan nama setiap sidebar yang Anda buat pada langkah 1.
Anda juga dapat dengan mudah menyalin kode uncommented ini ke file fungsi Anda dan mulai membuat fungsi filter Anda segera: Kode pada pastie (tanpa fungsi inisialisasi filter)
sumber
Pertama-tama, terima kasih kepada @toscho untuk jawaban terperinci.
Ini adalah contoh sederhana bagi mereka yang mencari solusi sederhana dan opsi widget standar:
Catatan 1: Anda dapat
sidebar-id
membuka menu widget dan memeriksa bilah sisi yang diinginkan. Pertama<div id="widgets-holder-wrap">
's<div>
anak memilikisidebar-id
.Catatan 2: Anda bisa
widget_name
membuka menu widget dan memeriksa widget yang diinginkan. Anda akan melihat sesuatu seperti<div id="widget-6_widget_name-__i__" class="widget ui-draggable">
.Saya harap ini membantu.
sumber
Inilah cara Anda melakukannya:
(PERINGATAN, ini bisa MENGHAPUS semua widget sebelumnya jika Anda tidak memasukkan kembali widget asli ke dalam
widgets
array.)-Number dapat digunakan jika nanti Anda ingin menambahkan opsi ke widget dengan sesuatu seperti ini:
sumber
$widgets = get_option( 'sidebars_widgets' );