it-swarm-id.com

Plugin Tujuan Praktik Terbaik untuk Pengembangan?

Memulai wiki komunitas untuk mengumpulkantujuanpraktik terbaik untuk pengembangan plugin. Pertanyaan ini terinspirasi oleh komentar @ EAMann tentang wp-hacker .

Idenya adalah untuk berkolaborasi tentang apa praktik terbaik yang mungkin terjadi sehingga kita pada akhirnya berpotensi menggunakannya dalam beberapa proses peninjauan kolaborasi masyarakat.

PEMBARUAN: Setelah melihat beberapa tanggapan pertama menjadi jelas bahwa kita hanya perlu memiliki satu ide/saran/praktik terbaik per jawaban dan orang-orang harus meninjau daftar untuk memastikan tidak ada duplikat sebelum memposting.

131
MikeSchinkel

Gunakan Tindakan dan Filter

Jika menurut Anda orang ingin menambah atau mengubah beberapa data: berikan apply_filters () sebelum kembali .

P.S. Satu hal yang saya temukan agak mengecewakan dan bahwa alamat pertanyaan Anda adalah persentase plugin yang dirancang hanya untuk pengguna akhir, yaitu yang tidak memiliki kaitannya sendiri. Bayangkan jika WordPress dirancang seperti kebanyakan plugin? Ini akan menjadi tidak fleksibel dan solusi yang sangat niche.

Mungkin hal akan berbeda jika WordPress memiliki kemampuan untuk menginstal secara otomatis plugin yang bergantung pada plugin lain? Karena saya biasanya harus menulis banyak fungsi yang saya butuhkan dari awal karena klien menginginkan sesuatu dengan cara tertentu dan plugin yang tersedia, sementara 90% di sana, jangan izinkan saya fleksibilitas untuk memperbarui 10% sisanya.

Saya benar-benar berharap mereka yang memimpin komunitas WordPress akan mengidentifikasi cara untuk memastikan bahwa plugin dihargai untuk mengikuti praktik terbaik (seperti menambahkan kait untuk pengembang lain) seperti halnya jawaban yang baik diberikan pada situs StackExchange.

Mari kita ambil contoh dari pertanyaan lain :

Contoh: Saya ingin melakukan sesuatu di plugin saya ketika seseorang me-retweet sebuah artikel. Jika ada pengait khusus pada plugin retweet populer apa pun yang dapat saya gunakan untuk terhubung, itu akan menjadi luar biasa. Tidak ada, jadi saya bisa memodifikasi plugin mereka untuk memasukkannya, tetapi itu hanya berfungsi untuk salinan saya, dan saya tidak ingin mencoba mendistribusikannya kembali.

Terkait

69
Arlen Beiler

Memuat Script/CSS dengan wp_enqueue_script dan wp_enqueue_style

Plugin tidak boleh memuat/mencoba memuat versi duplikat file JS/CSS, terutama jQuery dan file JS lainnya yang termasuk dalam WP Core.

Plugin harus selalu menggunakan wp_enqueue_script dan wp_enqueue_style ketika menghubungkan file JS dan CSS dan tidak pernah secara langsung melalui tag <script>.

Terkait

53
Rick Curran

Dukungan I18n

Semua string keluaran harus ditautkan ke domain teks yang sesuai untuk memungkinkan internasionalisasi oleh pihak-pihak yang berkepentingan, bahkan jika pengembang tidak berminat menerjemahkan plug-in mereka sendiri.

Perhatikan bahwa sangat penting untuk memuat file bahasa selama tindakan init sehingga pengguna dapat terhubung ke tindakan.

Lihat Codex: I18n untuk Pengembang WordPress

Dan juga artikel ini: Memuat WP file bahasa dengan benar .

Sejak WordPress 4.6+

WP 4.6 mengubah urutan pemuatan dan lokasi diperiksa, itu telah membuatnya jauh lebih mudah bagi pengembang dan pengguna.

Mempertimbangkan sebuah plugin dengan domain teks 'my-plugin', WordPress sekarang akan PERTAMA mencari file terjemahan di:
/wp-content/languages/plugins/my-plugin-en_US.mo

Jika gagal menemukan satu di sana kemudian akan mencari di mana plugin memberitahu itu untuk melihat (biasanya di folder 'bahasa' pluigns jika mengikuti kodeks):
/wp-content/plugins/my-plugin/languages/my-plugin-en_US.mo

Terakhir jika tidak ada file bahasa ditemukan itu akan memeriksa lokasi default:
/wp-content/languages/my-plugin-en_US.mo

Pemeriksaan pertama ditambahkan pada 4.6 dan memberikan pengguna tempat yang pasti untuk menambahkan file bahasa, karena sebelum mereka perlu tahu di mana pengembang menambahkan file bahasa, sekarang pengguna hanya perlu tahu textdomain plugin:/wp -content/languages ​​/ plugins/TEXTDOMAIN-LOCAL.mo


Di bawah ini adalah cara lama (Tidak relevan sejak WP 4.6+)

[...]
Akhirnya, saya ingin menunjukkan bahwa penting untuk memuat file bahasa pengguna khusus dari WP_LANG_DIR sebelum Anda memuat file bahasa yang dikirimkan dengan plugin . Ketika banyak file-file dimuat untuk domain yang sama, terjemahan yang ditemukan pertama kali akan digunakan. Dengan cara ini file bahasa yang disediakan oleh plugin akan berfungsi sebagai fallback untuk string yang tidak diterjemahkan oleh pengguna.

public function load_plugin_textdomain()
{
    $domain = 'my-plugin';
    // The "plugin_locale" filter is also used in load_plugin_textdomain()
    $locale = apply_filters( 'plugin_locale', get_locale(), $domain );

    load_textdomain( 
            $domain, 
            WP_LANG_DIR . '/my-plugin/' . $domain . '-' . $locale . '.mo' 
    );
    load_plugin_textdomain( 
            $domain, 
            FALSE, 
            dirname( plugin_basename(__FILE__) ) . '/languages/' 
    );
}
49
EAMann

Pastikan Plugin Hasilkan Kesalahan Tidak dengan WP_DEBUG

Selalu uji plugin Anda dengan WP_DEBUG dihidupkan dan idealnya dihidupkan sepanjang proses pengembangan Anda. Sebuah plugin tidak boleh membuang kesalahan APA SAJA dengan WP_DEBUG pada. Ini termasuk pemberitahuan yang sudah usang dan indeks yang tidak dicentang.

Untuk mengaktifkan debugging, edit file wp-config.php Anda sehingga konstanta WP_DEBUG diatur ke true. Lihat Codex pada Debug untuk lebih jelasnya.

47
John P Bloch

Pertama Gunakan Fungsi yang Ada di WordPress Core

Jika Anda dapat: menggunakan fungsi yang ada yang termasuk dalam inti WordPress alih-alih menulis sendiri. Hanya kembangkan fungsi PHP khusus saat tidak ada fungsi yang sesuai yang sudah ada sebelumnya di inti WordPress.

Salah satu manfaatnya adalah Anda dapat menggunakan "log nota usang" untuk dengan mudah memonitor fungsi yang harus diganti. Manfaat lain adalah pengguna dapat melihat dokumentasi fungsi dalam Codex dan lebih memahami apa yang dilakukan plugin meskipun mereka bukan pengembang PHP yang berpengalaman.

Terkait

41
kaiser

Mencopot pemasangan harus menghapus semua data plugin

Setelah dihapus dari instalasi WordPress, sebuah plugin akan menghapus semua file, folder, entri basis data, dan tabel yang dibuatnya serta nilai opsi itu dibuat.

Plugin dapat menawarkan opsi untuk mengekspor/mengimpor pengaturan, sehingga pengaturan dapat disimpan di luar WordPress sebelum dihapus.

Terkait

33
Travis Northcutt

Cegah SQL Injection dengan Input Data

Plugin harus membersihkan semua input pengguna yang diambil secara langsung atau tidak langsung (mis. Via $_POST atau $_GET) sebelum menggunakan nilai input untuk meminta database MySQL.

Lihat: Memformat pernyataan SQL .

33
MikeSchinkel

Gunakan kode PHP5 berorientasi kelas dan objek

Tidak ada alasan untuk tidak menulis kode PHP5 yang bersih dan berorientasi objek. Dukungan PHP4 akan dihapus setelah rilis berikutnya (WP 3.1). Tentu saja, Anda dapat awalan semua nama fungsi Anda untuk berakhir dengan endless_long_function_names_with_lots_of_underscores, tetapi jauh lebih mudah untuk hanya menulis kelas sederhana dan menggabungkan semua yang ada di dalamnya. Juga, letakkan kelas Anda dalam file yang terpisah dan beri nama sesuai sehingga Anda dapat dengan mudah memperluas dan memeliharanya:

// in functions.php
require 'inc/class-my-cool-plugin.php';
new MyCoolPlugin();

// in inc/class-my-cool-plugin.php
class MyCoolPlugin {
    function __construct() {
        // add filter hooks, wp_enqueue_script, etc.

        // To assign a method from your class to a WP 
        // function do something like this
        add_action('admin_menu', array($this, "admin"));
    }

    public function admin() {
        // public methods, for use outside of the class
        // Note that methods used in other WP functions 
        // (such as add_action) should be public
    }

    private function somethingelse() {
        // methods you only use inside this class
    }
}
30
Husky

Awali Semua Item Namespace Global

Sebuah plugin harus benar-benar awalan SEMUA item namespace global (konstanta, fungsi, kelas, variabel, bahkan hal-hal seperti taksonomi kustom, tipe posting, widget, dll.). Misalnya, jangan membuat fungsi yang disebut init(); sebagai gantinya, beri nama seperti jpb_init().

Umumnya harus menggunakan awalan tiga atau empat huruf di depan nama atau untuk menggunakan PHP Fitur Namespace . Bandingkan: Awalan satu huruf untuk PHP konstanta kelas?

Terkait

29
John P Bloch

Deaktivasi seharusnya tidak memicu Data-Rugi

Plugin seharusnya tidak hapus semua datanya pada deaktivasi.

Terkait

25
MikeSchinkel

Hanya sertakan file yang Anda butuhkan ...

Jika Anda berada di ujung depan, jangan sertakan kode yang terkait dengan area admin.

23

Umumkan Kehilangan Data saat Penghapusan Instalasi Plugin

Setelah menghapus instalasi a plugin harus Memberitahu pengguna bahwa itu akan menghapus data itu dan menerima konfirmasi bahwa pengguna tidak apa-apa dengan menghapus data sebelum melakukannya dan sebuah plugin harus juga memungkinkan pengguna opsi untuk menyimpan data saat penghapusan instalasi. (Ide ini dari @EAMann.)

Terkait

21
MikeSchinkel

Gunakan WordPress (bawaan) penanganan Kesalahan

Jangan hanya return; jika beberapa input pengguna salah. Memberi mereka beberapa informasi tentang dilakukan salah.

function some_example_fn( $args = array() ) 
{
    // If value was not set, build an error message
    if ( ! isset( $args['some_value'] ) )
        $error = new WP_Error( 'some_value', sprintf( __( 'You have forgotten to specify the %1$s for your function. %2$s Error triggered inside %3$s on line %4$s.', TEXTDOMAIN ), '$args[\'some_value\']', "\n", __FILE__, __LINE__ ) );

    // die & print error message & code - for admins only!
    if ( isset( $error ) && is_wp_error( $error ) && current_user_can( 'manage_options' ) ) 
        wp_die( $error->get_error_code(), 'Theme Error: Missing Argument' );

    // Elseif no error was triggered continue...
}

Satu kesalahan (objek) untuk semua

Anda dapat mengatur objek kesalahan global untuk tema atau plugin Anda selama bootstrap:

function bootstrap_the_theme()
{
    global $prefix_error, $prefix_theme_name;
    // Take the theme name as error ID:
    $theme_data = wp_get_theme();
    $prefix_theme_name = $theme_data->Name;
    $prefix_error = new WP_Error( $theme_data->Name );

    include // whatever, etc...
}
add_action( 'after_setup_theme', 'bootstrap_the_theme' );

Kemudian, Anda dapat menambahkan Kesalahan tidak terbatas sesuai permintaan:

function some_theme_fn( $args )
{
    global $prefix_error, $prefix_theme_name;
    $theme_data = wp_get_theme();
    if ( ! $args['whatever'] && current_user_can( 'manage_options' ) ) // some required value not set
        $prefix_error->add( $prefix_theme_name, sprintf( 'The function %1$s needs the argument %2$s set.', __FUNCTION__, '$args[\'whatever\']' ) );

    // continue function...
}

Kemudian Anda dapat mengambil semuanya di akhir tema Anda. Dengan cara ini Anda tidak mengganggu rendering halaman dan masih bisa menampilkan semua kesalahan Anda untuk dikembangkan

function dump_theme_errors()
{
    global $prefix_error, $prefix_theme_name;

    // Not an admin? OR: No error(s)?
    if ( ! current_user_can( 'manage_options' ) ! is_wp_error( $prefix_error ) )
        return;

    $theme_errors = $prefix_error->get_error_messages( $prefix_theme_name );
    echo '<h3>Theme Errors</h3>';
    foreach ( $theme_errors as $error )
        echo "{$error}\n";
}
add_action( 'shutdown', 'dump_theme_errors' );

Anda dapat menemukan informasi lebih lanjut di Q ini . Tiket terkait untuk memperbaiki "kerja sama" WP_Error dan wp_die() ditautkan dari sana dan tiket lain akan menyusul. Komentar, kritik & semacamnya sangat dihargai.

19
kaiser

Biarkan nama folder plugin diubah

/ plugins/pluginname/{berbagai}

"Pluginname" yang digunakan untuk folder harus selalu dapat diubah.

Ini biasanya ditangani dengan mendefinisikan konstanta dan secara konsisten menggunakannya di seluruh plugin.

Tak perlu dikatakan banyak plugin populer adalah pendosa.

Terkait:

  • plugins_url() untuk menghubungkan dengan mudah ke sumber daya, termasuk dengan plugin.
19
AndyBeard

Minimalkan Nama yang Ditambahkan ke Global Namespace

Plugin harus mengurangi dampaknya sebanyak mungkin dengan meminimalkan jumlah nama yang ditambahkan ke namespace global .

Ini dapat dilakukan dengan mengenkapsulasi fungsi plugin ke dalam kelas atau dengan menggunakan fitur PHP namespaces . Awalan semuanya juga bisa membantu tetapi tidak fleksibel.

Di sebelah fungsi dan kelas, sebuah plugin seharusnya tidak memperkenalkan variabel global. Menggunakan kelas biasanya menghapusnya dan itu menyederhanakan pemeliharaan plugin.

Terkait

18
hakre

Komentar menggunakan PhpDoc

Praktik terbaik dekat dengan gaya PhpDoc. Jika Anda tidak menggunakan IDE seperti "Eclipse", Anda bisa melihatnya di Manual PhpDoc .

Anda tidak harus tahu persis bagaimana cara kerjanya. Pengembang Profesional dapat tetap membaca kode dan hanya perlu ini sebagai ringkasan. Coders dan pengguna hobi mungkin menghargai cara Anda menjelaskannya pada tingkat pengetahuan yang sama.

17
kaiser

Gunakan API Pengaturan sebelum add_option

Alih-alih menambahkan opsi ke DB melalui fungsi add_option, Anda harus menyimpannya sebagai array dengan menggunakan Pengaturan API yang menangani semuanya untuk Anda.

Gunakan API Modifikasi Tema sebelum add_option

API Modifikasi adalah konstruk yang cukup sederhana dan cara yang aman yang memungkinkan penambahan dan pengambilan opsi. Semuanya disimpan sebagai nilai serial di basis data Anda. Mudah, aman & sederhana.

17
kaiser

Lindungi Privasi Pengguna Plugin

(Sebelumnya: Komunikasi API Anonim)

Jika plug-in berkomunikasi dengan sistem eksternal atau API (mis. Beberapa layanan Web), itu harus dilakukan secara anonim atau memberikan opsi anonim kepada pengguna yang memastikan bahwa tidak ada data yang terkait dengan pengguna plugin bocor ke pihak kedua yang tidak terkontrol.

16
EAMann

Berikan Kontrol Akses dengan Menggunakan Izin

Dalam banyak kasus, pengguna mungkin tidak ingin semua orang memiliki akses ke area yang dibuat oleh plugin Anda terutama dengan plugin yang melakukan beberapa operasi kompleks, satu pemeriksaan kemampuan hardcoded mungkin tidak cukup.

Paling tidak, miliki pemeriksaan kemampuan yang sesuai untuk semua jenis prosedur plugin Anda yang dapat digunakan.

15
eddiemoya

Host Plugin di WordPress.org

Gunakan SVN repository yang disediakan di WordPress.org untuk hosting plugin. Itu membuat pembaruan pengalaman pengguna yang lebih mudah dan jika Anda belum pernah menggunakan SVN sebelumnya, itu membuat Anda benar-benar mengerti dengan menggunakannya dalam konteks yang membenarkannya.

14
pixeline

Atur kode Anda

Selalu sulit untuk membaca kode yang tidak ditulis sesuai urutan yang dieksekusi. Pertama-tama termasuk/butuhkan, definisikan, wp_enqueue_style & _script, dll., Kemudian fungsi-fungsi yang dibutuhkan plugin/tema dan akhirnya pembangun (mis. Layar admin, hal-hal yang terintegrasi dalam tema, dll.).

Cobalah untuk memisahkan hal-hal seperti css dan js di folder mereka sendiri. Coba juga dengan fungsi yang hanya membantu, seperti susunan susunan dan sejenisnya. Menjaga file "utama" tetap bersih dan mudah dibaca adalah cara yang membantu pengguna, pengembang, dan Anda, ketika Anda mencoba memperbarui dalam setahun dan belum melihat kode untuk waktu yang lebih lama.

Ini juga baik untuk memiliki struktur yang sering Anda ulangi, sehingga Anda selalu menemukan jalan keluar. Berkembang dalam struktur yang dikenal pada proyek yang berbeda akan memberi Anda waktu untuk membuatnya lebih baik dan bahkan jika klien Anda beralih ke pengembang lain, Anda tidak akan pernah mendengar "dia meninggalkan kekacauan". Ini membangun reputasi Anda dan harus menjadi tujuan jangka panjang.

12
kaiser

Impor/Ekspor Pengaturan Plugin

Ini tidak umum di plugin, tetapi jika plugin Anda memiliki (beberapa) pengaturan, itu harus memberikan Impor/Ekspor data seperti konfigurasi dan input pengguna .

Impor/Ekspor meningkatkan kegunaan plugin.

Plugin contoh yang memiliki fungsi impor dan ekspor (dan juga mekanisme undo) adalah Breadcrumb NavXT (Wordpress Plugin) (pengungkapan penuh: beberapa kode kecil oleh saya di sana, sebagian besar telah dilakukan oleh mtekk) .

Terkait

12
hakre

Mati dengan gaya

mati dengan cara yang layak Semua fungsi plugin (dan bahkan tema) harus menggunakan wp_die() di tempat-tempat penting untuk menawarkan sedikit informasi kepada pengguna tentang apa yang telah terjadi. Kesalahan php menjengkelkan dan wp_die dapat memberi pengguna pesan gaya yang bagus tentang apa yang dilakukan oleh plugin (atau mereka) salah. Plus, jika pengguna telah menonaktifkan debug, plugin akan rusak.

Menggunakan wp_die() juga membantu plugin/tema Anda kompatibel dengan wordpress testsuite .

11
kaiser

Berikan Layar Bantuan untuk pengguna

Lebih baik mengatakan RTFM (klik bantuan) sebagai jawaban daripada harus menjawab pertanyaan berulang kali.

/**
  * Add contextual help for this screen
  * 
  * @param $rtfm
  * @uses get_current_screen
  */ 
  function ContextualHelp( /*string*/ $rtfm) 
  { 
     $current_screen = get_current_screen();
     if ($current_screen->id == $this->_pageid) 
     {
        $rtfm .= '<h3>The WordPress Plugin - Screen A</h3>';
        $rtfm .= '<p>Here are some tips: donate to me ' .
     }
     return $rtfm; 
  }
add_action('contextual_help', array($this,'ContextualHelp'),1,1);

update/note: (lihat komentar dari kaiser): contoh di atas akan digunakan di kelas

11
edelwater

Tawarkan Formulir yang Dapat Diperpanjang

Ketika sebuah plugin menawarkan kemungkinan untuk memasukkan data, plugin tersebut harus selalu memiliki kaitan di bagian akhir, tepat sebelum tombol "kirim" dan/atau "setel ulang", sehingga pengembang dapat dengan mudah memperpanjang formulir dengan tidak hanya bidang, tetapi juga tombol.

Lihat: Pengaturan API

Terkait

10
kaiser

termasuk fungsi selalu melalui Hook, bukan secara langsung.

Contoh:

  • Jangan gunakan untuk memasukkan kelas plugin melalui baru tanpa kail

  • Gunakan plugins_loaded Hook

    // add the class to WP                                   
    function my_plugin_start() {                                                               
        new my_plugin();   
    }                                                        
    add_action( 'plugins_loaded', 'my_plugin_start' );
    

Perbarui: contoh hidup kecil: Plugin-svn-trunk-page dan contoh semu

//avoid direct calls to this file where wp core files not present
if (!function_exists ('add_action')) {
        header('Status: 403 Forbidden');
        header('HTTP/1.1 403 Forbidden');
        exit();
}

if ( !class_exists( 'plugin_class' ) ) {
    class plugin_class {

        function __construct() {
        }

    } // end class

    function plugin_start() {

        new plugin_class();
    }

    add_action( 'plugins_loaded', 'plugin_start' );
} // end class_exists

Anda juga dapat memuat melalui mu_plugins_loaded di multisite-install, lihat kodeks untuk referensi tindakan: http://codex.wordpress.org/Plugin_API/Action_Reference Juga di sini Anda melihat, bagaimana cara memasukkan wP dengan kait ini: http://adambrown.info/p/wp_hooks/hook/plugins_loaded?version=2.1&file=wp-settings.php Saya menggunakan ini sangat sering dan tidak begitu sulit dan awal, lebih baik sebagai kelas baru yang sulit ();

9
bueltge

Deskripsi plugin Anda harus secara akurat merinci fungsi-fungsi plugin Anda. Ada 10 plugin pos unggulan. Semuanya menampilkan posting yang ditampilkan, namun banyak yang memiliki fitur yang berbeda. Seharusnya mudah membandingkan plugin Anda dengan plugin serupa dengan membaca deskripsi.

Anda harus menghindari membual tentang betapa sederhananya plugin Anda kecuali itu sangat mendasar. Anda harus memasukkan tautan yang bermanfaat dalam deskripsi seperti tautan ke pengaturan.

8
Greg

Plugin Lisensi di bawah Lisensi yang Kompatibel GPL

Plug-in dan tema harus dilisensikan di bawah lisensi yang kompatibel dengan WordPress. Ini memungkinkan mereka untuk didistribusikan kembali dengan WordPress sebagai "program." Lisensi yang disarankan adalah GPL . Berhati-hatilah bahwa semua pustaka kode yang disertakan dengan plug-in kompatibel dengan lisensi yang sama.

(Ini telah menjadi masalah dan serius titik perdebatan baik di masa lalu dan sekarang .)

8
EAMann

Minimalkan efek samping dari Remote Datasources dan layanan Web

Plugin harus Layanan Web Cache/Shield dan/atau permintaan XMLRPC/SOAP melalui lapisan caching/penyedia data jika Anda menggunakannya agar tidak membuat permintaan depan menunggu ( lambat) respons layanan web.

Itu termasuk pengunduhan RSS feed dan halaman lainnya. Rancang plugin Anda bahwa mereka meminta data di latar belakang.

Satu LANGKAH yang memungkinkan adalah (Ambil contoh ke ping.fm sebagai contoh): Buat tabel buffer, katakanlah: ping_fm_buffer_post (tanggal, waktu, pesan, dikirimkan_waktu, status)

  1. Untuk setiap kali Anda ingin mengirim pembaruan ke ping.fm, tambahkan ke tabel ini.
  2. Sekarang, kita perlu membuat plugin untuk menangani data ini. Plugin ini akan dijalankan melalui crontab untuk memeriksa setiap pembaruan yang belum dikirim
  3. Karena kami memiliki tabel ini, kami juga dapat mencantumkan setiap pesan yang dikirimkan ke ping.fm dan memeriksa status setiap posting. Kalau-kalau ada masalah di sisi ping.fm, kita bisa mengirimkannya kembali.
7
hakre

Uji plugin Anda

Kita harus memiliki beberapa alat pengujian pada lingkungan pengembangan plugin kita.

Berdasarkan jawaban ini oleh Ethan Seifert untuk pertanyaan pengujian, ini adalah praktik yang baik untuk diikuti:

  • Unit Testing Anda harus menguji jumlah perilaku terkecil yang dapat dilakukan oleh suatu kelas.
  • Ketika Anda naik ke tingkat pengujian fungsional ini adalah tempat Anda dapat menguji kode Anda dengan dependensi Wordpress.
  • Bergantung pada apa yang dilakukan plugin Anda - pertimbangkan untuk menggunakan tes berbasis Selenium yang menguji keberadaan data di DOM dengan menggunakan ID
7
Fernando Briano

Gunakan Nama yang Tepat

Kait dan filter nama (kelas, fungsi, dan vars), sehingga sehingga orang dapat mengidentifikasi mereka bahkan dalam setahun , ketika mereka tidak ingat lagi, dari mana asal kue atau kode itu. Tidak masalah jika nama hook/filter terlalu panjang. Ex. youruniquename_hook/filter_whatitdo.

  • Jika file Anda mengandung kelas bernama "dbdbInit", maka file yang berisi kelas harus dinamai "dbdbInit.class.php".
  • Jika Anda masuk ke dalam dbdbInit- Anda, sebuah fungsi yang mendaftar ex. custom_post_types, lalu panggil register_custom_post_types().
  • Jika Anda mendapatkan array yang berisi nama-nama untuk custom_post_types, maka panggil variabel tempat array ditugaskan $custom_post_type_names.
  • Jika Anda memiliki fungsi yang menangani array, tulis function array_handler( $array ) { // handle the array} ..
  • Cobalah untuk memberi nama benda-benda dengan cara yang Anda tahu apa tanda itu/di mana itu milik namanya.

Hal lain: Jika Anda harus men-debug hal itu, dalam 99% dari semua kasus, Anda mendapatkan semua pesan Anda tidak hanya untuk kode Anda, tetapi juga untuk wordpress. Jadi cobalah untuk menggunakan ex awalan yang sama. "dbdb" untuk kelas Anda, fungsi publik, dan variabel/objek. Dengan cara ini Anda dapat menemukannya dengan mudah di antara ratusan file. (Wordpress memuat 64 file sebelum tema Anda dan sekitar 1.550 fungsi, tidak berbicara tentang kait dan filter.)

6
kaiser

Peduli tentang WordPress & versi tema di masa depan

Catatan: Setelah membaca kembali saran ini, saya sekarang mundur dari praktik ini karena memeriksa setiap fungsi untuk keberadaan dapat memperlambat situs Anda.

Periksa apakah fungsi tidak digunakan lagi langsung di tema Anda.

Ini adalah contoh "bisa jadi seperti itu".

if ( ! function_exists( 'wp_some_fn' ) ) 
{
    $theme_data = wp_get_theme();
    $error = new WP_Error( 'wp_some_fn', sprintf( __( 'The function %1$s is deprecated. Please inform the author', TEXTDOMAIN ), "Theme: {$theme_data->Name}: Version {$theme_data->Version}" );

    // abort
    if ( is_wp_error( $error ) )
        return print $error->get_error_message();
} 
// else if no error - the function works and exists
wp_some_fn();

Untuk penanganan kesalahan praktik yang benar/terbaik, lihat jawaban ini: tautan

Anda bisa memasukkan $ sebab ke dalam fungsi. Ini akan membantu Anda dan pengguna untuk melacak fungsi atau kelas dalam tema Anda yang mungkin berubah.

6
kaiser

Gunakan Standar Pengodean WordPress

http://codex.wordpress.org/WordPress_Coding_Standards

Anda tahu betapa mudahnya memperbarui kode yang telah Anda kerjakan vs. kode yang telah disatukan orang lain? Standar pengkodean memudahkan pengembang yang mengerjakan proyek untuk masuk dan melihat apa yang terjadi.

Kami tahu plugin atau tema Anda adalah milik Anda, dan cara Anda mematahkan garis dan menambahkan kawat keriting adalah ekspresi dari kepribadian Anda. Setiap indentasi adalah pernyataan yang dipikirkan dengan cermat. Tetapi dengan kode khusus Anda, Anda berkontribusi ke WordPress, bahkan jika kode Anda tidak ada dalam aplikasi inti. Standar pengkodean membantu pengembang dengan cepat mendapatkan up-to-speed dengan kode Anda.

6
gabrielk

Terpisah dari kode inti WordPress

Plugin harus mengurangi dampak API WordPress ke minimum yang diperlukan jadi untuk memisahkan kode plugin dari kode WordPress. Ini mengurangi dampak perubahan dalam basis kode WordPress pada plugin. Selain itu, ini meningkatkan kompatibilitas lintas versi kode plugin Anda.

Ini tidak berarti tidak menggunakan fungsi WordPress (menggunakannya, sebagai Gunakan kembali fungsi yang sudah ada menyarankan), tetapi tidak terlalu menyatukan kode Anda dengan fungsi WordPress tetapi untuk memisahkan logika bisnis plugin Anda dari fungsionalitas WordPress.

6
hakre

Gunakan opsi wp untuk string keluaran plugin

Agar plugin mudah digunakan dan disesuaikan, semua string output harus dapat dimodifikasi. Cara terbaik untuk melakukannya adalah menggunakan opsi-wp untuk menyimpan string keluaran dan memberikan backend untuk mengubah nilai default. Plugin tidak boleh menggunakan string yang ditampilkan yang tidak dapat dengan mudah diubah menggunakan backend plugin.

Misalnya: Sociable - memberi Anda kemampuan untuk mengubah kalimat yang muncul sebelum bagian ikon "bagikan dan nikmati:"

5
hannit cohen

Gunakan copot pemasangan, aktifkan dan nonaktifkan kait

Ada tiga kait berbeda untuk ini:

  • Copot pemasangan register_uninstall_hook();
  • Deaktivasi register_deactivation_hook();
  • Aktivasi register_activation_hook();

Instruksi terperinci dengan contoh kerja dapat ditemukan di sini. .

3
kaiser