Rumah >Tutorial CMS >WordTekan >Plugin WordPress Boilerplate Bahagian 3: Langkah Terakhir
Jika anda terlepas Bahagian 1 dan 2, sila cari mereka di bawah:
Menyediakan tema
kita perlu memuat turun tema-unit-test-data.xml yang disediakan pada halaman codex di atas dan mengimportnya ke dalam pemasangan WordPress kami. Fungsi import terbina dalam WordPress boleh didapati dengan menavigasi ke alat> import dari bar sisi.
Ini adalah halaman import WordPress lalai, jadi kami perlu memilih tema-unit-test-data.xml yang dimuat turun sebelum ini dan klik pada butang "Muat naik dan import".
Tekan butang "Hantar" dan tunggu sehingga proses pengimportan dilakukan dengan jayanya.
Sekarang kita sudah bersedia untuk menulis kod yang memaparkan notis kita.
mengaitkan ke dalam penapis the_content
Tambahkan baris kod ini ke dalam kaedah:
<span>$this->loader->add_action( 'the_content', $plugin_public, 'the_content' );</span>Ini bermakna, kita perlu melaksanakan kaedah the_content awam ke dalam kelas usang_notice_public kami. Buka awam/kelas-out-notis-public.php dan ubah suai dengan sewajarnya.
mengubahsuai kandungan
kita perlu memastikan bahawa kita hanya memasukkan teks notis ketinggalan zaman apabila satu jawatan dipaparkan, bukan pada indeks pos blog. Untuk melakukan itu, kita boleh menapisnya dengan menggunakan fungsi IS_Main_Query. Fungsi ini berguna apabila kita perlu menentukan sama ada pertanyaan berjalan adalah yang utama atau pertanyaan menengah/adat.
Satu lagi perkara yang perlu kita pertimbangkan ialah kita hanya akan memaparkan teks notis untuk satu pandangan pos pos pos, jadi iS_singular ('post') pengesahan akan menjadi sempurna untuk pekerjaan.
Ini adalah kaedah the_content yang terkini yang terkandung di dalam kelas usang_notice_public.
<span>public function the_content( $post_content ) { </span> <span>if ( is_main_query() && is_singular('post') ) { </span> <span>// do something </span> <span>} </span> <span>return $post_content; </span> <span>}</span>mengira perbezaan hari
Pertama, kita perlu mengambil tetapan yang disimpan plugin kami. Fungsi get_option akan melakukan pekerjaan itu, dan sebagai langkah yang selamat, kita akan lulus nilai lalai sebagai hujah kedua untuk mendapatkan_option.
<span>$this->loader->add_action( 'the_content', $plugin_public, 'the_content' );</span>
Untuk mengira perbezaan hari antara masa semasa dan masa yang diubahsuai terakhir, kita akan memberi instantiasi dua objek DateTime. Kita boleh mendapatkan pengukuran yang tepat mengenai perbezaan masa menggunakan kaedah diff yang dibina ke kelas DateTime. Perhatikan bahawa kelas DateTime hanya tersedia pada php> = 5.3.0.
<span>public function the_content( $post_content ) { </span> <span>if ( is_main_query() && is_singular('post') ) { </span> <span>// do something </span> <span>} </span> <span>return $post_content; </span> <span>}</span>
$ date_diff adalah contoh kelas DateInterval supaya kami akan mempunyai pelbagai data yang tersedia berkaitan dengan perbezaan masa. Sekiranya kita pergi ke var_dump pembolehubah $ date_diff, inilah yang harus kita dapatkan, bergantung pada jawatan yang sedang anda lihat.
<span>$position = get_option( 'outdated_notice_position', 'before' ); </span> <span>$days = (int) get_option( 'outdated_notice_day', 0 );</span>
Kami hanya berminat dengan nilai hari kerana ia akan digunakan sebagai perbandingan terhadap ambang hari -hari kami. Seperti yang saya katakan sebelum ini, kami akan membandingkannya supaya kami dapat menggunakan kelas tertentu untuk elemen div notis kami untuk menggayakannya secara berbeza antara jawatan.
<span>$date_now = new DateTime( current_time('mysql') ); </span> <span>$date_old = new DateTime( get_the_modified_time('Y-m-d H:i:s') ); </span> <span>$date_diff = $date_old->diff( $date_now );</span>
Blok perbandingan mudah ini cukup untuk menentukan kelas mana yang hendak digunakan untuk Div kami. Satu -satunya perkara yang tersisa sekarang adalah untuk benar -benar membina HTML untuk ditambah ke kandungan pos.
Untuk teks siap terjemahan yang lebih baik, kami akan menggunakan fungsi _n untuk memilih teks yang betul untuk digunakan bergantung kepada bilangan hari sejak jawatan itu dikemas kini terakhir. Kemudian, kita akan membungkus teks notis dalam divenya sendiri supaya kita dapat menggayakannya kemudian. Jangan ragu untuk mengubah teks notis dengan keinginan anda sendiri.
<span>object(DateInterval)#286 (8) { </span> <span>["y"]=> </span> <span>int(0) </span> <span>["m"]=> </span> <span>int(0) </span> <span>["d"]=> </span> <span>int(12) </span> <span>["h"]=> </span> <span>int(23) </span> <span>["i"]=> </span> <span>int(17) </span> <span>["s"]=> </span> <span>int(22) </span> <span>["invert"]=> </span> <span>int(0) </span> <span>["days"]=> </span> <span>int(12) </span> <span>}</span>
Pemboleh ubah notis $ kini harus mengandungi markup yang akan kami masukkan ke kandungan pos kami. Satu -satunya perkara yang perlu dilakukan ialah menambahkannya.
<span>if ( $date_diff->days > $days ) { </span> <span>$class = 'is-outdated'; </span> <span>} else { </span> <span>$class = 'is-fresh'; </span> <span>}</span>
sebagai rekap, ini adalah bagaimana kaedah the_content di dalam usang_notice_public akhirnya harus kelihatan.
<span>// Filter the text </span> <span>$notice = sprintf( </span> <span>_n( </span> <span>'This post was last updated %s day ago.', </span> <span>'This post was last updated %s days ago.', </span> <span>$date_diff->days, </span> <span>'outdated-notice' </span> <span>), </span> <span>$date_diff->days </span> <span>); </span> <span>// Add the class </span> <span>$notice = '<div >' . $notice . '</div>'; </span> <span>$notice = sprintf( $notice, $class );</span>
Cuba melayari beberapa halaman untuk melihat apakah plugin kami berfungsi seperti yang dimaksudkan. Inilah yang saya lihat ketika melayari pos "Hello World" di URL
Kami akan memohon beberapa gaya mudah untuk div notis. Untuk melakukan itu, kami tidak akan mengubah apa -apa berkaitan dengan saiz fon atau keluarga fon yang sudah digunakan. Plus, kami akan meminjam skema warna bootstrap dan gaya buat masa ini.
Buka fail-fail notis-public.css yang terkandung di dalam folder awam/CSS dan tambahkan peraturan ini.
<span>if ( 'after' == $position ) { </span> <span>$post_content .= $notice; </span> <span>} else { </span> <span>$post_content = $notice . $post_content; </span> <span>}</span>
Kami juga memerlukan dua gaya yang berbeza untuk mewakili pasca-fresh, yang merupakan satu gaya untuk .is-segar dan satu lagi untuk .is-outdated. Coretan ini harus melakukan silap mata, memberikan kita skema warna hijau yang bagus untuk jawatan segar, dan skema warna merah untuk jawatan yang sudah lapuk.
<span>public function the_content( $post_content ) { </span> <span>if ( is_main_query() && is_singular('post') ) { </span> <span>$position = get_option( 'outdated_notice_position', 'before' ); </span> <span>$days = (int) get_option( 'outdated_notice_day', 0 ); </span> <span>$date_now = new DateTime( current_time('mysql') ); </span> <span>$date_old = new DateTime( get_the_modified_time('Y-m-d H:i:s') ); </span> <span>$date_diff = $date_old->diff( $date_now ); </span> <span>if ( $date_diff->days > $days ) { </span> <span>$class = 'is-outdated'; </span> <span>} else { </span> <span>$class = 'is-fresh'; </span> <span>} </span> <span>// Filter the text </span> <span>$notice = sprintf( </span> <span>_n( </span> <span>'This post was last updated %s day ago.', </span> <span>'This post was last updated %s days ago.', </span> <span>$date_diff->days, </span> <span>'outdated-notice' </span> <span>), </span> <span>$date_diff->days </span> <span>); </span> <span>// Add the class </span> <span>$notice = '<div >' . $notice . '</div>'; </span> <span>$notice = sprintf( $notice, $class ); </span> <span>if ( 'after' == $position ) { </span> <span>$post_content .= $notice; </span> <span>} else { </span> <span>$post_content = $notice . $post_content; </span> <span>} </span> <span>} </span> <span>return $post_content; </span> <span>}</span>
mari kita menyegarkan pandangan pos dan lihat bagaimana ia digayakan. Contoh jawatan segar dan ketinggalan zaman:
itu! Kami kini mempunyai plugin berfungsi sepenuhnya yang dibangunkan berdasarkan plugin WordPress Plugin Boilerplate.
Terdapat pelbagai perkara yang boleh diperbaiki berdasarkan apa yang telah kami lakukan setakat ini. Antaranya ialah:
Boilerplate plugin WordPress menyediakan titik permulaan yang sempurna untuk membangunkan sebarang plugin dari awal. Dalam bahagian terakhir siri ini, kami selesai dengan membangunkan fungsi awam yang menghadapi plugin kami. Pengubahsuaian walaupun agak mudah, dilakukan dalam sedikit masa, sementara masih mengekalkan corak OOP yang ditubuhkan oleh boilerplate itu sendiri dan mematuhi piawaian dan amalan terbaik.
Salinan penuh kod boleh didapati seperti biasa di GitHub di cawangan bahagian-3.
Bagaimana saya mengantarabangsakan plugin saya dengan boilerplate plugin WordPress? direktori. Kelas ini memuatkan domain teks plugin anda, yang membolehkannya diterjemahkan ke dalam bahasa lain. Anda hanya perlu menggantikan domain teks pemegang tempat di dalam boilerplate dengan domain teks plugin anda.
Plugin WordPress Plugin Boilerplate termasuk fail uninstall.php yang dijalankan apabila plugin anda tidak dipasang dari papan pemuka WordPress. Fail ini harus mengandungi sebarang kod pembersihan, seperti mengeluarkan pilihan plugin atau jadual pangkalan data. Ini memastikan bahawa plugin anda tidak meninggalkan jejak di belakang apabila ia tidak dipasang.
Atas ialah kandungan terperinci Plugin WordPress Boilerplate Bahagian 3: Langkah Terakhir. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!