Premium WordPress Eklentilerimiz İçin Tam Besteci Desteğini Nasıl Oluşturduk?
Composer, PHP için tercih edilen bağımlılık yöneticisidir. Proje bağımlılıklarının bir listesini bildirmenize izin verir ve bunları, düğüm için npm benzer şekilde doğrudan komut satırından yükleyip güncelleyecektir. 2015 yılında Gilbert, WordPress temalarınızı ve eklentilerinizi Composer kullanarak yönetme hakkında yazmıştı. Delicious Brains sitesini yönetmek için benzer bir yaklaşım benimsedik ve WordPress Packagist sayesinde ihtiyaç duyduğumuz eklentilerin çoğunu Composer aracılığıyla yükleyebiliyoruz. Ayrıca WordPress Composer Fork kullanarak WordPress çekirdeğini güncelliyoruz, bu da sitemizin %90'ının artık Composer tarafından yönetildiği anlamına geliyor.
Besteci Muamması
WordPress Packagist'te bulunan ücretsiz eklentiler için her şey yolunda ve züppe, peki ya premium olanlar? Uzun bir süredir premium eklentilerimizin Composer aracılığıyla yüklenmesine izin veriyoruz, ancak önemli bir uyarımız var: Her eklentinin yalnızca en son sürümü yüklenebilir. composer.json dosyanızda hangi sürümü belirtirseniz seçin, her zaman en son sürümü indirir.
Mevcut yaklaşımla ilgili başka bir sorun da composer.json dosyanızın bir lisans anahtarına bağlı olmasıdır (bazen hem WP Migrate DB Pro hem de WP Offload S3 kullanıyorsanız birden çok anahtar). Yüzeyde, bu çok önemli bir şey gibi görünmeyebilir, ancak ya kısa süre önce composer.json dosyanıza erişimi olan bir serbest geliştiriciyle çalıştıysanız ve o zamandan beri yollarını ayırdıysanız? Artık lisans anahtarınıza sahipler, bu da parasını ödediğiniz yazılıma erişmeye devam edebilecekleri anlamına geliyor. Hiç hoş değil!
Sağladığımız çözüm teknik olarak eklentilerimizi Composer üzerinden kurmanıza izin verse de, en iyi ihtimalle yarım kalmış bir çözümdü. Ancak yine de çoğu premium eklenti mağazasının sağladığından daha iyiydi. Çoğu, Composer'ı hiç desteklemez. Yapmayanlar için, her eklenti için her siteye giriş yapmamız, zip dosyasını indirmemiz, sıkıştırmayı açmamız, eklenti klasörünü değiştirmemiz ve dosyaları git'e kaydetmemiz gerekiyor. İdeal değil, ama işi hallediyor.
Tam Besteci Desteği ile Tanışın
Bugün itibariyle, eklentilerimiz için artık tam Besteci desteği sunduğumuzu duyurmaktan memnuniyet duyuyorum. 🎉
Bu, eklentilerimizin eski sürümlerini sürüm kısıtlamalarını kullanarak yükleme yeteneğini içerir. Ek olarak, Composer API anahtarlarının tanıtımıyla lisans anahtarlarını composer.json dosyasından tamamen ayırdık. Yollarınızı ayırdığınız o serbest meslek sahibini hatırlıyor musunuz? Artık Composer API anahtarını silebilirsiniz ve artık yazılım indirmelerinize erişemezler.
Yeni iş akışına bir göz atalım.
Besteci Kullanımı
Composer API anahtarlarınızı yönetebileceğiniz Hesabım'a yeni bir Ayarlar sekmesi ekledik. Herhangi bir sayıda anahtar eklenebilir. Kolaylık sağlamak için bunları da etiketleyebilirsiniz.

Composer API anahtarları, bireysel lisanslara bağlı değildir. Her anahtar, aktif aboneliğinizin olduğu tüm ürünlerimize erişim sağlayacaktır. Buna ileride ekleyebileceğimiz ürünler de dahildir, bu nedenle yeni bir eklenti satın alırsanız veya mevcut bir lisansı yükseltirseniz bunları yeniden oluşturmanız gerekmez. 😉
Bir API anahtarına sahip olduğunuzda, depo kaynağımızı composer.json dosyanıza şu şekilde ekleyebilirsiniz:
"repositories": [ { "type":"composer", "url":"https://composer.deliciousbrains.com/{COMPOSER_API_KEY}" } ]
Ardından istediğiniz paketleri ve sürüm kısıtlamalarını ekleyebilirsiniz. Her zaman bir eklentinin en son sürümünde olduğunuzdan emin olmak için paket sürümü olarak “*” kullanabilirsiniz.
{ "require": { "deliciousbrains-plugin/wp-migrate-db-pro": "1.8.1", "deliciousbrains-plugin/wp-migrate-db-pro-media-files": "1.4.9", "deliciousbrains-plugin/wp-offload-s3": "*" } }
composer install çalıştırmak size her alanda yeşil vermelidir!

Eklenti dosyaları otomatik olarak wp-content/plugins yüklenir, ancak gerekirse konumu özelleştirebilirsiniz. Daha fazla ayrıntı için WP Migrate DB Pro ve WP Offload S3 belgelerine bakın.
Nasıl İnşa Ettik
Mayıs 2017'de tam Composer desteği eklemeye karar verdik ve bir GitHub sorunu oluşturduk. Evan, yerleşik Besteci uzmanımızdı, bu nedenle proje gereksinimlerini özetledi.
Buradaki fikir, wpackagist.org kullanımı söz konusu olduğunda kullanıcıların zaten aşina oldukları iş akışını taklit etmek olacaktır, tek fark Composer deposu URL'sine eklenen benzersiz anahtardır.
Kısa bir süre sonra Brad, GitHub sorununa kullanıcı arayüzü için maketler ekledi, ancak sitenin yeniden tasarımı başlatılana kadar uygulamayı ertelemeye karar verdik. Bunun nedeni, hem eski hem de yeni temalar için yapılması gereken Hesabım'da yapılması gereken değişikliklerdi.
Peki, gereksinimler nelerdi?
paketler.json
Composer'ın paket keşfini gerçekleştirmesi için yeni bir /packages.json uç noktası gerekliydi. https://composer.deliciousbrains.com/{COMPOSER_API_KEY}/packages.json'u seçtik, ancak bu uç noktayı mevcut API'mizi gösterecek şekilde Nginx'te yeniden yazıyoruz.
rewrite ^/([a-zA-Z0-9]+)/packages.json$ /?wc-api=delicious-brains&request=composer_packages&composer_key=$1 last;
Bu uç noktanın, mevcut her sürüme ek olarak havuzumuzun sorumlu olduğu paketlerin bir listesini aşağıdaki biçimde sağlaması gerekir:
{ "packages": { "vendor/package-name": { "1.0.0": { @composer.json }, "1.0.1": { @composer.json }, "1.0.2": { @composer.json } } } }
Bu bize bir sorun sundu. Bu meta verileri oluşturabilmemiz için, eklentilerimizin yıllar içinde yayınladığımız her sürümünü bilmemiz gerekiyordu ve bu, veritabanında daha önce depolamadığımız bir şeydi. WordPress'teki ürün gönderi tipimiz yalnızca indirilebilen mevcut sürümü kaydeder.
Neyse ki, tüm ürün indirmelerimizi, şimdiye kadar piyasaya sürülen tüm sürümleri içeren tek bir S3 kovasında saklıyoruz. Ayrıca standart bir şekilde adlandırılırlar, örneğin: wp-migrate-db-pro-1.0.zip . Sitede zaten WP Offload S3 kullandığımız için, nesneleri listelemek ve sürümleri çıkarmak için paketlenmiş AWS SDK'yı kullanabiliriz. Bu aramayı, WordPress'te bir ürünü her güncellediğimizde, ancak yalnızca ürün sürümü değiştiğinde gerçekleştiririz. Bu veriler daha sonra Redis'te önbelleğe alınan seçenekler tablosuna kaydedilir.
$objects = $as3cf->get_s3client()->listObjects( [ 'Bucket' => 'downloads.deliciousbrains.com', 'Prefix' => 'wp', ] )->getPath( 'Contents/*/Key' ); $plugins = array(); foreach ( $objects as $object ) { $file = self::get_name_and_version( $object ); if ( ! $file ) { continue; } $plugins[ $file['name'] ][] = $file['version']; }
Yukarıda özetlenen package.json formatına geri dönersek, her packages.json { @composer.json } değerine sahip olduğunu fark edeceksiniz. Bu, her bir eklentinin composer.json dosyasında bulunan bilgiler olmalıdır, ancak eklentilerimizi bir tane ile birlikte göndermiyoruz. Bunun yerine, bunu her paket için dinamik olarak oluştururuz.
array( 'name' => $name, 'version' => $version, 'type' => 'wordpress-plugin', 'dist' => array( 'url' => self::get_download_url( $plugin, $version, $composer_key ), 'type' => 'zip', ), 'require' => array( 'composer/installers' => '~1.0', ), );
Bu çoğunlukla kendi kendini açıklayıcıdır. url anahtarı, API'mizde (aşağıya bakın) ZIP paketinin indirilebileceği başka bir uç noktaya işaret eder. type ve require bloklar, paketler için kurulum konumunu belirlememize izin verir. Varsayılan olarak, /vendor yüklenirler, ancak composer/installers kullanmak, bir type wordpress-plugin belirterek varsayılan konumun /wp-content/plugins olmasına izin verir.
Uç Noktayı İndir
İndirme uç noktası, Composer'ın, packages.json uç noktamızda bulunduğunda, istenen paketi indirmeye çalıştığı yerdir. Paketin, verilen Composer API anahtarı için gerçekten erişilebilir olduğunu burada doğrularız. Anahtar, talep edilen paket için aktif aboneliği olan bir kullanıcıya eklenirse indirme başlar. Aksi takdirde, Besteci başarısız olur ve ilgili bir hata gösterilir.

Ve hepsi bu kadar!
Eklentilerimizi daha önce Composer aracılığıyla kuruyorsanız, yeni sistemi incelemenizi ve yakında yükseltme yapmanızı tavsiye ederim. Eski sistem şimdilik çalışmaya devam edecek, ancak sonunda kullanımdan kaldırılacak.
Tüm Eklenti Mağazalarının Çağrılması
Premium eklentilerinizi dağıtmak için Composer desteği eklemek, ilk bakışta göz korkutucu bir görev gibi görünebilir, ancak burada gösterdiğimiz gibi, nispeten basittir. Umuyoruz ki bu makale birkaç eklenti mağazasını harekete geçmeye teşvik eder, böylece bir topluluk olarak Composer ile premium eklentileri yönetme deneyimini iyileştirebiliriz. Kullanmanız gereken eklentilerinizi Composer ile uyumlu hale getirmek mi istiyorsunuz? Bu makaleye göz atın.
Güncelleme: O zamandan beri, premium eklentilerimiz için Besteci desteğini yeniden geliştirdik. Tüm detayları bu gönderide öğrenin.
Daha önce hiç kendi Besteci deponuzu oluşturdunuz mu? Yorumlarda bize bildirin.
ev borcu WordPress sitesi
