it-swarm.asia

Eklenti Geliştirme Amaçları En İyi Uygulamalar?

Eklenti geliştirme için en iyi uygulamaları toplamak için objektif bir topluluk wiki başlatmak. Bu soru @ EAMann'ın wp-hacker'lara yaptığı yorumlardan ilham aldı .

Buradaki fikir, hangi objektif en iyi uygulamaların olabileceği konusunda işbirliği yapmaktır, böylece bunları potansiyel olarak bazı topluluk işbirliği inceleme süreçlerinde kullanabiliriz.

GÜNCELLEME: İlk birkaç yanıtı gördükten sonra, cevap başına sadece bir fikir/öneri/en iyi uygulamaya sahip olmamız gerektiği ve insanların cevapsız kaldığından emin olmak için listeyi gözden geçirmesi gerektiği anlaşılıyor. göndermeden önce çoğaltır.

131
MikeSchinkel

Scriptleri/CSS'yi wp_enqueue_script ve wp_enqueue_style ile yükleyin

Eklentiler JS/CSS dosyalarının, özellikle jQuery ve WP Core içindeki diğer JS dosyalarının kopya versiyonlarını yüklememeli/denememelidir.

Eklentiler, JS ve CSS dosyalarını bağlarken daima wp_enqueue_script ve wp_enqueue_style kullanmalı ve asla doğrudan <script> etiketleri ile kullanmamalıdır.

İlgili

53
Rick Curran

I18n desteği

Geliştiricinin kendi eklentisini çevirme konusunda ilgisi olmasa bile, tüm çıkış dizeleri, ilgili taraflarca uluslararasılaşmaya izin vermek için uygun bir metin alanına bağlanmalıdır.

Dil dosyalarını init işlemi sırasında yüklemenin çok önemli olduğunu ve böylece kullanıcının eyleme bağlanabileceğini unutmayın.

Kodeks'e bakınız: WordPress Geliştiricileri için I18n

Ve ayrıca bu yazı: Yükleniyor WP dili doğru dosyaları .

WordPress 4.6'dan beri

WP 4.6 yük sırasını ve kontrol edilen yerleri değiştirdi, geliştiriciler ve kullanıcılar için çok daha kolay hale geldi.

'My-plugin' adlı bir textdomain eklentisini göz önünde bulundurarak, WordPress şimdi FIRST:
/wp-content/languages/plugins/my-plugin-en_US.mo

Eğer orada bir tane bulamazsa, o zaman eklentinin aramasını söylediği birini arayacaktır (kodeksi izlerseniz, genellikle 'dil' klasöründeki eklentilerde):
/wp-content/plugins/my-plugin/languages/my-plugin-en_US.mo

Son olarak, eğer bir dil dosyası bulunamazsa, varsayılan konumlarını kontrol edecektir:
/wp-content/languages/my-plugin-en_US.mo

İlk kontrol 4.6'da eklendi ve kullanıcılara dil dosyasını eklemek için tanımlı bir yer verdi, çünkü geliştiricinin dil dosyasını nereye eklediğini bilmeleri gerekiyordu, şimdi kullanıcının sadece eklentinin metin alanını bilmesi gerekiyor: / wp- içerik/diller/eklentiler/TEXTDOMAIN-LOCAL.mo


Eski yol aşağıdadır (WP 4.6+ dan beri geçerli değil)

[...]
Son olarak, [] eklentisini içeren dil dosyalarını yüklemeden önce özel kullanıcı dil dosyalarının WP_LANG_DIR adresinden yüklenmesinin önemli olduğunu belirtmek isterim. Aynı etki alanı için birden fazla mo dosyası yüklendiğinde, ilk bulunan çeviri kullanılacaktır. Bu şekilde, eklenti tarafından sağlanan dil dosyaları, kullanıcı tarafından çevrilmeyen dizeler için bir geri dönüş görevi görür.

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

Eklentilerin WP_DEBUG ile Hata Yapmamasını Sağlayın

Eklentilerinizi her zaman WP_DEBUG open ile test edin ve geliştirme süreciniz boyunca ideal olarak açık konuma getirin. Bir eklenti WP_DEBUG on ile HİÇBİR hata atmamalıdır. Bu, kullanımdan kaldırılmış bildirimleri ve işaretlenmemiş dizinleri içerir.

Hata ayıklamayı açmak için wp-config.php dosyanızı, WP_DEBUG sabitinin true olarak ayarlanması için düzenleyin. Daha fazla ayrıntı için Hata ayıklamadaki Kodeks bölümüne bakın.

47
John P Bloch

WordPress Çekirdeğinde İlk Olan İşlevleri Kullan

Yapabilecekleriniz: kendiniz yazmak yerine WordPress çekirdeğinde bulunan mevcut işlevleri kullanın. WordPress çekirdeğinde önceden uygun bir işlev olmadığında yalnızca özel PHP işlevleri geliştirin.

Bunun bir yararı, değiştirilmesi gereken işlevleri kolayca izlemek için "kullanımdan kaldırılmış bildirimleri günlüğe kaydet" kullanabilirsiniz. Diğer bir avantaj, kullanıcıların işlev belgelerini Kodeks'te görüntüleyebilir ve deneyimli bir PHP geliştiricisi olmasa bile eklentinin ne yaptığını daha iyi anlamalarıdır.

İlgili

41
kaiser

Kaldırma, bir eklentinin tüm verilerini kaldırmalıdır

Bir WordPress kurulumundan çıkarıldıktan sonra bir eklentinin oluşturduğu tüm dosyaları, klasörleri, veritabanı girişlerini ve tabloları oluşturduğu seçenek değerlerini silmesi gerekir.

Eklentiler, ayarları dışa aktarma/içe aktarma seçeneği sunabilir, böylece ayarlar silinmeden önce WordPress'in dışına kaydedilebilir.

İlgili

33
Travis Northcutt

Giriş Verileriyle SQL Enjeksiyonunu Önleyin

Bir eklenti olmalıdır MySQL veritabanını sorgulamak için giriş değerlerini kullanmadan önce doğrudan veya dolaylı olarak alınan tüm kullanıcı girişlerini (örneğin, $_POST veya $_GET) yoluyla temizleyin.

Bakınız: SQL deyimlerini biçimlendirme .

33
MikeSchinkel

Sınıf ve nesne yönelimli PHP5 kodu kullanın

Temiz, nesne yönelimli PHP5 kodu yazmamak için hiçbir sebep yoktur. PHP4 desteği bir sonraki sürümden sonra sona erecektir (WP 3.1). Tabii ki, tüm işlev isimlerinizi endlessly_long_function_names_with_lots_of_underscores ile bitirin, ancak basit bir sınıf yazmak ve içindeki her şeyi paketlemek çok kolaydır. Ayrıca, sınıfınızı ayrı bir dosyaya koyun ve buna göre adlandırın böylece kolayca genişletip devam ettirebilirsiniz:

// 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

Tüm Global Ad Alanı Öğelerini Önekle

Bir eklenti, TÜM global ad alanı öğelerini (sabitler, işlevler, sınıflar, değişkenler, hatta özel taksonomiler, posta tipleri, widget'lar, vb. Gibi) öneklemelidir. Örneğin, init() adında bir işlev oluşturmayın; bunun yerine, jpb_init() gibi bir şey adlandırın.

Yaygın olarak adların önünde üç veya dört harfli bir ön ek kullanılmalı veya PHP Ad Alanı Özelliği kullanılmalıdır. Karşılaştırma: PHP sınıf sabitleri için tek harfli ön ek?

İlgili

29
John P Bloch

Devre dışı bırakılması Veri Kaybına neden olmamalıdır

Bir eklenti olmamalıdevre dışı bırakmaüzerine verilerinin silinmesi.

İlgili

25
MikeSchinkel

Sadece ihtiyacınız olan dosyaları ekleyin ...

Ön taraftaysanız, yönetici alanıyla ilgili kodu eklemeyin.

23

Eklenti Kaldırma İşleminde Veri Kaybını Duyurun

Kaldırma üzerine bir eklenti gerekirBir kullanıcıya, verilerini sileceği hakkında bilgi isteyin ve kullanıcının bunu yapmadan önce verileri silmesinde sorun olmadığını ve bir eklenti gerekir ayrıca kullanıcının verileri saklama seçeneğine izin ver kaldırma işleminden sonra. (Bu fikir @EAMann'dan.)

İlgili

21
MikeSchinkel

WordPress kullanın (yerleşik) Hata yönetimi

Bazı kullanıcı girişi yanlışsa sadece return; yapmayın. Onlara biraz bilgi verilmesi yanlış yapıldı.

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...
}

Herkes için bir hata (nesne)

Önyükleme sırasında temanız veya eklentiniz için genel bir hata nesnesi ayarlayabilirsiniz:

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' );

Daha sonra talep üzerine sınırsız Hata ekleyebilirsiniz:

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...
}

Sonra temanın sonunda hepsini getirebilirsin. Bu sayede sayfayı oluşturmayı kesmezsiniz ve geliştirme için tüm hatalarınızı yine de verebilirsiniz

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' );

Daha fazla bilgiyi bu Q adresinde bulabilirsiniz. WP_Error ve wp_die() öğelerinin "birlikte çalışmasını" düzeltmek için ilgili bir bilet buradan bağlanır ve başka bir bilet takip eder. Yorumlar, eleştirmenler ve beğeniler.

19
kaiser

Eklentinin klasör adı değiştirilsin

/ Eklentileri/pluginname/{çeşitli}

Klasör için kullanılan "eklenti adı" her zaman değiştirilebilir olmalıdır.

Bu normalde sabitleri tanımlamak ve bunları eklenti boyunca tutarlı bir şekilde kullanmak suretiyle gerçekleştirilir.

Söylemeye gerek yok ki birçok popüler eklenti günahkardır.

İlgili:

  • plugins_url() Eklenti ile birlikte gelen kaynaklara kolay bağlantı için.
19
AndyBeard

Genel Ad Alanına Eklenen Adları En Aza İndir

Bir eklenti gerekiretkisini etkilemek mümkün olduğu kadar azaltmak için global isim alanına eklediği isimlerin sayısını en aza indirgemek.

Bu, eklentinin işlevlerini bir sınıfa sararak veya PHP ad alanı özelliği kullanılarak yapılabilir. Her şeyi öneklemek de yardımcı olabilir ama o kadar da esnek değil.

İşlevler ve sınıfların yanında, bir eklenti olmamalı global değişkenleri tanıtır. Normalde sınıfları kullanmak onları eskimiş ve eklenti bakımını kolaylaştırıyor.

İlgili

18
hakre

PhpDoc kullanarak yorum yapma

En iyi uygulama PhpDoc stiline yakın. Eğer "Eclipse" gibi bir IDE kullanmazsanız, sadece bir bakabilirsiniz PhpDoc Manual .

Bunun nasıl çalıştığını tam olarak bilmek zorunda değilsin. Profesyonel Geliştiriciler yine de kodu okuyabilir ve buna bir özet olarak ihtiyaç duyar. Hobi kodlayıcıları ve kullanıcıları, aynı bilgi düzeyinde açıkladığınız yöntemi takdir edebilir.

17
kaiser

Add_option'dan önce Settings API'sini kullanın

Add_option işlevi aracılığıyla DB'ye seçenekler eklemek yerine, Settings API komutunu kullanarak sizin için her şeyi halleder.

Add_option'dan önce Theme Modifications API'sini kullan

Modifikasyon API , oldukça basit bir yapı ve seçenek ekleme ve alma olanağı sağlayan güvenli bir yoldur. Her şey veritabanınızda serileştirilmiş değer olarak kaydedilir. Kolay, güvenli ve basit.

17
kaiser

Eklenti Kullanıcılarının Gizliliğini Koruyun

(Önceden: Anonim API İletişimi)

Bir eklenti harici bir sistem veya API ile iletişim kuruyorsa (örneğin, bazı Web servisleri), bunu isimsiz bir şekilde yapmalı veya kullanıcıya, eklentinin kullanıcısı ile ilgili hiçbir verinin kontrolsüz bir ikinci tarafa sızmasını sağlayan isimsiz bir seçenek sunmalıdır.

16
EAMann

İzinleri Kullanarak Erişim Denetimi Sağlayın

Birçok durumda, kullanıcılar herkesin eklentiniz tarafından oluşturulan alanlara, özellikle de birden çok karmaşık işlem yapan eklentilerle erişebilmelerini istemeyebilir, tek bir sabit kodlanmış yetenek denetimi yeterli olmayabilir.

En azından, eklentinizin kullanılabileceği tüm farklı işlem türleri için uygun yetenek denetimlerini yapın.

15
eddiemoya

WordPress.org'daki Host Eklentileri

Hosting eklentileri için SVN repository uygulamasını WordPress.org üzerinde kullanın. Kullanıcı deneyimini daha kolay güncellemenizi sağlar ve daha önce SVN'yi hiç kullanmadıysanız, onu haklı çıkaran bir bağlamda kullanarak gerçekten anlamanızı sağlar.

14
pixeline

Kodunuzu düzenleyin

Yapıldığı sırada yazılmayan kodları okumak çok zor. Öncelikle/request, tanımlayın, wp_enqueue_style & _script, vb., Ardından eklenti/temanın ihtiyaç duyduğu işlevleri ve en sonunda oluşturucu (örn. Yönetici ekranı, temayla bütünleşen şeyler vb.).

Css ve js gibi şeyleri kendi klasörlerinde ayırmaya çalışın. Ayrıca bunu, dizi yassılaştırıcılar ve benzerleri gibi yalnızca yardımcı olan işlevlerle yapın. "Ana" dosyayı olabildiğince temiz ve kolay okunması, bir yıl içinde güncelleme yapmaya çalıştığınız ve daha uzun süredir kodu görmediğiniz zaman, kullanıcılara, geliştiricilere ve size yardımcı olacak bir yoldur.

Sıklıkla tekrarladığınız bir yapıya sahip olmak da iyidir, bu yüzden her zaman yolunuzu bulursunuz. Farklı projeler üzerinde bilinen bir yapının geliştirilmesi, bunu daha iyi hale getirmeniz için zaman kazandıracak ve müşteriniz başka bir geliştiriciye geçse bile, "kaos bıraktığını" asla duymayacaksınız. Bu itibarınızı arttırır ve uzun vadeli bir hedef olmalıdır.

12
kaiser

Eklenti Ayarlarını İçe/Dışa Aktar

Eklentiler arasında yaygın değildir, ancak eklentiniz (bazılarında) ayarlara sahipse, gerekir yapılandırma ve kullanıcı girişi gibi verilerin İçe Aktar/Ver'i sağlar .

İthalat/İhracat bir eklentinin kullanılabilirliğini arttırır.

Böyle bir ithalat ve ihracat işlevselliğine (ve aynı zamanda bir geri alma mekanizmasına sahip) sahip örnek bir eklenti Breadcrumb NavXT (Wordpress Plugin) (tam açıklama: orada benim için bazı küçük kodlar, çoğu mtekk tarafından yapıldı) .

İlgili

12
hakre

Tarzı ile ölmek

düzgün bir şekilde ölün Eklentilerin tümü (ve hatta temaları) işlevleri kullanıcıya ne olduğu hakkında biraz bilgi vermek için kritik yerlerde wp_die() işlevini kullanmalıdır. Php hataları can sıkıcı ve wp_die, kullanıcıya, eklentinin (veya onların) yanlış yaptığı hakkında Nice tarzı bir mesaj verebilir. Ayrıca, kullanıcı hata ayıklamayı devre dışı bıraktıysa, eklenti bozulur.

wp_die() işlevini kullanmak ayrıca eklentilerinizin/temalarınızın wordpress testsuite ile uyumlu olmasına yardımcı olur.

11
kaiser

Kullanıcılar için Yardım Ekranları sağlayın

RTFM (yardım tıkla) sorusunu tekrar tekrar cevaplamak zorunda kalmak yerine, bir cevap olarak söylemek daha iyidir.

/**
  * 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: (kaiser'den gelen yorumları görün): yukarıdaki örnek bir sınıfta kullanılacak

11
edelwater

Genişletilebilir Formlar Teklif Et

Bir eklenti veri girişi yapma imkanı sunduğunda, her zaman en sonunda "gönder" ve/veya "sıfırlama" düğmesinden hemen önce bir kancaya sahip olmalıdır, böylece geliştiriciler formu yalnızca alanlarla değil, düğmeleri de kolayca genişletebilirler.

Bakınız: Ayarlar API'si

İlgili

10
kaiser

doğrudan değil, her zaman Kanca ile işlevi içerir.

Örnek:

  • İçin kullanmayın eklenti sınıf kanca olmadan yeni yoluyla dahil

  • Hook plugins_loaded kullanın

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

Güncelleme: küçük bir canlı örnek: Eklenti-svn-trunk-sayfa ve sözde bir örnek

//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

Ayrıca multisite kurulumunda mu_plugins_loaded ile yükleyebilirsiniz, eylem referansı kodeksine bakın: http://codex.wordpress.org/Plugin_API/Action_Reference Ayrıca burada, bu kanca ile wP'nin nasıl dahil edildiğini göreceksiniz: http://adambrown.info/p/wp_hooks/hook/plugins_loaded?version=2.1&file=wp-settings.php Bunu çok sık kullanıyorum ve çok zor ve erken değil, zor bir sınıf olarak daha iyi ();

9
bueltge

Eklenti açıklamanız, eklentinizin işlevlerini doğru şekilde ayrıntılandırmalıdır. 10 tane özellikli eklenti var. Hepsi özellikli yayınlar gösteriyor, ancak birçoğunun farklı özellikleri var. Açıklamasını okuyarak eklentinizi benzer eklentilerle karşılaştırmak kolay olmalı.

Gerçekten çok basit olmadığı sürece eklentinizin ne kadar basit olduğu konusunda övünmekten kaçınmalısınız. Ayarlara bağlantı gibi açıklamaya faydalı bağlantılar eklemelisiniz.

8
Greg

GPL Uyumlu Lisansı Altındaki Lisans Eklentileri

Eklentiler ve temalar olmalıdır WordPress uyumlu bir lisans altında lisanslanmalıdır. Bu, WordPress ile "program" olarak yeniden dağıtılmalarını sağlar. Önerilen bir lisans: GPL . Eklentiyle birlikte verilen tüm kod kütüphanelerinin aynı lisansla uyumlu olmasına dikkat edin.

(Bu geçmişte bir problem olmuştur ve ciddi tartışma konusu ve hem de mevcut .)

8
EAMann

Uzak Veri Kaynaklarının ve Web Hizmetlerinin Yan Etkilerini En Aza İndirin

Bir Eklenti should Önbellek/Kalkan Web Hizmeti ve/veya XMLRPC/SOAP önbellekleme/veri sağlayıcı katmanı aracılığıyla talep eder eğer bunları ön istekleri beklememek için kullanıyorsanız yavaş) web servis yanıtı.

Buna RSS beslemesi ve diğer sayfaların indirilmesi de dahildir. Eklentileri arka planda veri talep edecek şekilde tasarlayın.

Mümkün olan bir ADIM şudur (Örnek olarak ping.fm'a gönderme yapın): Bir tampon tablosu oluşturun, diyelim ki: ping_fm_buffer_post (tarih, saat, mesaj, mesaj zamanı, durum)

  1. Güncellemeyi her zaman ping.fm'e göndermek istediğinizde, bu tabloya ekleyin.
  2. Şimdi, bu verileri işlemek için bir eklenti oluşturmamız gerekiyor. Bu eklenti henüz gönderilmemiş her güncellemeyi kontrol etmek için crontab üzerinden çalışacaktır
  3. Bu tabloya sahip olduğumuz için, ping.fm'e gönderilen her iletiyi listeleyebilir ve her gönderinin durumunu kontrol edebiliriz. Pinginger'ın tarafında bir sorun olursa, onu tekrar gönderebiliriz.
7
hakre

Eklentinizi test edin

Eklenti geliştirme ortamımızda kesinlikle bazı test araçlarına sahip olmalıyız.

bu cevaba göre / Ethan Seifert bir test sorusuna göre, bunlar takip edilecek iyi uygulamalardır:

  • Birim Testiniz, bir sınıfın gerçekleştirebileceği en küçük davranış miktarını test etmelidir.
  • İşlevsel test seviyesine ulaştığınızda, kodunuzu Wordpress bağımlılıkları ile test edebileceğiniz yer burasıdır.
  • Eklentinizin ne yaptığına bağlı olarak - kimlikleri kullanarak DOM’daki verilerin varlığını test eden Selenyum tabanlı testleri kullanmayı düşünün
7
Fernando Briano

Uygun İsimler Kullanın

Ad kancaları ve filtreleri (sınıflar, işlevler ve değişkenler), yani insanlar onları bir yılda bile tanımlayabilir, daha fazla hatırlamadıkları zaman, o kek parçasını veya nerede kod geliyor. Kanca/filtre adlarının uzaması önemli değil. Ör. youruniquename_hook/filter_whatitdoes.

  • Dosyanız "dbdbInit" adında bir sınıf içeriyorsa, sınıfı içeren dosya "dbdbInit.class.php" olarak adlandırılmalıdır.
  • dbdbInit- class'ınızın içine girdiyseniz, ex'i kaydeden bir işlev. custom_post_types, sonra register_custom_post_types() olarak adlandırın.
  • Custom_post_types adlarını içeren bir dizi aldıysanız, dizinin $custom_post_type_names atandığı değişkeni çağırın.
  • Bir dizi işleyen bir işlevin varsa function array_handler( $array ) { // handle the array} yaz.
  • Sadece işaretlerin ne yaptığını/ismin nerede olduğunu bilecek şekilde adlandırmaya çalışın.

Başka bir şey: Öyleyse bir şeyleri hata ayıklamak zorunda kalırsanız, tüm vakaların% 99'unda tüm mesajlarınızı yalnızca kodunuz için değil, aynı zamanda wordpress için de alırsınız. Öyleyse, aynı öneki kullanmaya çalışın. Sınıflarınız, genel işlevler ve değişkenler/nesneler için "dbdb". Bu sayede yüzlerce dosya arasında kolayca bulabilirsiniz. (Wordpress, temanızdan önce 64 dosya yükler ve yaklaşık 1.550 işlev kullanır, kancalar ve filtreler hakkında konuşmaz.)

6
kaiser

Gelecekteki WordPress ve tema sürümleri ile ilgilen

Not: Bu tavsiyeyi yeniden okuduktan sonra, şimdi bu uygulamadan geri gidiyorum, çünkü her işlevi kontrol etmek sitenizi yavaşlatabilir.

İşlevlerin kullanımdan kaldırılıp bırakılmadığını kontrol edin doğrudan temanızda.

Bu bir "böyle olabilir" örneğidir.

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();

Doğru/en iyi uygulama hatası işleme için bu cevaba bakınız: link

$ Nedenini bile fonksiyona bırakabilirsiniz. Bu, sizin ve kullanıcılarınızın temanızdaki değişebilecek işlevleri veya sınıfları izlemenize yardımcı olur.

6
kaiser

WordPress Kodlama Standartlarını Kullan

http://codex.wordpress.org/WordPress_Coding_Standards

Çalıştığınız kodu vs. başka birinin bir araya getirdiği kodu güncellemenin ne kadar kolay olduğunu biliyor musunuz? Kodlama standartları, bir proje üzerinde çalışan herhangi bir geliştiricinin içeri girip neler olduğunu görmesini kolaylaştırır.

Eklentinizin veya temanızın size ait olduğunu biliyoruz ve çizgilerinizi kırma ve kaşlı ayraçları ekleme şekliniz kişiliğinizin bir ifadesidir. Her girinti, dikkatlice düşünülmüş bir ifadedir. Ancak, özel kodunuzla, kodunuz çekirdek uygulamada olmasa bile, WordPress’e katkıda bulunuyorsunuz. Kodlama standartları, geliştiricilerin kodunuzla hızlı bir şekilde hızlanmalarına yardımcı olur.

6
gabrielk

WordPress çekirdek kodundan ayırma

Eklenti gerekir eklenti kodunu WordPress kodundan ayırmak için WordPress API'sinin etkisini gereken minimum seviyeye indirgeyin . Bu, WordPress kod tabanı içindeki değişikliklerin eklenti üzerindeki etkisini azaltır. Ek olarak bu, eklenti kodunuzun çapraz sürüm uyumluluğunu geliştirir.

Bu, WordPress işlevlerini kullanmamak (bunları, mevcut işlevleri yeniden kullan) gibi kullanın önerdiği anlamına gelmez), ancak kodunuzu WordPress işlevleriyle çok fazla örmek değil, eklenti işletme mantığınızı ayırmak WordPress işlevselliğinden.

6
hakre

Eklenti çıktı dizgileri için wp seçeneklerini kullanın

Eklentinin kolayca kullanılmasını ve özelleştirilebilir hale getirilmesi için, tüm çıktı dizelerinin değiştirilebilir olması gerekir. Bunu yapmanın en iyi yolu, çıkış dizelerini saklamak ve varsayılan değerleri değiştirmek için arka uç sağlamak için wp seçeneklerini kullanmaktır. Eklenti, eklenti arka ucunu kullanarak kolayca değiştirilemeyen görüntülenen dizeleri kullanmamalıdır.

Örneğin: Sosyal - size simgeler bölümü "paylaş ve hoşlanın:" bölümünden önce görünen cümleyi değiştirebilmenizi sağlar

5
hannit cohen

Kancaları kaldırın, etkinleştirin ve devre dışı bırakın

Bunun için üç farklı kanca var:

  • register_uninstall_hook(); öğesini kaldır
  • Devre dışı bırakılması register_deactivation_hook();
  • Aktivasyon register_activation_hook();

Çalışan bir örnek ile ayrıntılı bir talimat burada bulunabilir. .

3
kaiser