Rumah > Tutorial CMS > WordTekan > Pembangunan berorientasikan objek dengan WordPress

Pembangunan berorientasikan objek dengan WordPress

尊渡假赌尊渡假赌尊渡假赌
Lepaskan: 2025-02-16 10:26:10
asal
692 orang telah melayarinya

Pembangunan berorientasikan objek dengan WordPress

kod berorientasikan objek di mana -mana dan WordPress tidak terkecuali.

Inti WordPress dibina di atas siri objek/kelas yang digunakan untuk mengawal segala -galanya dari manipulasi pangkalan data ke rupa dan nuansa laman web anda.

Sepanjang tutorial ini, kami akan melihat ke dalam reka bentuk berorientasikan objek dan bagaimana anda boleh menggunakannya dalam aplikasi praktikal ketika membangun untuk WordPress termasuk:

    memahami dengan tepat reka bentuk berorientasikan objek.
  • Membincangkan mengapa kita harus menggunakan reka bentuk berorientasikan objek.
  • memeriksa contoh dunia sebenar untuk mempamerkan bagaimana ia dapat berfungsi.
Nota 1: Juga ambil perhatian bahawa tutorial ini menggariskan terutamanya konsep sentris WordPress, jadi jika anda sepenuhnya baru untuk reka bentuk berorientasikan objek, anda mungkin perlu mendapatkan gambaran ringkas OO melalui Panduan Rujukan PHP.

Nota 2: Jika anda berminat memuat turun segala -galanya dengan segera, sila memuat turun sumber dari repositori GitHub saya dan ikuti bersama tutorial.

mari kita melompat ke dalamnya!

Takeaways Key

    Reka Bentuk Berorientasikan Objek (OOD) dalam Fungsi dan Maklumat Berkaitan Kumpulan WordPress ke dalam kelas, meningkatkan organisasi dan penyelenggaraan kod.
  • OOD menawarkan faedah seperti organisasi yang lebih baik melalui enkapsulasi, skalabilitas melalui warisan, dan modulariti untuk penggunaan semula dan pengurusan kod yang lebih mudah. ​​
  • Tutorial menyediakan contoh praktikal untuk membuat pameran acara tersuai di WordPress, menunjukkan pelaksanaan prinsip OOD.
  • Langkah -langkah utama dalam contoh termasuk menubuhkan struktur direktori, mewujudkan fail kelas, dan melaksanakan fungsi untuk menambah dan memaparkan jenis kandungan tersuai dan kotak meta.
  • Panduan ini menekankan kelebihan OOD melalui pengaturcaraan prosedur, menonjolkan organisasi, skalabilitas, dan modulariti.
  • Tutorial disimpulkan dengan panggilan untuk tindakan untuk memuat turun kod sumber dari GitHub, menggalakkan pembaca untuk menggunakan konsep OOD yang ditunjukkan dalam projek pembangunan WordPress mereka.
apakah reka bentuk berorientasikan objek?

Reka bentuk orientasi objek (reka bentuk OO) adalah metodologi yang berbeza untuk menyelesaikan masalah, terpisah dari pendekatan prosedur tradisional.

dengan reka bentuk berorientasikan objek anda membuat struktur (kelas) yang akan mengumpulkan bersama semua fungsi berkaitan (kaedah) dan maklumat (sifat) untuk menyelesaikan masalah.

Ini berbeza daripada pembangunan prosedur di mana anda membuat fungsi dan pembolehubah untuk menyelesaikan isu-isu, bagaimanapun, unsur-unsur ini boleh dipisahkan di pelbagai fail, diisytiharkan semula dan sering longgar. Reka bentuk yang berorientasikan objek berorientasikan objek adalah mengenai menyatukan fungsi yang berkaitan ke dalam satu tempat supaya ia dapat dikekalkan, diperluaskan dan digunakan dari satu lokasi.

mengapa orientasi objek adalah idea yang baik?

Oleh kerana kod prosedur telah berfungsi dengan baik, anda mungkin tertanya -tanya apa gunanya dalam membangunkan pendekatan berorientasikan objek?

Walaupun tidak ada 'salah' dengan reka bentuk prosedur, terdapat beberapa manfaat untuk berkembang dalam gaya berorientasikan objek.

Organisasi

Kod anda pada umumnya lebih teratur apabila menggunakan pendekatan berorientasikan objek. Mewujudkan kelas bermaksud bahawa fungsi untuk menyelesaikan masalah anda adalah dalam fail (tidak seperti pembangunan prosedur di mana anda mungkin mempunyai fungsi dan pembolehubah yang tersebar di mana -mana).

Mempunyai semua kod anda di satu tempat membantu anda menyimpan perkara yang teratur dan membantu pemaju lain yang mungkin datang dan perlu memahami bagaimana sistem anda berfungsi.

Tidak ada yang lebih buruk daripada mengambil projek dan perlu diburu untuk mencari fungsi dan pembolehubah yang digunakan untuk membuat pelbagai elemen tapak (yang selalu tersebar di pelbagai fail untuk alasan yang tidak diketahui).

Skalabiliti

Apabila menyelesaikan masalah dengan pendekatan berorientasikan objek, anda membuat kelas.

Kelas -kelas ini boleh diperluas atau ditingkatkan dengan memperluaskannya menggunakan warisan. Warisan akan membolehkan anda membuat kelas berdasarkan kelas lain yang memberikan akses kepada semua sifat dan kaedahnya ke kelas baru.

anda boleh mengembangkan kelas untuk melaksanakan fungsi tambahan, atau bahkan mengatasi kaedah dan sifatnya untuk memenuhi syarat.

dengan kod prosedur, anda sama ada perlu refactor sebahagian daripada kod anda atau membuat kod baru sepenuhnya untuk menangani situasi tambahan.

modularity

Tujuan reka bentuk berorientasikan objek adalah untuk merangkum semua fungsi untuk menyelesaikan situasi ke dalam kelas.

Oleh kerana semua kod untuk menyelesaikan masalah adalah di dalam kelas dan kelas itu secara amnya dalam fail PHP sendiri, anda boleh mengambil keseluruhan fail dan menggunakannya di lokasi lain, oleh itu ia bersifat modular.

Manfaat ini ialah jika anda menulis kelas dengan cukup baik, anda harus dapat menggunakannya semula kemudian dan hanya perlu melakukan penyesuaian sedikit.

Walaupun anda boleh menyalin dan menampal kod prosedur, ia secara amnya tidak teratur dan anda mungkin perlu melalui beberapa fail untuk memastikan anda mempunyai fungsi yang diperlukan.

Contoh Senario - Membuat Pameran Acara Mudah

Dalam senario ini, pelanggan kami mahukan lokasi di laman web mereka di mana mereka boleh membuat dan mengurus acara. Acara ini akan digunakan untuk mempromosikan malam trivia yang akan datang, pertandingan bingo dan aktiviti yang menyeronokkan.

Langkah -langkah pertama adalah untuk memecahkan fungsi yang dikehendaki supaya kami dapat merancang penyelesaian kami (merancang dengan baik di sini akan membantu pendekatan berorientasi objek kami ke hadapan). Dalam senario kami, kami dapat melihat set tugas berikut:

  • Buat jenis kandungan tersuai untuk menguruskan 'peristiwa' ini.
  • Tambahkan kotak meta tambahan untuk mengendalikan pemprosesan maklumat tambahan.
  • simpan maklumat meta tambahan.
  • memaparkan maklumat meta untuk 'acara' kami.

kita boleh membuat sama ada plugin atau kita boleh mengedit tema kanak -kanak untuk menyediakan fungsi ini.

Untuk senario ini, kami akan membuat fungsi kami di dalam fail yang kemudiannya boleh disertakan dalam tema kanak -kanak. Saya telah memilih kaedah ini kerana kami ingin mengedit templat tema kami supaya kami dapat mengeluarkan maklumat acara tambahan kami.

Mendapatkan direktori anda disediakan dan membuat fail anda

Kerana kita mahu semuanya mudah diuruskan dan modular, mari kita mulakan dengan menubuhkan struktur folder di dalam tema kanak -kanak.

Cara mudah untuk mengatur segala -galanya adalah dengan membuat direktori termasuk di dalam tema anak anda. Direktori ini akan mengandungi kod atau fungsi lain tema anda akan termasuk/melaksanakan (anda boleh memanggil apa sahaja yang anda mahukan, tujuannya adalah untuk mempunyai satu direktori di dalam tema).

Di dalam direktori ini kita harus membuat folder lain, kali ini dipanggil event_showcase. Ia berada di dalam folder ini kami akan meletakkan semua fail kami yang berkenaan untuk senario ini. Kami juga memerlukan folder JS dan CSS.

Mengatur fungsi anda ke dalam folder akan bermakna bahawa ke depan anda dapat dengan lebih mudah melihat modul / ciri -ciri alat tema anda. Sebagai contoh, anda mungkin mahu melaksanakan satu lagi fungsi fungsi untuk tema anda, anda hanya boleh menambah folder baru dan secara logik semuanya teratur dengan kemas.

mari kita buat fail untuk contoh kami dan gerakkannya ke dalam direktori yang betul

    event_showcase_class.php
  • event_showcase_admin_styles.css
  • event_showcase_admin_scripts.js
  • event_showcase_public_styles.css
  • event_showcase_public_scripts.js
anda harus mempunyai sesuatu yang serupa dengan di bawah:

Pembangunan berorientasikan objek dengan WordPress kemudian anda perlu memuat turun dan meletakkan skrip dan gaya JQuery Time Picker di dalam direktori ini. Jangan risau perkara ini buat masa ini.

Memuatkan fail anda di dalam WordPress

dengan fail kami yang ditubuhkan, kami kini perlu memasukkannya ke dalam tema kanak -kanak kami.

Buka fungsi tema anak anda.php dan letakkan kod berikut sama ada bahagian atas atau bawah

<span>//Theme functions for child theme
</span>
<span>//load our event showcase class
</span><span>$event_showcase = get_stylesheet_directory() . '/includes/event_showcase/event_showcase_class.php';
</span><span>include($event_showcase);</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Ini akan memuatkan fail kelas utama yang akan menggariskan fungsi kami. Di dalam kelas ini kita akan mengendalikan skrip dan gaya enqueuing bersama -sama dengan unsur -unsur lain.

Membuat garis besar kelas anda

fail kelas kami yang dipanggil event_showcase_class.php akan mengandungi majoriti fungsi yang digunakan untuk sistem acara kami; Oleh itu, adalah idea yang baik untuk memetakan garis asas kaedah dan sifat apa yang kita perlukan untuk membuat kerja ini.

Salin kod berikut ke dalam fail kelas anda.

<span>//Theme functions for child theme
</span>
<span>//load our event showcase class
</span><span>$event_showcase = get_stylesheet_directory() . '/includes/event_showcase/event_showcase_class.php';
</span><span>include($event_showcase);</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

mari kita lari melalui kaedah dan sifat supaya kita dapat memahami aliran proses:

  • pembolehubah - kami mengisytiharkan beberapa pembolehubah untuk menjadikan kelas lebih modular (jadi kami boleh menyalin fail ini dan menukar beberapa sifat dan kelas akan mengendalikan perubahan yang lain).
  • __ membina () - semua cangkuk, penapis dan kod permulaan kami akan masuk ke sini.
  • set_directory_value () - mentakrifkan harta direktori kami yang akan membolehkan kami memudahkan fail yang kami letakkan di dalam direktori CSS atau JS kami.
  • check_flush_rewrite_rules () - Mengendalikan pembasmian permalink yang cantik apabila kami menambah jenis kandungan kami (yang menjadikan item baru berfungsi).
  • enqueue_public_scripts_and_styles () - Memuatkan skrip dan gaya yang dihadapi awam kami.
  • enqueue_admin_scripts_and_styles () - memuat skrip admin dan gaya.
  • add_content_type () - mentakrifkan jenis kandungan baru yang kami buat.
  • add_meta_boxes_for_content_type () - menambah kotak meta untuk jenis kandungan baru kami.
  • display_function_for_content_type_meta_box-Membina antara muka admin back-end untuk jenis kandungan supaya kami dapat menyimpan maklumat tambahan.
  • save_custom_content_type ($ post_id) - Mengendalikan penjimatan jenis kandungan tersuai (dan maklumat meta kami).
  • display_additional_meta_data () - Memaparkan maklumat meta yang disimpan di bahagian depan.

mari kita pergi sekarang dan mengemas kini unsur -unsur ini dan menggariskan kod

sifat kelas

Kami mengisytiharkan beberapa sifat di bahagian atas kelas kami yang akan dirujuk melalui kaedah kami. Tujuannya ialah mereka memudahkan untuk mengharapkan semula kelas ini dan mengubah fungsinya pada masa akan datang.

<span>/*
</span><span> * Event Showcase
</span><span> * Creates an 'event' content type to showcase upcoming functions and information
</span><span> * Uses hooks and filters inside your theme to output relevant information
</span><span> */
</span> 
 <span>class event_showcase{
</span> 	
	<span>//variables
</span>	<span>private $directory = '';
</span>	<span>private $singular_name = 'event';
</span>	<span>private $plural_name = 'events';
</span>	<span>private $content_type_name = 'event_showcase';
</span>	
	<span>//magic function, called on creation
</span>	<span>public function __construct(){}
</span>	<span>//sets the directory (path) so that we can use this for our enqueuing
</span>	<span>public function set_directory_value(){}
</span>	<span>//check if we need to flush rewrite rules
</span>	<span>public function check_flush_rewrite_rules(){}
</span>	<span>//enqueue public scripts and styles
</span>	<span>public function enqueue_public_scripts_and_styles(){}
</span>	<span>//enqueue admin scripts and styles
</span>	<span>public function enqueue_admin_scripts_and_styles(){}
</span>	<span>//adding our new content type
</span>	<span>public function add_content_type(){}
</span>	<span>//adding meta box to save additional meta data for the content type
</span>	<span>public function add_meta_boxes_for_content_type(){}
</span>	<span>//displays the visual output of the meta box in admin (where we will save our meta data)
</span>	<span>public function display_function_for_content_type_meta_box($post){}
</span>	<span>//when saving the custom content type, save additional meta data
</span>	<span>public function save_custom_content_type($post_id){}
</span>	<span>//display additional meta information for the content type
</span>	<span>//@hooked using 'display_additional_meta_data' in theme
</span>	<span>function display_additional_meta_data(){}
</span> <span>}
</span> 
 <span>//create new object 
</span> <span>$event_showcase = new event_showcase;</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

__ construct ()

fungsi __construct kami adalah fungsi sihir. Fungsi ini adalah fungsi PHP5 khas yang boleh diakses oleh kelas untuk melakukan tindakan tertentu.

semuanya bermula dengan garis bawah dua sebelum nama mereka dan boleh dimasukkan secara pilihan dalam mana -mana definisi kelas. Memahami semua fungsi sihir yang terbaik untuk perbincangan lain (di sini adalah satu lagi artikel mengenai fungsi sihir dan pemalar).

Fungsi __Construct dipanggil sebaik sahaja kelas dimulakan supaya ia adalah fungsi pertama yang akan dicetuskan. Di sinilah kami menambah semua cangkuk, penapis dan logik permulaan kami. Kemas kini garis asas dengan kod berikut.

<span>//variables
</span><span>private $directory = '';	
</span><span>private $singular_name = 'event';
</span><span>private $plural_name = 'events';
</span><span>private $content_type_name = 'event_showcase';</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

anda mungkin berfikir bahawa add_action kelihatan sedikit berbeza daripada apa yang mungkin anda lihat sebelumnya dan anda betul.

Apabila menggunakan panggilan add_action dan add_filter di dalam kelas, anda mesti membekalkan hujah kedua dalam array. Nilai pertama array adalah $ pembolehubah ini (yang bermaksud kelas itu sendiri) dan yang kedua adalah nama fungsi yang akan digunakan (dibungkus dalam petikan).

untuk maklumat lanjut lihat nota kaki kelas untuk fungsi add_action pada codex wordpress.

set_directory_value ()

Oleh kerana kita akan enqueuing CSS dan JS, masuk akal untuk menyimpan URL direktori fail ke dalam pembolehubah yang boleh kita akses. Struktur direktori kami adalah /termasuk /event_showcase namun ia boleh disesuaikan sesuai dengan struktur anda.

<span>//Theme functions for child theme
</span>
<span>//load our event showcase class
</span><span>$event_showcase = get_stylesheet_directory() . '/includes/event_showcase/event_showcase_class.php';
</span><span>include($event_showcase);</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

check_flush_rewrite_rules ()

Oleh kerana kami menambah jenis kandungan tersuai, kami perlu mengendalikan permalink yang cantik; Permalinks ini ditulis semula yang menjadikan URL halaman anda kelihatan kurang hodoh (bukannya mempunyai http://mywebsite.com.au/?p=123 Anda boleh mempunyai http://mywebsite.com.au/my-event).

Menulis semula memastikan bahawa jenis kandungan anda ditukar kepada format yang cantik, namun, penulisan semula ini mahal dan jika dilakukan secara berlebihan dapat memperlahankan tapak anda. Kerana penulisan semula boleh mempengaruhi laman web anda, biasanya hanya diubah pada pengaktifan tema/plugin atau penyahaktifan.

Oleh kerana anda mungkin tidak mahu mengemas kini permalink anda secara manual, fungsi ini meminta WordPress untuk melakukannya secara automatik dan hanya sekali (selepas jenis kandungan baru anda telah ditambah).

Fungsi ini akan menyemak untuk melihat sama ada laman web perlu dibuang melalui pilihan tema. Sekiranya siram diperlukan, ia akan mengemas kini permalinks dan kemudian tetapkan nilai pilihan kepada palsu (jadi ia hanya mencetuskan sekali, tidak setiap kali kita memuatkan halaman).

<span>/*
</span><span> * Event Showcase
</span><span> * Creates an 'event' content type to showcase upcoming functions and information
</span><span> * Uses hooks and filters inside your theme to output relevant information
</span><span> */
</span> 
 <span>class event_showcase{
</span> 	
	<span>//variables
</span>	<span>private $directory = '';
</span>	<span>private $singular_name = 'event';
</span>	<span>private $plural_name = 'events';
</span>	<span>private $content_type_name = 'event_showcase';
</span>	
	<span>//magic function, called on creation
</span>	<span>public function __construct(){}
</span>	<span>//sets the directory (path) so that we can use this for our enqueuing
</span>	<span>public function set_directory_value(){}
</span>	<span>//check if we need to flush rewrite rules
</span>	<span>public function check_flush_rewrite_rules(){}
</span>	<span>//enqueue public scripts and styles
</span>	<span>public function enqueue_public_scripts_and_styles(){}
</span>	<span>//enqueue admin scripts and styles
</span>	<span>public function enqueue_admin_scripts_and_styles(){}
</span>	<span>//adding our new content type
</span>	<span>public function add_content_type(){}
</span>	<span>//adding meta box to save additional meta data for the content type
</span>	<span>public function add_meta_boxes_for_content_type(){}
</span>	<span>//displays the visual output of the meta box in admin (where we will save our meta data)
</span>	<span>public function display_function_for_content_type_meta_box($post){}
</span>	<span>//when saving the custom content type, save additional meta data
</span>	<span>public function save_custom_content_type($post_id){}
</span>	<span>//display additional meta information for the content type
</span>	<span>//@hooked using 'display_additional_meta_data' in theme
</span>	<span>function display_additional_meta_data(){}
</span> <span>}
</span> 
 <span>//create new object 
</span> <span>$event_showcase = new event_showcase;</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
enqueue_public_scripts_and_styles ()

Fungsi ini mengendalikan enqueuing skrip dan gaya untuk laman web di bahagian depan.

Kami menggunakan nama jenis kandungan dalam panggilan enqueue supaya tidak ada konflik penamaan dengan plugin lain (kerana ia akan diterjemahkan ke dalam sesuatu yang unik i.e `event_showcase_public_scripts`).

kami memanggil kedua -dua wp_enqueue_style dan wp_enqueue_script untuk memuatkan sumber kami.

kami juga menggunakan direktori $ dan $ content_type_name sifat semasa memuatkan sumber kami.

enqueue_admin_scripts_and_styles ()
<span>//variables
</span><span>private $directory = '';	
</span><span>private $singular_name = 'event';
</span><span>private $plural_name = 'events';
</span><span>private $content_type_name = 'event_showcase';</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Fungsi ini mengendalikan enqueuing skrip dan gaya untuk laman web di back-end admin.

kami periksa untuk melihat sama ada kami berada di skrin edit atau skrin baru untuk jenis kandungan kami dan teruskan hanya jika kami (tidak perlu memuat sumber apabila kami tidak berada di halaman yang betul).

kami memanggil kedua -dua wp_enqueue_style dan wp_enqueue_script untuk memuat sumber kami, pada dasarnya sama dengan fungsi awam kami.

Untuk contoh ini, saya menggunakan kedua -dua JQuery UI DatePicker (sebahagian daripada Perpustakaan UI JQuery) dan pemetik masa JQuery UI (dibina untuk mempunyai gaya yang sama seperti pemetik tarikh).

pergi dan muat turun perpustakaan masa pemetik dari pautan di atas dan sertakan fail CSS dan JS yang berkaitan di dalam direktori anda.

add_content_type ()
<span>//magic function, called on creation
</span><span>public function __construct(){
</span>	
	<span>$this->set_directory_value(); //set the directory url on creation
</span>	<span>add_action('init', array($this,'add_content_type')); //add content type
</span>	<span>add_action('init', array($this,'check_flush_rewrite_rules')); //flush re-write rules for permalinks (because of content type)
</span>	<span>add_action('add_meta_boxes', array($this,'add_meta_boxes_for_content_type')); //add meta boxes 
</span>	<span>add_action('wp_enqueue_scripts', array($this,'enqueue_public_scripts_and_styles')); //enqueue public facing elements
</span>	<span>add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_scripts_and_styles')); //enqueues admin elements
</span>	<span>add_action('save_post_' . $this->content_type_name, array($this,'save_custom_content_type')); //handles saving of content type meta info
</span>	<span>add_action('display_content_type_meta', array($this,'display_additional_meta_data')); //displays the saved content type meta info	
</span><span>}</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

kami mengisytiharkan jenis kandungan tersuai kami dalam fungsi ini.

Fungsi ini menggunakan $ singular_name, $ plural_name dan $ content_type_nameproperties untuk membuat pendaftaran jenis pos baru ini mudah. ​​

Penstrukturan fungsi pendaftaran seperti ini bermakna anda boleh menukar dan mendaftarkan jenis pos dengan mudah dengan hanya beberapa keping maklumat.

Untuk garis besar yang lebih terperinci mengenai mendaftarkan jenis kandungan tersuai sila lihat Codex WordPress untuk fungsi register_post_type

<span>//Theme functions for child theme
</span>
<span>//load our event showcase class
</span><span>$event_showcase = get_stylesheet_directory() . '/includes/event_showcase/event_showcase_class.php';
</span><span>include($event_showcase);</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Sebaik sahaja anda telah menambah langkah ini, anda harus melihat item baru telah ditambah ke menu WordPress back-end.

Pembangunan berorientasikan objek dengan WordPress

add_meta_boxes_for_content_type ()

Kami menambah kotak meta yang kami perlukan untuk jenis kandungan kami di sini. Kami memanggil fungsi add_meta_box dan memberikannya dengan fungsi. Kisah pendek ialah kita menggunakan ini untuk membuat kotak admin baru untuk memegang elemen bentuk baru kita yang ingin kita simpan.

<span>/*
</span><span> * Event Showcase
</span><span> * Creates an 'event' content type to showcase upcoming functions and information
</span><span> * Uses hooks and filters inside your theme to output relevant information
</span><span> */
</span> 
 <span>class event_showcase{
</span> 	
	<span>//variables
</span>	<span>private $directory = '';
</span>	<span>private $singular_name = 'event';
</span>	<span>private $plural_name = 'events';
</span>	<span>private $content_type_name = 'event_showcase';
</span>	
	<span>//magic function, called on creation
</span>	<span>public function __construct(){}
</span>	<span>//sets the directory (path) so that we can use this for our enqueuing
</span>	<span>public function set_directory_value(){}
</span>	<span>//check if we need to flush rewrite rules
</span>	<span>public function check_flush_rewrite_rules(){}
</span>	<span>//enqueue public scripts and styles
</span>	<span>public function enqueue_public_scripts_and_styles(){}
</span>	<span>//enqueue admin scripts and styles
</span>	<span>public function enqueue_admin_scripts_and_styles(){}
</span>	<span>//adding our new content type
</span>	<span>public function add_content_type(){}
</span>	<span>//adding meta box to save additional meta data for the content type
</span>	<span>public function add_meta_boxes_for_content_type(){}
</span>	<span>//displays the visual output of the meta box in admin (where we will save our meta data)
</span>	<span>public function display_function_for_content_type_meta_box($post){}
</span>	<span>//when saving the custom content type, save additional meta data
</span>	<span>public function save_custom_content_type($post_id){}
</span>	<span>//display additional meta information for the content type
</span>	<span>//@hooked using 'display_additional_meta_data' in theme
</span>	<span>function display_additional_meta_data(){}
</span> <span>}
</span> 
 <span>//create new object 
</span> <span>$event_showcase = new event_showcase;</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

display_function_for_content_type_meta_box ($ post)

kami menggunakan fungsi ini untuk mengeluarkan pilihan back-end untuk maklumat meta baru untuk jenis kandungan kami.

Sebagai contoh, kami mengumpul tarikh, masa dan maklumat lain mengenai peristiwa yang akan kami tunjukkan kepada pengguna akhir.

kita mulakan dengan mengumpul semua meta pos tambahan ke dalam pembolehubah dan memaparkan output borang HTML. Beberapa bidang ini akan mencetuskan antara muka pemetik tarikh dan yang lain akan mencetuskan pemetik masa (ditentukan oleh kelas yang digunakan pada elemen).

Di samping itu, kami menetapkan medan nonce supaya kami dapat mengesahkan simpan jika permintaan itu datang dari halaman ini.

<span>//variables
</span><span>private $directory = '';	
</span><span>private $singular_name = 'event';
</span><span>private $plural_name = 'events';
</span><span>private $content_type_name = 'event_showcase';</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Apabila anda selesai dengan langkah ini, anda harus melihat kotak meta kosong baru telah berubah dan kini dapat memegang semua maklumat baru kami. Pembangunan berorientasikan objek dengan WordPress

save_custom_content_type ($ post_id)

di sinilah kami menyimpan data meta tambahan kami untuk jenis kandungan tersuai kami.

kami mula -mula memeriksa nonce yang kami tambah dalam kotak meta kami dan mengesahkan keasliannya. Selepas ini, kami menyemak bahawa kami tidak melakukan autosave dan pengguna sebenarnya boleh mengedit halaman ini. Sekiranya semua cek itu diluluskan, kami bergerak ke hadapan.

Kami mengumpulkan semua nilai kami ke dalam pembolehubah dan membersihkannya menggunakan fungsi sanitize_text_field. Selepas ini, kami memanggil fungsi update_post_meta untuk menyimpan data kami.

<span>//magic function, called on creation
</span><span>public function __construct(){
</span>	
	<span>$this->set_directory_value(); //set the directory url on creation
</span>	<span>add_action('init', array($this,'add_content_type')); //add content type
</span>	<span>add_action('init', array($this,'check_flush_rewrite_rules')); //flush re-write rules for permalinks (because of content type)
</span>	<span>add_action('add_meta_boxes', array($this,'add_meta_boxes_for_content_type')); //add meta boxes 
</span>	<span>add_action('wp_enqueue_scripts', array($this,'enqueue_public_scripts_and_styles')); //enqueue public facing elements
</span>	<span>add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_scripts_and_styles')); //enqueues admin elements
</span>	<span>add_action('save_post_' . $this->content_type_name, array($this,'save_custom_content_type')); //handles saving of content type meta info
</span>	<span>add_action('display_content_type_meta', array($this,'display_additional_meta_data')); //displays the saved content type meta info	
</span><span>}</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

display_additional_meta_data ()

Fungsi ini memaparkan maklumat meta yang disimpan untuk satu jawatan jenis kandungan baru kami (acara tunggal).

kami menentukan tindakan baru yang dipanggil Display_Content_Type_Meta di dalam fungsi __construct kami, inilah yang kelihatan seperti:

<span>//sets the directory (path) so that we can use this for our enqueuing
</span><span>public function set_directory_value(){
</span>	<span>$this->directory = get_stylesheet_directory_uri() . '/includes/event_showcase';
</span><span>}</span>
Salin selepas log masuk

Nilai kedua tindakan ini dipanggil Display_additional_meta_data dan sepadan dengan fungsi ini. Ini bermakna bahawa pada bila -bila masa seseorang memanggil do_action ('paparan_content_type_meta'); ia akan memanggil fungsi ini dan memaparkan maklumat meta pos baru.

anda boleh menghubungi do_action ('paparan_content_type_meta'); Dari mana -mana di dalam tema anda (selagi anda berada di satu jawatan jenis kandungan ini) dan ia akan memaparkan maklumat meta.

Saya menggunakan tema induk dua puluh tiga belas jadi saya menyambung ke kandungan.php tema kanak -kanak untuk paparan saya.

Fungsi ini akan mendapat Global $ Post dan $ Post_Type dan periksa bahawa item semasa yang dilihat adalah jenis kandungan baru kami.

selepas ini fungsi mengumpul maklumat meta dan memaparkannya (membuat beberapa pemeriksaan cepat di sepanjang jalan).

<span>//Theme functions for child theme
</span>
<span>//load our event showcase class
</span><span>$event_showcase = get_stylesheet_directory() . '/includes/event_showcase/event_showcase_class.php';
</span><span>include($event_showcase);</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Fail tambahan, CSS dan JS

Sekarang sebahagian besar fungsi telah selesai, mari kita bertukar ke dalam fail CSS dan JS kami untuk dengan cepat menambah beberapa gaya dan interaktiviti.

event_showcase_admin_styles.css

<span>/*
</span><span> * Event Showcase
</span><span> * Creates an 'event' content type to showcase upcoming functions and information
</span><span> * Uses hooks and filters inside your theme to output relevant information
</span><span> */
</span> 
 <span>class event_showcase{
</span> 	
	<span>//variables
</span>	<span>private $directory = '';
</span>	<span>private $singular_name = 'event';
</span>	<span>private $plural_name = 'events';
</span>	<span>private $content_type_name = 'event_showcase';
</span>	
	<span>//magic function, called on creation
</span>	<span>public function __construct(){}
</span>	<span>//sets the directory (path) so that we can use this for our enqueuing
</span>	<span>public function set_directory_value(){}
</span>	<span>//check if we need to flush rewrite rules
</span>	<span>public function check_flush_rewrite_rules(){}
</span>	<span>//enqueue public scripts and styles
</span>	<span>public function enqueue_public_scripts_and_styles(){}
</span>	<span>//enqueue admin scripts and styles
</span>	<span>public function enqueue_admin_scripts_and_styles(){}
</span>	<span>//adding our new content type
</span>	<span>public function add_content_type(){}
</span>	<span>//adding meta box to save additional meta data for the content type
</span>	<span>public function add_meta_boxes_for_content_type(){}
</span>	<span>//displays the visual output of the meta box in admin (where we will save our meta data)
</span>	<span>public function display_function_for_content_type_meta_box($post){}
</span>	<span>//when saving the custom content type, save additional meta data
</span>	<span>public function save_custom_content_type($post_id){}
</span>	<span>//display additional meta information for the content type
</span>	<span>//@hooked using 'display_additional_meta_data' in theme
</span>	<span>function display_additional_meta_data(){}
</span> <span>}
</span> 
 <span>//create new object 
</span> <span>$event_showcase = new event_showcase;</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

event_showcase_public_styles.css

<span>//variables
</span><span>private $directory = '';	
</span><span>private $singular_name = 'event';
</span><span>private $plural_name = 'events';
</span><span>private $content_type_name = 'event_showcase';</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

event_showcase_admin_scripts.js

<span>//magic function, called on creation
</span><span>public function __construct(){
</span>	
	<span>$this->set_directory_value(); //set the directory url on creation
</span>	<span>add_action('init', array($this,'add_content_type')); //add content type
</span>	<span>add_action('init', array($this,'check_flush_rewrite_rules')); //flush re-write rules for permalinks (because of content type)
</span>	<span>add_action('add_meta_boxes', array($this,'add_meta_boxes_for_content_type')); //add meta boxes 
</span>	<span>add_action('wp_enqueue_scripts', array($this,'enqueue_public_scripts_and_styles')); //enqueue public facing elements
</span>	<span>add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_scripts_and_styles')); //enqueues admin elements
</span>	<span>add_action('save_post_' . $this->content_type_name, array($this,'save_custom_content_type')); //handles saving of content type meta info
</span>	<span>add_action('display_content_type_meta', array($this,'display_additional_meta_data')); //displays the saved content type meta info	
</span><span>}</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

fungsi yang lengkap dalam tindakan!

Apabila semuanya disusun bersama, anda sepatutnya dapat membuat 'acara' baru dengan data meta tambahan. Apabila anda melihat acara anda, anda akan melihat sesuatu untuk sampel saya di bawah

Pembangunan berorientasikan objek dengan WordPress

anda dapat melihat sarikata tambahan, tarikh, masa dan data tiket.

Memperluaskan jenis pos asas seperti ini dan menambah elemen tambahan membantu membuat laman web yang lebih interaktif dan mudah untuk dikendalikan. Tidak lagi pengguna perlu menambah semua maklumat tersebut melalui kawasan kandungan yang boleh menjadi kemas, sukar digunakan dan tidak konsisten. Mereka kini mempunyai mudah untuk menguruskan antara muka.

dari mana dari sini?

Sekarang anda telah melihat contoh praktikal reka bentuk berorientasikan objek dan betapa mudahnya untuk meningkatkan perkembangan anda, anda boleh menggunakan kemahiran ini dan membina tema dan plugin yang lebih baik.

anda mungkin mahu memuat turun sumber contoh ini dari halaman GitHub saya dan kemudian mengubahnya sesuai dengan projek yang akan datang atau memperluaskannya untuk menyediakan fungsi tambahan.

Mudah -mudahan artikel ini akan membantu anda merancang pembangunan anda dan melihat bagaimana metodologi berorientasikan objek dapat menjimatkan masa dan usaha anda.

soalan yang sering ditanya mengenai pembangunan berorientasikan objek dengan WordPress

Apakah pengaturcaraan berorientasikan objek (OOP) dalam WordPress? Objek ini digunakan untuk berinteraksi antara satu sama lain untuk merancang aplikasi dan perisian. OOP di WordPress bermanfaat kerana ia menyediakan struktur modular yang jelas untuk program yang menjadikannya baik untuk menentukan datatip abstrak di mana butiran pelaksanaan tersembunyi dan unit mempunyai antara muka yang jelas.

Bagaimanakah pengaturcaraan berorientasikan objek berbeza daripada pengaturcaraan prosedur dalam WordPress?

Pengaturcaraan prosedur dalam WordPress melibatkan menulis senarai arahan untuk komputer untuk mengikuti langkah demi langkah untuk menyelesaikan tugas. Sebaliknya, pengaturcaraan berorientasikan objek menganjurkan program di sekitar datanya (objek) dan satu set antara muka yang jelas kepada data tersebut. Pendekatan ini menjadikannya lebih mudah untuk mengurus dan mengawal aplikasi kompleks dengan memecahkannya ke dalam kepingan yang lebih kecil dan boleh diguna semula.

Apakah cache objek WordPress? Prestasi dengan menyimpan data dari pangkalan data dalam ingatan untuk mengelakkan pertanyaan yang tidak perlu. Ini dapat mempercepatkan WordPress dengan ketara kerana ia mengurangkan beban pada pangkalan data. Pelbagai kaedah seperti melumpuhkan cache objek, menggunakan plugin, atau secara manual mengeluarkannya dari kod. Walau bagaimanapun, penting untuk diperhatikan bahawa ini perlu dilakukan dengan teliti untuk mengelakkan melanggar laman web anda. Tema WordPress anda, anda perlu menentukan kelas dan kaedah dalam fail fungsi.php anda atau dalam fail templat individu. Kelas dan kaedah ini kemudiannya boleh digunakan untuk membuat objek, yang boleh berinteraksi antara satu sama lain untuk melaksanakan tugas. Pengaturcaraan di WordPress menawarkan beberapa faedah. Ia menjadikan kod itu lebih padat, lebih mudah difahami, dan lebih mudah dikekalkan. Ia juga memungkinkan untuk mewujudkan fungsi yang lebih kompleks dengan kod kurang. Selain itu, ia membolehkan analisis data yang lebih baik, pengekodan yang lebih tepat, dan pembangunan yang lebih cepat. Dalam tajuk pos di WordPress biasanya disebabkan oleh konflik dengan plugin atau tema. Ini bukan bahagian standard WordPress, dan ia boleh dikeluarkan dengan mengenal pasti dan menyelesaikan konflik. Pengaturcaraan berorientasikan objek untuk WordPress. Ini termasuk tutorial, kursus, dan buku dalam talian. Anda juga boleh belajar dengan mengkaji kod teras WordPress, seperti yang ditulis menggunakan prinsip OOP. Pembangunan WordPress, sangat disyorkan. Menggunakan prinsip OOP boleh membantu menjadikan kod anda lebih mudah dibaca, boleh diguna semula, dan lebih mudah dikekalkan. Ia juga dapat membantu anda memahami kod teras WordPress dengan lebih baik.

Bolehkah saya menggunakan pengaturcaraan berorientasikan objek dengan plugin WordPress?

Ya, anda boleh menggunakan pengaturcaraan berorientasikan objek dengan plugin WordPress. Malah, banyak plugin WordPress ditulis menggunakan prinsip OOP. Ini membolehkan fungsi yang lebih kompleks dan boleh menjadikan kod plugin lebih mudah untuk mengurus dan mengekalkan.

Atas ialah kandungan terperinci Pembangunan berorientasikan objek dengan WordPress. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan