WordPress tema ve eklentileriniz için uzak kontrollü lisans sistemi mi arıyorsunuz? O halde bu yazı sizin derdinize derman olacak 🙂
WordPress tema ve eklenti geliştirmeye başlayacak kişilere yararlı olacak bir sistemdir. Sizin izin verdiğiniz alan adı listesine göre kontrol yaparak yazılımı çalıştırır veya çalıştırmaz. Bu işlemi ilk kurulumda ve haftada bir kez yapar. Ayrıca lisans sunucusuna erişim yoksa herhangi bir kontrol işlemi yapmaz.
Şimdi bu sistemin kurulumuna geçelim.
İlk olarak temanızın veya eklentinizin ana dizinine lisans.php oluşturun.
<?php
/**
* WordPress Tema ve Eklentiler İçin Uzak Sunucu Kontrollü Lisans Sistemi
* @author Cagri Uckan
* @package WordPress
**/
class Kan_Licensing_System {
private $_server;
private $_option = 'kan_license_data'; // lisans datasının kaydedileceği tablo adı
public function __construct($server) {
$this->_server = $server;
add_action('init', array($this, 'result')); // tüm siteyi patlatır
// add_action('admin_init', array($this, 'result')); // sadece admin panelini patlatır
add_filter( 'switch_theme', array($this, 'clear_scheduled') ); // tema değiştirdiğinde görevi temizler
add_action( 'kan_license_job', array($this, 'check') ); // görevin tanımı
if ( !wp_next_scheduled( 'kan_license_job' ) ) {
wp_schedule_event( time(), 'weekly', 'kan_license_job' ); // haftalık olarak tekrarlanan bir görev oluşturur
}
}
/*
* Görevi Temizle
*/
function clear_scheduled() {
wp_clear_scheduled_hook( 'kan_license_job' );
}
/*
* Site Domaini
*/
function site_domain() {
$name = $_SERVER['HTTP_HOST'];
$domain = preg_replace("(^https?://)", "", $name );
if (substr($domain, 0, 4) == 'www.') {
$domain = substr($domain, 4);
}
$domain = explode("/", $domain);
return $domain[0];
}
/*
* Lisans Kontrolü
*/
function check() {
$current_domain = $this->site_domain();
$args = array(
'timeout' => '15',
'sslverify' => false
);
$request = wp_remote_get( $this->_server, $args );
if( is_wp_error( $request ) ) {
return false;
}
$body = wp_remote_retrieve_body( $request );
$data = json_decode( $body );
if( ! empty( $data ) ) {
if (!$data->domains->$current_domain) {
update_option($this->_option, 'invalid'); // geçersiz lisans
} else {
if ($data->domains->$current_domain->status == 'expired')
update_option($this->_option, 'expired'); // süresi dolan lisans
elseif ($data->domains->$current_domain->status == 'deactive')
update_option($this->_option, 'deactive'); // etkisiz hale getirilen lisans
else
update_option($this->_option, 'active'); // geçerli lisans
}
}
}
/*
* Sonuç
*/
function result() {
$option = get_option($this->_option) ? get_option($this->_option) : '';
if($option == 'active')
return false;
elseif($option == 'invalid')
wp_die('Lisansınız geçersiz!');
elseif($option == 'expired')
wp_die('Lisansınızın süresi dolmuş.');
elseif($option == 'deactive')
wp_die('Lisansınız etkisiz hale getirilmiştir.');
}
}
Daha sonra uzak sunucunuzun herhangi bir yerine server.json adında bir dosya oluşturun. Ve lisanslı domainleri ekleyin. Örnek bir kullanım şöyledir.
{
"domains": {
"localhost": {
"status": "active"
},
"google.com": {
"status": "expired"
}
}
}
Kullanabileceğiniz durumlar şunlardır;
- active
- expired
- deactive
Daha sonra temanızın functions.php dosyasına, eklentinizin ise ana dosyasına aşağıdaki kodu ekleyin. Link kısmına az önce uzak sunucuda oluşturduğunuz json dosyasının linkini ekleyin.
Kaynak: GitHub
Hocam kullancı lisans php dosyasını silerse ne olacak?
Tema lisans.php dosyası olmadan çalışmamalı. functions.php dosyasına bir fonksiyon ekleyin. Bu fonksiyon ilk tema kurulumunda çalışacak şekilde olmalı. lisans.php dosyasının varlığını kontrol etsin. Varsa tema çalışsın yoksa uyarı versin/siteyi çökertsin. Functions.php dosyasını da şifreleyeceğiniz için kullanıcı bu kontrolü devre dışı bırakmaz.
Eklenti için nasıl bir lisans dosyası eklenebilir ?
Aynı yolu kullanabilirsiniz.