Metode Mengintegrasikan Data Plugin dengan Tema


17

Saya ingin mendapatkan beberapa pendapat mengenai praktik terbaik untuk mengembangkan plugin WordPress yang menyediakan integrasi tema.

Agar masuk akal ketika saya mengajukan pertanyaan ini, izinkan saya mulai dengan contoh hipotetis skenario yang saya ingin tahu. Bayangkan saya membuat plugin yang disebut "Diskografi". Diskografi mendaftarkan tiga jenis pos khusus: "Band", "Album", dan "Tracks". Plugin ini juga menyediakan kotak meta yang memberikan detail untuk setiap jenis posting, serta, taksonomi khusus untuk mengatur setiap jenis posting. Jenis posting ini diikat bersama dengan plugin Tulisan 2 Tulisan . Di dalam admin, pengguna dapat menambahkan band baru, yang dapat dikaitkan dengan album, yang, pada gilirannya, dikaitkan dengan trek, yang semuanya akan memiliki banyak data lain ditambahkan kepada mereka melalui kotak meta dan taksonomi.

Sekarang, saya tidak ingin plugin ini hanya mengatur admin bagi pengguna untuk memasukkan informasi ini; Saya ingin ini memberikan beberapa tampilan default untuk data. Pengguna / pengembang yang lebih maju akan baik-baik saja hanya memiliki admin ini. Akan cukup mudah baginya untuk mengambil data itu dan menggunakannya dalam tema; namun, tanpa beberapa tampilan default, plugin ini tidak akan berguna bagi sebagian besar pengguna. Untuk contoh ini, Anda bisa menampilkan apa saja seperti (tanda kurung menunjukkan cara info dapat ditampilkan dalam urutan hierarki templat):

  • Band (single-prefix-band.php, single.php, index.php, shortcode)
  • Album (awalan-album.php, single.php, index.php, kode pendek)
  • Trek (awalan-tunggal-track.php, single.php, index.php, kode pendek)
  • Daftar Band (template-band-list.php, halaman-band-listing.php, halaman- {id} .php, page.php, index.php, shortcode)
  • Daftar Album (template-album-list.php, halaman-album-listing.php, halaman- {id} .php, page.php, index.php, shortcode)
  • Garis Waktu Album (template-album-timeline.php, halaman-album-timeline.php, halaman- {id} .php, page.php, index.php, shortcode)

Penting bahwa ada beberapa presentasi default untuk jenis posting ini karena file template default tidak akan menampilkan semua informasi yang diperlukan untuk masing-masing jenis posting. Misalnya, tema Twenty Eleven, secara default, hanya akan menunjukkan nama, kategori, deskripsi, dan tanggal posting untuk sebuah album. Tidak terlalu berguna untuk album. Saya ingin memberikan templat posting tunggal yang menarik di band, tanggal rilis, label rekaman, versi album, trek, dll. Sebagai pengembang plugin saya akan merasa bahwa itu akan penting untuk diberikan. Saya tahu templat tidak akan berfungsi untuk setiap tema, tetapi harus ada beberapa default yang dapat diintegrasikan lebih lanjut dengan tema pengguna.

Sekali lagi, saya ingin tahu tentang apa cara terbaik untuk menangani situasi ini? Saya pikir Anda bisa melakukan salah satu dari yang berikut ini.

Kode pendek

Shortcode dapat digunakan sebagai cara yang sangat fleksibel dan ramah pengguna untuk memungkinkan non-dev menambahkan band, album, trek, daftar band, dll. Di mana saja di situs. Akan sangat membantu untuk menampilkan band pada halaman tertentu atau membuat halaman terpisah untuk setiap band (tidak terlalu efisien, tetapi beberapa pengguna melakukan pendekatan dengan cara ini). Kode pendek akan menghasilkan HTML, yang akan diikat ke file CSS yang disediakan yang akan memberikan tampilan default yang bagus dari data yang diinginkan. Semuanya akan terkandung dalam file plugin dan tidak ada yang perlu dilakukan dengan tema.

File Templat

Plugin juga dapat dikirimkan dengan file templat. File template dapat ditandai dan ditata untuk tampilan default yang bagus. Anda dapat memberikan instruksi bagi pengguna Anda untuk memindahkan file ke folder tema sehingga tema akan menemukan template yang tepat ketika jenis posting dilihat. Anda bahkan dapat bertindak lebih jauh dengan menyediakan antarmuka untuk memungkinkan pengguna memindahkan file dengan satu klik (catatan: Saya tidak akan membuat file di folder tema pengguna saat aktivasi karena menambahkan file ke tema mereka tanpa mereka memulai itu jahat) .

Anda juga dapat menggunakan filter untuk memanfaatkan file-file ini tanpa memindahkannya dari folder plugin, menjaga semuanya tetap lengkap. Saya telah melihat filter "template_include" dan "{$ type} _template" yang digunakan untuk tujuan ini. Bahkan, Anda bisa menggunakan templat dari folder tema dan jika tidak ada, Anda dapat kembali ke filter ini untuk memberikan tampilan default.

Pertanyaan

Saya ingin tahu apa yang dipikirkan orang lain sebagai praktik terbaik untuk situasi ini, jika ide yang disajikan bermasalah dengan cara apa pun, dan alternatif apa pun yang belum saya sertakan.

Terima kasih!


3
Kalau saja semua pertanyaan di WPSE dipikirkan dengan sangat baik ... :)
scribu

@scribu ... Anda hanya mengatakan itu karena saya menyertakan tautan ke plugin Anda;) Namun, terima kasih atas pujiannya. Saya khawatir ini akan menjadi pertanyaan bodoh, tapi itu sudah cukup lama mengganggu saya.
tollmanz

+1 lain dari saya. Untuk "mengapa", baca komentar @scribu.
kaiser

@kaiser & scribu ... Saya harap Anda memberikan pemikiran tentang topik ini. Saya ingin mendengar apa yang Anda katakan.
tollmanz

@tollmanz Sudah selesai. Tapi Q intens seperti itu perlu sedikit pemikiran dan waktu.
kaiser

Jawaban:


4

Saya tidak dapat menjawab setiap Q yang Anda tanyakan, karena membaca Q membutuhkan waktu cukup lama;), tetapi saya mencoba memberi Anda beberapa wawasan tentang pengalaman pribadi saya dengan mengembangkan plugin open source yang gratis.

1. Jangan pernah melakukan terlalu banyak. Fitur adalah kematian setiap plugin. Bangun versi dasar terlebih dahulu dan uji reaksi pengguna Anda. Jika plugin Anda mendapat banyak perhatian, Anda dapat mengintegrasikan fitur yang paling banyak diminta.

2. Hindari mengisi setiap use case. Anda perlu mempertahankan plugin Anda. WP menawarkan versi baru setiap tiga bulan. Dan kadang-kadang sulit untuk mengikuti semua plugin Anda. Untuk membuat contoh: Versi baru dari Pengaturan API saat ini dibahas di Trac. Ketika ini akan selesai, maka ada kemungkinan bahwa banyak pengembang plugin atau tema perlu mengubah sebagian besar kode dan beberapa orang - seperti saya - bahkan telah menulis lapisan abstraksi di atas API. Jadi Anda harus kembali, menulis ulang lapisan dasar / abstraksi Anda dan kemudian mengerjakan ulang semua yang memanggil bagian itu. Saya berjanji bahwa ini banyak pekerjaan. Dan bahkan lebih lagi jika terikat erat dengan kode Anda. Ketika Anda mulai mengisi banyak kasus penggunaan, maka Anda juga mendapatkan banyak evolusi kode inti WP yang perlu Anda pantau, serta Anda banyak pekerjaan menjaga kode Anda tetap mutakhir.

3. Jangan pernah mencoba untuk menggabungkan banyak contoh kode (atau templat) ke dalam plugin atau tema Anda. Jika Anda ingin menargetkan pengembang dan pengguna akhir: Gunakan blog Anda untuk dokumentasi. Pengembang membenci hal-hal seperti itu dan pengguna akhir tidak pernah puas (lihat: mengisi setiap kasus penggunaan).

4. Bagi kode Anda dengan bijaksana menjadi file tunggal. Rule of thumb: Satu file untuk satu bagian. Contoh: styles.php, scripts.php, taxonomies.php, cpts.php, dll. Memuat semuanya dari kelas "ibu" (pabrik) dan simpan barang-barang Anda "pluggable". Jika Anda perlu menulis ulang barang, Anda akan menemukannya dengan mudah. Jika dev sedang mencari sesuatu: mereka akan menemukannya dengan mudah. Banyak file dengan nama baik, tidak membahayakan Anda.

5. Jika Anda punya daftar gaya dasar (kelas), serahkan saja kepada pengguna . Peluangnya terlalu tinggi, bahwa gaya dari tema atau plugin lain akan mencegat definisi Anda (tidak peduli berapa banyak spesifisitas yang Anda masukkan). Coba jelaskan di suatu tempat dengan teks sesedikit mungkin.

6. Suka plugin Anda. Tapi lepaskan jika Anda bosan. :)


Sekarang - dengan kata singkat - sesuatu tentang ide plugin Anda secara terperinci:

A. File template buruk. Seperti yang saya katakan: Dokumentasikan di blog Anda, tawarkan contoh mark-up dan gaya di sana. Blog Anda akan menguntungkan (dan Anda juga jika mendapat iklan).

B. Shortcode adalah kool. Mereka tidak membahayakan siapa pun jika plugin tersebut hilang (dalam banyak kasus) dan dapat kemudian diperluas / dikembangkan menjadi tombol TinyMCE (yang disukai orang).

C. Jelaskan bahwa plugin Anda membutuhkan plugin lain. Pertanyakan ini dan tambahkan catatan ke admin_notices (via register_activation_hook) jika plugin lain tidak keluar (tautkan dalam hal ini) atau tidak diaktifkan (Anda bisa melakukan ini untuk pengguna saat aktivasi). Perhatikan juga bahwa plugin ini berasal dari sumber tepercaya dan akan dipertahankan untuk tahun-tahun berikutnya.

Catatan: Tidak ada yang saya tulis lebih dari opini pribadi saya, yang mencerminkan pengalaman saya.


1
+1 untuk tombol shortcode TinyMCE (atau lainnya), teknik ini sangat membantu bagi pengguna yang tidak mengerti teknologi dan membantu dengan seluruh masalah integrasi tema.
Wyck

1
Terima kasih atas pemikiran anda Ada banyak kebijaksanaan plugin umum di sini. Berkenaan dengan pertanyaan saya, sepertinya metode Anda adalah memberikan sangat sedikit dalam hal integrasi tema; alih-alih, Anda ingin pengguna mengetahuinya melalui dokumentasi. Saya dapat melihat mengapa ini adalah metode yang masuk akal, namun pada saat yang sama, saya mengajukan seperti ini akan menyebabkan banyak pengguna merasa ada sesuatu yang hilang dalam plugin. Dengan contoh saya, saya pikir pengguna akan merasa ada sesuatu yang rusak jika tidak ada dukungan bawaan untuk menampilkan band / album / trek.
tollmanz

Jika Anda ingin tetap menggunakan, maka saya sarankan Anda benar-benar menggunakan kode pendek untuk menambahkan mark-up ke cpt (atau di dalam tempat lain). Mengenai gaya: Saya cukup memeriksa apakah ada stylesheet tertentu di suatu tempat di folder tema child> parent. Jika ya: Ini akan secara diam-diam menimpa / -mengatur stylesheet inti. Dengan cara ini Anda bisa memuaskan kedua pengembang sebagai pengguna akhir.
kaiser

@kaiser ... kedua poin kuat di sana.
tollmanz

2

Dalam beberapa hal Anda harus mempertimbangkan keseimbangan antara membuat plugin atau tema, jika skenario Anda membutuhkan banyak penyesuaian / fitur, biasanya selalu lebih baik untuk membuat tema. Dengan begitu pengguna kemudian dapat menyesuaikan dalam hal tampilan yang selalu lebih mudah daripada membuat pengguna untuk menyesuaikan fungsionalitas (dengan macet kode pendek di mana-mana), Anda memiliki kontrol fitur yang lebih besar, ia bekerja dengan plugin lain, dll.

Sebuah plugin yang mencoba berintegrasi dengan semua variasi tema di pasaran pasti akan menimbulkan banyak masalah dan sejujurnya banyak pekerjaan untuk Anda.

Misalnya, alih-alih membuat plugin yang sangat terintegrasi berdasarkan musik dan manajemen diskografi, alih-alih membuat tema untuk tujuan itu, ini menjadi lebih populer untuk ceruk pasar yang membutuhkan pekerjaan khusus. Contoh dunia nyata akan menjadi tema berbasis real estat, tidak ada cara saya akan menggunakan plugin untuk ini karena memiliki set fitur yang mendalam, alih-alih itu dibuat dari bawah ke atas sebagai tema, karena tema dapat mengambil keuntungan dari bagaimanapun juga semua fitur plugin.

Sangat mungkin juga bahwa dari perspektif pemasaran tema niche akan lebih baik daripada plugin ketika menyeimbangkan fitur front-end.


Poin bagus tentang mengkonseptualisasikan ini sebagai plugin (terutama untuk manfaat pemasaran). Masalah terbesar dengan hal ini adalah bahwa tidak selalu harus ada plugin dan data yang dibutuhkan untuk mengarah ke keseluruhan tema. Ini bisa menjadi komponen yang lebih kecil dari sebuah situs, yang, sayangnya, membutuhkan tema. Saya mendapatkan poin yang lebih luas, bahwa tidak mungkin memuaskan semua kelompok pengguna dan lebih baik hanya bertujuan untuk satu kelompok.
tollmanz

2

Halaman virtual

Teknik ketiga yang saya lihat adalah menugaskan halaman khusus sebagai pengganti untuk plugin Anda dan menggunakan filter 'the_content' untuk menampilkan apa pun yang Anda perlu hasilkan.

Dengan cara ini, Anda bisa membuat templat yang berbaur dengan struktur tema, karena Anda tidak harus berurusan dengan header, sidebar, footer dan div pembungkus.

Contoh yang bagus dari ini dapat ditemukan di plugin bbPress:

http://bbpress.trac.wordpress.org/browser/branches/plugin/bbp-includes/bbp-core-compatibility.php?rev=3434#L931


Apakah Anda menawarkan contoh kode? Saya kira ini adalah sesuatu yang ingin dilihat oleh banyak plugin. (+1).
kaiser

Anda dapat melihat plugin bbPress baru sebagai contoh.
scribu

Ini sangat menarik. Saya harus melihat kode sebelum memberikan penilaian.
tollmanz

@scribu: Saya mencarinya untuk menambahkan tautan, tetapi saya tidak dapat menemukannya melalui plugins.svn. Bisakah Anda memposting tautan untuk pembaca nanti? Terima kasih.
kaiser

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.