Membuat lisensi dikendalikan memperbarui sistem: melakukan Update
() translation by (you can also view the original English article)
Dalam tutorial pertama dua seri, kami telah membangun sebuah plugin untuk mengelola lisensi perangkat lunak. Dalam bagian 1, kami membangun tool administrasi yang diperlukan untuk menambahkan produk dan lisensi, dan di bagian 2, kami menciptakan sebuah API yang plugin dan tema dapat digunakan untuk mengakses informasi lisensi dan produk.
Sekarang, saatnya untuk mengikat semua bersama-sama dan membuat WordPress tema dan WordPress plugin yang menggunakan server lisensi untuk memeriksa pembaruan. Untuk melakukan ini, kita akan menciptakan sebuah class yang dapat dipakai ke WordPress plugin atau tema kode untuk membuat tema atau plugin yang menggunakan situs WordPress menjalankan plugin WP lisensi Manager kami untuk memeriksa pembaruan.
Dalam tutorial ini, Anda akan belajar tentang topik-topik berikut:
- Bagaimana untuk menghubungkan ke sistem pembaruan tema WordPress.
- Bagaimana untuk menghubungkan ke sistem update plugin WordPress (ya, dua-duanya terpisah — tetapi sama — dan harus dialamatkan satu-satu).
- Bagaimana memanggil API eksternal dari WordPress.
Fungsi kita akan menciptakan dalam tutorial ini mengharuskan kita untuk menggali lebih dalam bagaimana WordPress bekerja di belakang layar, yang membuat tutorial ini sedikit lebih maju daripada dua yang pertama dalam seri. Namun, kita akan pergi melalui setiap langkah secara menyeluruh, jadi jika Anda telah mengikuti tutorial ini jauh, tidak harus menjadi tidak masalah menyelesaikan satu ini.
Seperti dalam bagian sebelumnya, Anda dapat mengikuti tutorial menulis kode Anda sendiri seperti kita pergi, atau download class akhir dan menggunakannya sebagai referensi.
Mari kita mulai.
1. menyiapkan lingkungan pengujian
Untuk membangun lisensi manajer klien class dan untuk menguji, Anda membutuhkan lingkungan pengujian dengan komponen-komponen berikut:
- Server WordPress yang menjalankan plugin WP lisensi Manager yang dibuat di bagian 1 dan 2 dari seri tutorial. Kita akan menyebutnya license server.
- Server WordPress untuk menjalankan plugin dan tema yang akan diperbarui. Kita akan menyebutnya tes server.
- Sebuah tema untuk pengujian sistem pembaruan.
- Sebuah plugin untuk pengujian sistem pembaruan.
Anda dapat menggunakan salah satu dari kamu yang ada tema dan plugin untuk pengujian, atau membuat placeholder tanpa konten riil atau fungsionalitas selain update, mengikuti petunjuk di bawah ini.
Langkah 1: Buat WordPress Tema untuk pengujian
Dalam wp-content/themes
, membuat sebuah direktori baru yang disebut hello-world-theme
(misalnya).
Dalam direktori tersebut, menambahkan file style.css
dengan judul tema yang standar. Hal ini diperlukan untuk WordPress menemukan tema.
1 |
/*
|
2 |
Theme Name: Hello World Theme
|
3 |
Description: A test theme that says Hello.
|
4 |
Version: 0.1
|
5 |
*/
|
Menambahkan sebuah file index.php
. Ini bisa kosong, atau Anda dapat menggunakan pengganti berikut HTML:
1 |
<html>
|
2 |
<head>
|
3 |
<title>Hello, World</title> |
4 |
</head>
|
5 |
<body>
|
6 |
<h1>Hello, World!</h1> |
7 |
</body>
|
8 |
</html>
|
Untuk pengujian lisensi manajer klien class, kita masih perlu functions.php
file. Ini adalah dimana Anda akan menginisialisasi class yang akan dibuat dalam tutorial ini-untuk saat ini, Anda dapat meninggalkan file kosong.
Dengan konfigurasi ini minimal, WordPress akan menerima tema tanpa kesalahan. Aktifkan sekarang.
Sekali Anda telah memutuskan pada tema untuk menggunakan, tambahkan produk untuk menggambarkannya pada license server. Memanggil produk baru "Hello World Theme" dan ditetapkan nomor versi untuk sesuatu yang lebih tinggi dari 0,1
kita didefinisikan di header tema di atas.
Tandai bagian "post slug" bagian produk Permalink (hello-world-theme
) karena akan digunakan sebagai ID Produk ketika berbicara dengan lisensi manager API.
Langkah 2: Buat sebuah Plugin untuk pengujian
Membuat plugin kosong tes yang bahkan lebih cepat daripada menciptakan tema tes. Semua yang Anda butuhkan adalah file PHP dengan bare-bones plugin header.
Dalam wp-content/plugins
, membuat sebuah direktori yang disebut hello-world-plugin
dan dalam hal ini, file, hello-world.php
, dengan konten berikut:
1 |
<?php
|
2 |
/*
|
3 |
Plugin Name: Hello World Plugin
|
4 |
Description: A test plugin that says Hello.
|
5 |
Version: 0.1
|
6 |
*/
|
Plugin adalah sekarang siap jadi pergi ke depan dan mengaktifkannya.
Seperti yang Anda lakukan untuk tema, menciptakan produk untuk plugin ini pada server lisensi manajer. Memanggil Produk "Hello World Plugin"-ini akan memberikan Anda id (slug) hello-world-plugin
— dan mengatur nomor versi untuk sesuatu yang lebih tinggi dari 0,1
didefinisikan dalam plugin header.
Sekarang bahwa Anda telah mengatur lingkungan pengujian Anda dan memiliki sebuah plugin dan tema siap untuk di testing, saatnya untuk memulai dengan lisensi manajer klien class itu sendiri.
2. menyiapkan License Manager Client Class
Mari kita mulai menciptakan License Manager Client class dengan membangun fungsi umum yang dibagikan oleh tema dan plugin. Seperti yang kita perlu menguji kode dalam beberapa konteks, kita akan mulai dengan tema dan menambahkan hal-hal tertentu di plugin setelah pembaruan tema bekerja.
Langkah 1: Membuat License Manager Client Class dan menginisialisasi itu
Dalam tema direktori (hello-world-theme
), menambahkan class baru yang disebut Wp_License_Manager_Client
(menggunakan file nama class-wp-license-manajer-client.php
). Kelas ini akan menyelenggarakan semua kode yang terkait dengan memeriksa lisensi dan penanganan tema update.
Sebagai file class ini dimaksudkan untuk dimasukkan dalam sejumlah WordPress tema dan plugin, surround dengan cek class_exists
. Dengan cara ini, jika ada banyak diinstal plugin dan tema yang menggunakan kelas ini, mereka tidak akan merusak sistem dengan mencoba untuk membuat class berkali-kali.
1 |
<?php
|
2 |
if ( ! class_exists( 'Wp_License_Manager_Client' ) ) { |
3 |
|
4 |
class Wp_License_Manager_Client { |
5 |
|
6 |
}
|
7 |
|
8 |
}
|
Mari kita lanjutkan dengan beberapa inisialisasi sebelum pindah ke fungsi sebenarnya.
Pertama, tambahkan beberapa variabel yang akan diinisialisasi dalam konstruktor class. Komentar kode menjelaskan variabel, dan saya akan menyebutkan mereka lagi ketika kita menggunakannya dalam kode.
1 |
/**
|
2 |
* The API endpoint. Configured through the class's constructor.
|
3 |
*
|
4 |
* @var String The API endpoint.
|
5 |
*/
|
6 |
private $api_endpoint; |
7 |
|
8 |
/**
|
9 |
* The product id (slug) used for this product on the License Manager site.
|
10 |
* Configured through the class's constructor.
|
11 |
*
|
12 |
* @var int The product id of the related product in the license manager.
|
13 |
*/
|
14 |
private $product_id; |
15 |
|
16 |
/**
|
17 |
* The name of the product using this class. Configured in the class's constructor.
|
18 |
*
|
19 |
* @var int The name of the product (plugin / theme) using this class.
|
20 |
*/
|
21 |
private $product_name; |
22 |
|
23 |
/**
|
24 |
* The type of the installation in which this class is being used.
|
25 |
*
|
26 |
* @var string 'theme' or 'plugin'.
|
27 |
*/
|
28 |
private $type; |
29 |
|
30 |
/**
|
31 |
* The text domain of the plugin or theme using this class.
|
32 |
* Populated in the class's constructor.
|
33 |
*
|
34 |
* @var String The text domain of the plugin / theme.
|
35 |
*/
|
36 |
private $text_domain; |
37 |
|
38 |
/**
|
39 |
* @var string The absolute path to the plugin's main file. Only applicable when using the
|
40 |
* class with a plugin.
|
41 |
*/
|
42 |
private $plugin_file; |
Kemudian, tambahkan konstruktor untuk menetapkan variabel contoh ini:
1 |
/**
|
2 |
* Initializes the license manager client.
|
3 |
*
|
4 |
* @param $product_id string The text id (slug) of the product on the license manager site
|
5 |
* @param $product_name string The name of the product, used for menus
|
6 |
* @param $text_domain string Theme / plugin text domain, used for localizing the settings screens.
|
7 |
* @param $api_url string The URL to the license manager API (your license server)
|
8 |
* @param $type string The type of project this class is being used in ('theme' or 'plugin')
|
9 |
* @param $plugin_file string The full path to the plugin's main file (only for plugins)
|
10 |
*/
|
11 |
public function __construct( $product_id, $product_name, $text_domain, $api_url, |
12 |
$type = 'theme', $plugin_file = '' ) { |
13 |
// Store setup data
|
14 |
$this->product_id = $product_id; |
15 |
$this->product_name = $product_name; |
16 |
$this->text_domain = $text_domain; |
17 |
$this->api_endpoint = $api_url; |
18 |
$this->type = $type; |
19 |
$this->plugin_file = $plugin_file; |
20 |
}
|
21 |
}
|
Untuk lebih memahami parameter ini digunakan untuk apa, dan link class ke tema Anda, buka file functions.php
tema Anda dan membuat sebuah instance class Wp_License_Manager_Client:
1 |
<?php
|
2 |
require_once( 'class-wp-license-manager-client.php' ); |
3 |
|
4 |
if ( is_admin() ) { |
5 |
$license_manager = new Wp_License_Manager_Client( |
6 |
'hello-world-theme', |
7 |
'Hello World Theme', |
8 |
'hello-world-text', |
9 |
'https://<URL_TO_LICENSE_SERVER>/api/license-manager/v1'
|
10 |
);
|
11 |
}
|
Mari kita pergi melalui kode baris demi baris:
Baris 2: Termasuk lisensi manajer class yang kita buat.
Baris 4: Lisensi manajer klien adalah hanya diperlukan dalam admin layar, sehingga untuk tidak membuat objek yang tidak perlu, memeriksa apakah pengguna adalah melihat salah satu WordPress admin layar atau tidak.
Baris 5-9: membuat instance Wp_License_Manager_Client
yang menggunakan nilai parameter berikut:
-
hello-world-theme
: slug (id) Produk (theme) pada license server. -
Hello World Theme
: nama tema. Ini akan digunakan untuk pengaturan layar dan lain situasi di mana kita perlu untuk merujuk pada produk oleh namanya. -
Halo-world-text
: teks domain tema Anda menggunakan untuk lokalisasi. Menggunakan domain teks yang sama untuk lisensi manajemen layar membuatnya lebih mudah untuk localizers untuk menerjemahkan seluruh tema sekaligus. -
http://<URL_TO_LICENSE_SERVER>/api/license-manager/v1
: ini adalah URL dengan api yang kami ciptakan dalam bagian sebelumnya dari seri tutorial. MenggantiURL_TO_LICENSE_SERVER
dengan URL untuk situs WordPress di mana Anda menginstal plugin WP lisensi Manager.
Sisa dua parameter dalam konstruktor hanya diperlukan ketika class digunakan dengan sebuah plugin, jadi kita akan meninggalkan mereka ke nilai default untuk sekarang dan kembali kepada mereka kemudian dalam tutorial ketika kita pindah ke plugin update.
Langkah 2: Buat pengaturan layar untuk memasukkan kunci lisensi
Hal pertama yang pengguna harus dapat menggunakan lisensi manager API adalah lisensi key berlaku — dan cara untuk memasukkannya ke dalam tema.
Untuk ini, sekarang kita akan menciptakan layar pilihan baru.
Seperti yang kita telah menciptakan sejumlah serupa layar dalam bagian 1 dan 2 dari seri tutorial, aku akan pergi melalui kode hanya sebentar.
Perhatikan bahwa setiap bagian dari fungsionalitas yang masuk ke dalam lisensi manajer klien class harus diaktifkan dengan melampirkan salah satu class yang fungsi WordPress action atau filter. Dengan cara ini, segala sesuatu tetap bersih dan mudah untuk dikelila. Untuk menjaga hal-hal sesederhana mungkin untuk pengembang tema yang akan menggunakan class ini, saya telah meletakkan semua inisialisasi dalam konstruktor class.
Tambahkan pengaturan layar hook terkait ke konstruktor, tepat di bawah kode inisialisasi kami menambahkan di langkah sebelumnya:
1 |
// Add actions required for the class's functionality.
|
2 |
// NOTE: Everything should be done through actions and filters.
|
3 |
if ( is_admin() ) { |
4 |
// Add the menu screen for inserting license information
|
5 |
add_action( 'admin_menu', array( $this, 'add_license_settings_page' ) ); |
6 |
add_action( 'admin_init', array( $this, 'add_license_settings_fields' ) ); |
7 |
}
|
Kemudian, membuat fungsi dua yang disebutkan, add_license_settings_page
dan add_license_settings_fields
. Perhatikan bagaimana kami menggunakan variabel $product_name
dan $text_domain
dari konstruktor ketika menentukan judul untuk halaman pengaturan.
1 |
/**
|
2 |
* Creates the settings items for entering license information (email + license key).
|
3 |
*/
|
4 |
public function add_license_settings_page() { |
5 |
$title = sprintf( __( '%s License', $this->text_domain ), $this->product_name ); |
6 |
|
7 |
add_options_page( |
8 |
$title, |
9 |
$title, |
10 |
'read', |
11 |
$this->get_settings_page_slug(), |
12 |
array( $this, 'render_licenses_menu' ) |
13 |
);
|
14 |
}
|
15 |
|
16 |
/**
|
17 |
* Creates the settings fields needed for the license settings menu.
|
18 |
*/
|
19 |
public function add_license_settings_fields() { |
20 |
$settings_group_id = $this->product_id . '-license-settings-group'; |
21 |
$settings_section_id = $this->product_id . '-license-settings-section'; |
22 |
|
23 |
register_setting( $settings_group_id, $this->get_settings_field_name() ); |
24 |
|
25 |
add_settings_section( |
26 |
$settings_section_id, |
27 |
__( 'License', $this->text_domain ), |
28 |
array( $this, 'render_settings_section' ), |
29 |
$settings_group_id
|
30 |
);
|
31 |
|
32 |
add_settings_field( |
33 |
$this->product_id . '-license-email', |
34 |
__( 'License e-mail address', $this->text_domain ), |
35 |
array( $this, 'render_email_settings_field' ), |
36 |
$settings_group_id, |
37 |
$settings_section_id
|
38 |
);
|
39 |
|
40 |
add_settings_field( |
41 |
$this->product_id . '-license-key', |
42 |
__( 'License key', $this->text_domain ), |
43 |
array( $this, 'render_license_key_settings_field' ), |
44 |
$settings_group_id, |
45 |
$settings_section_id
|
46 |
);
|
47 |
}
|
Kedua fungsi yang dibuat di atas mendefinisikan sejumlah callback untuk render halaman pengaturan dan bidang pengaturan. Tambahkan fungsi callback:
1 |
/**
|
2 |
* Renders the description for the settings section.
|
3 |
*/
|
4 |
public function render_settings_section() { |
5 |
_e( 'Insert your license information to enable updates.', $this->text_domain); |
6 |
}
|
7 |
|
8 |
/**
|
9 |
* Renders the settings page for entering license information.
|
10 |
*/
|
11 |
public function render_licenses_menu() { |
12 |
$title = sprintf( __( '%s License', $this->text_domain ), $this->product_name ); |
13 |
$settings_group_id = $this->product_id . '-license-settings-group'; |
14 |
|
15 |
?>
|
16 |
<div class="wrap"> |
17 |
<form action='options.php' method='post'> |
18 |
|
19 |
<h2><?php echo $title; ?></h2> |
20 |
|
21 |
<?php
|
22 |
settings_fields( $settings_group_id ); |
23 |
do_settings_sections( $settings_group_id ); |
24 |
submit_button(); |
25 |
?>
|
26 |
|
27 |
</form>
|
28 |
</div>
|
29 |
<?php
|
30 |
}
|
31 |
|
32 |
/**
|
33 |
* Renders the email settings field on the license settings page.
|
34 |
*/
|
35 |
public function render_email_settings_field() { |
36 |
$settings_field_name = $this->get_settings_field_name(); |
37 |
$options = get_option( $settings_field_name ); |
38 |
?>
|
39 |
<input type='text' name='<?php echo $settings_field_name; ?>[email]' |
40 |
value='<?php echo $options['email']; ?>' class='regular-text'> |
41 |
<?php
|
42 |
}
|
43 |
|
44 |
/**
|
45 |
* Renders the license key settings field on the license settings page.
|
46 |
*/
|
47 |
public function render_license_key_settings_field() { |
48 |
$settings_field_name = $this->get_settings_field_name(); |
49 |
$options = get_option( $settings_field_name ); |
50 |
?>
|
51 |
<input type='text' name='<?php echo $settings_field_name; ?>[license_key]' |
52 |
value='<?php echo $options['license_key']; ?>' class='regular-text'> |
53 |
<?php
|
54 |
}
|
Untuk meminimalkan resiko kesalahan ketik ketika mengetik nama bidang pengaturan, saya telah membuat fungsi helper, get_settings_field_name
, yang digunakan di seluruh snipet kode di atas. Fungsi helper lain, get_settings_page_slug
, digunakan untuk menentukan path ke layar pengaturan.
Tambahkan fungsi dua itu pada akhir class untuk membuat kode berjalan tanpa kesalahan:
1 |
/**
|
2 |
* @return string The name of the settings field storing all license manager settings.
|
3 |
*/
|
4 |
protected function get_settings_field_name() { |
5 |
return $this->product_id . '-license-settings'; |
6 |
}
|
7 |
|
8 |
/**
|
9 |
* @return string The slug id of the licenses settings page.
|
10 |
*/
|
11 |
protected function get_settings_page_slug() { |
12 |
return $this->product_id . '-licenses'; |
13 |
}
|
Fungsi menggunakan $product_id
dimasukan dalam konstruktor untuk membuat bidang pengaturan dan pengaturan halaman siput. Dengan cara ini, setiap tema atau plugin yang menggunakan class akan mendapatkan pengaturan mereka sendiri dan tidak akan ada konflik.
Halaman pengaturan siap dan tampak seperti ini:



Langkah 3: Menambahkan pengingat untuk pengguna
Sangat mudah bagi pengguna untuk melewatkan suasana seperti ini dan akhirnya bertanya-tanya mengapa tema tidak memperoleh pembaruan. Itulah mengapa itu adalah ide yang baik untuk membuat pengingat yang akan ditampilkan di admin, sampai pengguna mengkonfigurasi tema dan memasuki lisensi key.
Saatnya untuk action WordPress lain. action admin_notices
digunakan untuk semua WordPress pemberitahuan dan kesalahan, karena itu pas untuk keperluan kami.
Dalam konstruktor, tepat di bawah dua action kami menambahkan sebelumnya, tambahkan:
1 |
// Add a nag text for reminding the user to save the license information
|
2 |
add_action( 'admin_notices', array( $this, 'show_admin_notices' ) ); |
Kemudian, tambahkan fungsi, show_admin_notices
:
1 |
/**
|
2 |
* If the license has not been configured properly, display an admin notice.
|
3 |
*/
|
4 |
public function show_admin_notices() { |
5 |
$options = get_option( $this->get_settings_field_name() ); |
6 |
|
7 |
if ( !$options || ! isset( $options['email'] ) || ! isset( $options['license_key'] ) || |
8 |
$options['email'] == '' || $options['license_key'] == '' ) { |
9 |
|
10 |
$msg = __( 'Please enter your email and license key to enable updates to %s.', $this->text_domain ); |
11 |
$msg = sprintf( $msg, $this->product_name ); |
12 |
?>
|
13 |
<div class="update-nag"> |
14 |
<p>
|
15 |
<?php echo $msg; ?> |
16 |
</p>
|
17 |
|
18 |
<p>
|
19 |
<a href="<?php echo admin_url( 'options-general.php?page=' . $this->get_settings_page_slug() ); ?>"> |
20 |
<?php _e( 'Complete the setup now.', $this->text_domain ); ?> |
21 |
</a>
|
22 |
</p>
|
23 |
</div>
|
24 |
<?php
|
25 |
}
|
26 |
}
|
Fungsi pertama cek jika opsi yang telah ditetapkan. Jika tidak ada pilihan item atau salah satu dari dua kolom yang harus diisi kosong, ini menunjukkan pemberitahuan dan link ke halaman pengaturan tema lisensi dimana pengguna dapat menyelesaikan setup. class, update-nag
, mendefinisikan tampilan pemberitahuan.
Berikut adalah apa "nag" seperti apa, muncul di bagian atas dasbor admin:



Sekarang, untuk membuat nag pergi, mari kita menempatkan dalam informasi lisensi.
Pertama, kunjungi server lisensi WordPress admin area dan menciptakan lisensi baru untuk tema tes (Hello World Theme). Setelah Anda mengklik Add License, Anda akan melihat daftar lisensi.
Salin kunci lisensi yang dihasilkan oleh plugin manajer lisensi. Kemudian, kembali ke situs tes Anda dan mengkonfigurasi pengaturan lisensi tema dengan memasukkan alamat email Anda dan lisensi key yang disalin dari server lisensi manajer.
Nag Anda sudah pergi dan setting theme di tempat pengujian fungsionalitas yang akan kita buat berikutnya.
3. berkomunikasi dengan API lisensi Manager
Dengan framework dasar di tempat, mari kita lihat berkomunikasi dengan lisensi manager API.
Langkah 1: Tambahkan fungsi untuk memanggil API
Pertama, menambahkan fungsi untuk memanggil API lisensi Manager. Fungsi mengambil parameter kedua: metode API atau tindakan untuk memanggil server lisensi manajer, dan sebuah array dengan parameter untuk action:
1 |
//
|
2 |
// API HELPER FUNCTIONS
|
3 |
//
|
4 |
|
5 |
/**
|
6 |
* Makes a call to the WP License Manager API.
|
7 |
*
|
8 |
* @param $method String The API action to invoke on the license manager site
|
9 |
* @param $params array The parameters for the API call
|
10 |
* @return array The API response
|
11 |
*/
|
12 |
private function call_api( $action, $params ) { |
13 |
$url = $this->api_endpoint . '/' . $action; |
14 |
|
15 |
// Append parameters for GET request
|
16 |
$url .= '?' . http_build_query( $params ); |
17 |
|
18 |
// Send the request
|
19 |
$response = wp_remote_get( $url ); |
20 |
if ( is_wp_error( $response ) ) { |
21 |
return false; |
22 |
}
|
23 |
|
24 |
$response_body = wp_remote_retrieve_body( $response ); |
25 |
$result = json_decode( $response_body ); |
26 |
|
27 |
return $result; |
28 |
}
|
Baris 13: Membuat URL untuk memanggil, menggunakan URL base dimasikan sebagai parameter konstruktor ($api_endpoint
), dan action dimasukan sebagai parameter ($method
).
Baris 16: Menggunakan http_build_query
fungsi PHP untuk membuat string parameter URL dikodekan dan menambahkan untuk request GET.
Baris 19: Menggunakan WordPress built-in HTTP fungsi wp_remote_get
untuk mengirim sebuah GET request ke URL yang dihasilkan pada baris sebelumnya.
Baris 20-22: melakukan beberapa kesalahan asas untuk melihat jika terjadi kesalahan. Kami akan menambahkan fungsi is_api_error
berikutnya.
Baris 24-25: membaca respon dan mengurai dari JSON encoded string ke array yang berisi data yang diterima dari server lisensi.
Baris 27: Mengembalikan respon.
Selanjutnya, tambahkan fungsi memeriksa kesalahan. Penanganan sangat kasar dan tidak pergi ke setiap detail tentang apa yang salah — hanya cukup untuk mengetahui jika ada kesalahan atau tidak:
1 |
/**
|
2 |
* Checks the API response to see if there was an error.
|
3 |
*
|
4 |
* @param $response mixed|object The API response to verify
|
5 |
* @return bool True if there was an error. Otherwise false.
|
6 |
*/
|
7 |
private function is_api_error( $response ) { |
8 |
if ( $response === false ) { |
9 |
return true; |
10 |
}
|
11 |
|
12 |
if ( ! is_object( $response ) ) { |
13 |
return true; |
14 |
}
|
15 |
|
16 |
if ( isset( $response->error ) ) { |
17 |
return true; |
18 |
}
|
19 |
|
20 |
return false; |
21 |
}
|
Langkah 2: Tambahkan fungsi untuk mengambil lisensi dan Update informasi
Sekarang bahwa kita telah menciptakan fungsi untuk berbicara dengan API, kita dapat menggunakannya untuk menghubungi server lisensi untuk mendapatkan beberapa informasi tentang tema atau plugin.
Tambahkan fungsi berikut untuk memanggil action info
:
1 |
/**
|
2 |
* Calls the License Manager API to get the license information for the
|
3 |
* current product.
|
4 |
*
|
5 |
* @return object|bool The product data, or false if API call fails.
|
6 |
*/
|
7 |
public function get_license_info() { |
8 |
$options = get_option( $this->get_settings_field_name() ); |
9 |
if ( ! isset( $options['email'] ) || ! isset( $options['license_key'] ) ) { |
10 |
// User hasn't saved the license to settings yet. No use making the call.
|
11 |
return false; |
12 |
}
|
13 |
|
14 |
$info = $this->call_api( |
15 |
'info', |
16 |
array( |
17 |
'p' => $this->product_id, |
18 |
'e' => $options['email'], |
19 |
'l' => $options['license_key'] |
20 |
)
|
21 |
);
|
22 |
|
23 |
return $info; |
24 |
}
|
Baris 8: Mengambil lisensi manajer klien pilihan.
Baris 9 – 12: memverifikasi bahwa lisensi key dan email pilihan telah ditetapkan. Jika kita tidak punya mereka, memanggil API akan membuang-buang waktu — kita sudah tahu bahwa permintaan akan gagal.
Baris 14-21: Memanggil action info
lisensi manager API dengan parameter berikut:
-
p
: Produk ID didefinisikan dalam konstruktorWp_License_Manager_Client
. -
e
: alamat email pemilik lisensi, membaca dari pengaturan. -
l
: kunci lisensi, membaca dari pengaturan.
Baris 23: Mengembalikan data lisensi. Data akan mencakup bidang-bidang berikut:
-
name
: Nama Produk (tema atau plugin). -
description
: Deskripsi produk. -
version
: versi saat ini tersedia di server. -
package_url
: URL download untuk produk. Ini adalah sebuah URL untuk mendapatkan API action pada server lisensi manajer. -
Last_updated
: Kapan produk telah diperbarui. -
description_url
: sebuah URL untuk halaman yang dapat digunakan untuk menampilkan informasi lebih lanjut tentang produk. -
tested
: tertinggi versi WordPress yang produk telah diuji (diperlukan hanya untuk plugin). -
banner_low
: resolusi rendah (reguler) versi produk banner gambar (hanya diperlukan untuk plugin). -
banner_high
: versi resolusi tinggi (retina) gambar banner Produk (hanya diperlukan untuk plugin).
Selanjutnya, mari kita gunakan fungsi untuk memeriksa apakah ada update yang menunggu untuk di-download. Tambahkan fungsi berikut:
1 |
/**
|
2 |
* Checks the license manager to see if there is an update available for this theme.
|
3 |
*
|
4 |
* @return object|bool If there is an update, returns the license information.
|
5 |
* Otherwise returns false.
|
6 |
*/
|
7 |
public function is_update_available() { |
8 |
$license_info = $this->get_license_info(); |
9 |
if ( $this->is_api_error( $license_info ) ) { |
10 |
return false; |
11 |
}
|
12 |
|
13 |
if ( version_compare( $license_info->version, $this->get_local_version(), '>' ) ) { |
14 |
return $license_info; |
15 |
}
|
16 |
|
17 |
return false; |
18 |
}
|
Baris 8: Permintaan informasi produk yang menggunakan fungsi get_license_info
yang baru Anda buat.
Baris 9 – 11: jika terjadi kesalahan saat membuat panggilan API, kembalikan nilai false. Ini juga akan ide yang baik untuk menunjukkan kesalahan pengguna-untuk menjaga hal-hal sederhana, aku meninggalkan bahwa fungsi untuk sekarang.
Baris 13: Menggunakan version_compare
PHP untuk melihat apakah nomor versi yang diterima dari server lebih tinggi dari nomor versi lokal.
Baris 14: Jika update tersedia, kembalikan data lisensi. Dengan kembali data segera, kami menyimpan diri kita perlu melakukan panggilan API tambahan untuk mendapatkan data lagi.
Untuk menyelesaikan fungsi ini, kita masih perlu untuk menerapkan fungsi untuk mengambil nomor versi lokal, digunakan pada barus 13. Plugin dan tema data yang diakses sedikit berbeda, sehingga fungsi akan memiliki implementasi yang terpisah untuk keduanya:
1 |
/**
|
2 |
* @return string The theme / plugin version of the local installation.
|
3 |
*/
|
4 |
private function get_local_version() { |
5 |
if ( $this->is_theme() ) { |
6 |
$theme_data = wp_get_theme(); |
7 |
return $theme_data->Version; |
8 |
} else { |
9 |
$plugin_data = get_plugin_data( $this->plugin_file, false ); |
10 |
return $plugin_data['Version']; |
11 |
}
|
12 |
}
|
Baris 2: Mendapatkan data tema saat ini.
Baris 3: Membaca versi dan mengembalikannya.
Baris 5: Plugin data dibaca menggunakan fungsi berbeda, get_plugin_data
, yang menggunakan nama berkas utama plugin sebagai pengenal. Kami akan menetapkan variabel $this-> plugin_file
, kemudian ketika mengintegrasikan ke plugin uji kami.
Baris 6: Mengembalikan nomor versi plugin.
Tambahkan is_theme
fungsi untuk memeriksa jenis produk yang dalam yang kami beroperasi:
1 |
private function is_theme() { |
2 |
return $this->type == 'theme'; |
3 |
}
|
Kami sekarang telah menciptakan fungsi-fungsi yang diperlukan untuk menyambung ke server lisensi dan memeriksa jika ada versi yang lebih baru yang tersedia. Selanjutnya, ini adalah waktu untuk benar-benar menarik bagian: mengikat ini ke WordPress memperbarui fungsi.
4. Bagaimana WordPress memeriksa pembaruan
Framework untuk membangun sistem update theme dan plugin ini di tempat. Saatnya untuk mulai menggali lebih dalam ke dalam fungsi pembaruan WordPress.
Pada action admin_init
(dan sejumlah lain, yang lebih spesifik, action), jika cukup waktu telah berlalu sejak pemeriksaan Pemutakhiran Terakhir, membandingkan WordPress Plugin dan tema terhadap versi host di WordPress.org Plugin dan tema direktori untuk melihat apakah baru Versi telah dirilis.
Setelah cek, WordPress menyimpan hasil ke transient situs: update_themes
untuk tema dan update_plugins
untuk plugin.
Kemudian, ketika Anda mengunjungi halaman update (atau halaman tema dan plugin), WordPress memeriksa ini transien untuk melihat dan menandai tema dan plugin yang memiliki update yang tersedia.
Ketika Anda melihat kode untuk fungsi ini (yang dapat Anda temukan di wp-includes/update.php
) Anda dapat melihat bahwa ini telah dirancang untuk bekerja dengan direktori resmi dan tidak ada lagi: tidak ada hook untuk menentukan server untuk memeriksa terhadap atau untuk sniffing request sebelum dikirim.
Tapi itu belum berhenti pengembang plugin dan tema dari menggunakan server lisensi mereka sendiri — dan itu tidak akan menghentikan kita baik.
Solusinya terletak pada cara hasil update memeriksa disimpan. Saya sebutkan di atas bahwa hasil pencarian update disimpan dalam transien. Dan tepat pada awal set_site_transient
fungsi WordPress, kita menemukan:
1 |
/**
|
2 |
* Filter the value of a specific site transient before it is set.
|
3 |
*
|
4 |
* The dynamic portion of the hook name, $transient, refers to the transient name.
|
5 |
*
|
6 |
* @since 3.0.0
|
7 |
*
|
8 |
* @param mixed $value Value of site transient.
|
9 |
*/
|
10 |
$value = apply_filters( 'pre_set_site_transient_' . $transient, $value ); |
Filter ini memberi kami akses ke isi data update plugin dan tema sebelum disimpan, hanya dalam waktu untuk menambahkan data kami sendiri untuk itu!
5. mengaitkan ke WordPress Theme update
Mari kita mulai menerapkan pembaruan kita sendiri memeriksa kode, mulai dari tema.
Langkah 1: Buat Filter ke Hook ke pemeriksaan pemutakhiran tema
Seperti yang kita lihat di atas, ketika WordPress telah selesai memeriksa tema pembaruan dari WordPress.org direktori tema, menyimpan informasi tentang tema membutuhkan update di transien yang disebut update_themes
.
Untuk memeriksa pembaruan kita sendiri dan menambahkan data ke transient sebelum disimpan, kami akan menghubungkan fungsi kita sendiri untuk filter, pre_set_site_transient_update_themes
. Dalam fungsi ini, kami akan memanggil server lisensi untuk memeriksa pembaruan tema ini, dan kemudian, jika ada update yang tersedia, menambahkan informasi di transien.
Pertama, tambahkan filter pada akhir konstruktor Wp_License_Manager_Client's
:
1 |
if ( $type == 'theme' ) { |
2 |
// Check for updates (for themes)
|
3 |
add_filter( 'pre_set_site_transient_update_themes', array( $this, 'check_for_update' ) ); |
4 |
}
|
Kemudian, membuat fungsi, check_for_update
:
1 |
/**
|
2 |
* The filter that checks if there are updates to the theme or plugin
|
3 |
* using the WP License Manager API.
|
4 |
*
|
5 |
* @param $transient mixed The transient used for WordPress
|
6 |
* theme / plugin updates.
|
7 |
*
|
8 |
* @return mixed The transient with our (possible) additions.
|
9 |
*/
|
10 |
public function check_for_update( $transient ) { |
11 |
if ( empty( $transient->checked ) ) { |
12 |
return $transient; |
13 |
}
|
14 |
|
15 |
$info = $this->is_update_available(); |
16 |
if ( $info !== false ) { |
17 |
|
18 |
if ( $this->is_theme() ) { |
19 |
// Theme update
|
20 |
$theme_data = wp_get_theme(); |
21 |
$theme_slug = $theme_data->get_template(); |
22 |
|
23 |
$transient->response[$theme_slug] = array( |
24 |
'new_version' => $info->version, |
25 |
'package' => $info->package_url, |
26 |
'url' => $info->description_url |
27 |
);
|
28 |
} else { |
29 |
// Plugin updates will be added here.
|
30 |
}
|
31 |
}
|
32 |
|
33 |
return $transient; |
34 |
}
|
Baris 10-13: $transient->checked
adalah sebuah array dengan semua tema yang saat ini terinstal dan nomor versi mereka (tema stylesheet sebagai key) dan versi sebagai nilai. Jika Anda adalah untuk memeriksa pembaruan untuk beberapa tema sekaligus, Anda dapat menggunakan array untuk mengumpulkan data dan mengirimkannya untuk server lisensi Anda. Dalam versi ini sederhana, namun, kami hanya memverifikasi bahwa array tidak kosong dan melanjutkan.
Baris 15 – 16: Periksa jika ada update yang tersedia untuk produk ini (theme) pada server lisensi kami, menggunakan fungsi is_update_available
yang kita buat sebelumnya. Fungsi mengembalikan informasi produk jika versi pada server lisensi lebih tinggi dari yang diinstal dan false jika tidak ada update yang tersedia.
Baris 18: Periksa apakah ini adalah tema atau plugin. Pada titik ini, kita akan hanya berfokus pada tema pembaruan, jadi aku telah meninggalkan cabang lain yang kosong untuk saat ini.
Baris 20-21: menemukan tema "slug" untuk menggunakannya sebagai key untuk menandai tema saat ini membutuhkan update.
Baris 23-27: masukkan informasi yang berhubungan dengan tema update ke dalam sementara $response
array, menggunakan tema slug sebagai key.
- new_version: versi tema pada server.
- package: URL untuk men-download paket tema. Seperti WordPress harus mampu untuk men-download tema langsung dari URL ini, kami menciptakan lisensi manager untuk mengembalikan URL terbentuk sepenuhnya dalam informasi lisensi, termasuk pengguna email alamat dan lisensi key.
-
url
: URL halaman untuk menampilkan informasi tentang tema. Parameter ini digunakan ketika mengklik untuk informasi lebih lanjut di halaman Themes.
Baris 33: Mengembalikan sementara sehingga dapat menyimpan WordPress — dengan tema kami memperbarui informasi yang ditambahkan untuk itu.
Dan hanya itu! Anda sekarang telah membangun sistem update lengkap untuk host sendiri WordPress tema. Mari kita menguji fungsionalitas dan kemudian bergerak pada untuk update plugin.
Langkah 2: Menguji pembaruan tema
Sebelum pindah ke update plugin, mari kita menguji fungsionalitas untuk melihat update in action.
Memperbarui tema yang Anda gunakan untuk pengujian akan menimpa tema, jadi sebagai hal pertama, membuat file zip baru menggunakan file. Kemudian upload zip file ke Amazon S3 seperti yang kita lakukan pada bagian 2 dari seri tutorial.
Selanjutnya, log in ke server lisensi dan mengedit Hello World Theme informasi produk, memastikan menggunakan file zip Anda hanya meng-upload ke Amazon S3 dan produk nomor versi lebih tinggi dari salah satu tema yang terinstal secara lokal.

Simpan perubahan dan kepala kembali ke server tes untuk menguji update.
Pada tes server, klik pada Dashboard > Updates. WordPress sekarang akan melakukan panggilan API untuk memeriksa jika ada tema membutuhkan update. Jika tidak ada yang terjadi, bisa jadi bahwa cek sebelumnya telah hanya terjadi dan WordPress masih menunggu untuk batas waktu di antara versi cek untuk sukses. Dalam hal ini, menunggu satu menit dan klik Check Again untuk memaksa cek.
Sekarang, Anda akan melihat tema Anda dalam daftar tema yang dapat diperbarui.



Selanjutnya, mencoba melakukan update. Jika semuanya berjalan baik — sebagaimana mestinya-Anda akan melihat output berikut. Secara default, rincian tidak Tampilkan kecuali ada kesalahan, jadi Anda harus klik Show Details untuk melihat apa yang terjadi di update.
Perhatikan bagaimana tema tidak download dari WordPress.org tetapi agak lisensi manajer server sendiri.



6. mengaitkan untuk WordPress Plugin update
Dengan tema update dilakukan dan diuji, kami hampir selesai dengan tutorial. Sebagian besar dari kode yang akan dibutuhkan untuk memperbarui plugin sudah di tempat. Tetapi ada beberapa perbedaan dan penambahan diperlukan, jadi mari kita pergi untuk bekerja dan menambahkan dukungan untuk plugin kelas lisensi manajer klien kami.
Langkah 1: Masukan Client Class di Plugin Anda
Salin file class-wp-license-manajer-client.php
ke folder sumber plugin tes Anda. Kemudian, di tempat yang cocok di plugin, tempat kode inisialisasi berikut.
Jika Anda menggunakan plugin kosong tes, hanya drop ke dalam berkas utama plugin, tepat di bawah plugin header. Ingatlah untuk mengganti <URL_TO_LICENSE_SERVER>
dengan server URL.
1 |
require_once( 'class-wp-license-manager-client.php' ); |
2 |
|
3 |
if ( is_admin() ) { |
4 |
$license_manager = new Wp_License_Manager_Client( |
5 |
'hello-world-plugin', |
6 |
'Hello World Plugin', |
7 |
'hello-world-plugin-text', |
8 |
'http://<URL_TO_LICENSE_SERVER>/api/license-manager/v1', |
9 |
'plugin', |
10 |
__FILE__
|
11 |
);
|
12 |
}
|
Sebagian besar parameter yang sama ketika initializing class untuk digunakan dengan tema — dengan berbeda, produk nilai spesifik (misalnya hello-world-plugin
daripada hello-world-theme
).
Dua parameter tidak digunakan ketika membuat suatu tema, jadi mari kita melihat mereka:
-
$type
(dengan nilaiplugin
) memberitahuWp_License_Manager_Client
contoh menggunakan plugin fungsi tertentu. -
$plugin_file
(terakhir parameter) digunakan untuk mengambil plugin pengidentifikasi untuk meminta data plugin seperti versi sekarang. Ketika inisialisasi ini dilakukan di kelas utama plugin, kita dapat menggunakan__FILE__
.
Langkah 2: Memeriksa pembaruan Plugin
Sebelumnya dalam tutorial ini, kita hook class Wp_License_Manager_Client
kami untuk mencari perubahan dalam update_themes
sementara dengan menempatkan baris add_filter
pada akhir konstruktor. Update plugin akan ditangani dengan sama, hanya menggunakan update_plugins
sementara bukan update_themes
.
Jadi, tepat setelah filter yang ada, tambahkan kode spesifik plugin (baris 1-3 sudah hadir dalam konstruktor, jadi saya memasukan mereka di sini untuk menunjukkan mana kode baru harus pergi):
1 |
if ( $type == 'theme' ) { |
2 |
// Check for updates (for themes)
|
3 |
add_filter( 'pre_set_site_transient_update_themes', array( $this, 'check_for_update' ) ); |
4 |
} elseif ( $type == 'plugin' ) { |
5 |
// Check for updates (for plugins)
|
6 |
add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_for_update' ) ); |
7 |
}
|
Ketika Anda melihat kode di atas, filter baru menggunakan fungsi yang sama seperti yang kami menambahkan untuk tema, check_for_update
.
Sebelumnya, ketika kita menciptakan fungsi check_for_update
, kami meninggalkan satu cabang lain kosong, menunggu untuk diisi dengan kode untuk menangani plugin update. Sekarang, mari kita menambahkan konten ke bagian tersebut. Berikut adalah seluruh fungsi dengan plugin yang berhubungan dengan kode ditambahkan mulai dari baris 27:
1 |
/**
|
2 |
* The filter that checks if there are updates to the theme or plugin
|
3 |
* using the License Manager API.
|
4 |
*
|
5 |
* @param $transient mixed The transient used for WordPress theme updates.
|
6 |
* @return mixed The transient with our (possible) additions.
|
7 |
*/
|
8 |
public function check_for_update( $transient ) { |
9 |
if ( empty( $transient->checked ) ) { |
10 |
return $transient; |
11 |
}
|
12 |
|
13 |
if ( $this->is_update_available() ) { |
14 |
$info = $this->get_license_info(); |
15 |
|
16 |
if ( $this->is_theme() ) { |
17 |
// Theme update
|
18 |
$theme_data = wp_get_theme(); |
19 |
$theme_slug = $theme_data->get_template(); |
20 |
|
21 |
$transient->response[$theme_slug] = array( |
22 |
'new_version' => $info->version, |
23 |
'package' => $info->package_url, |
24 |
'url' => $info->description_url |
25 |
);
|
26 |
} else { |
27 |
// Plugin update
|
28 |
$plugin_slug = plugin_basename( $this->plugin_file ); |
29 |
|
30 |
$transient->response[$plugin_slug] = (object) array( |
31 |
'new_version' => $info->version, |
32 |
'package' => $info->package_url, |
33 |
'slug' => $plugin_slug |
34 |
);
|
35 |
}
|
36 |
}
|
37 |
|
38 |
return $transient; |
39 |
}
|
Melihat kode, ada baiknya untuk melihat bahwa sementara fungsi yang sama, sekarang kita sedang menangani berbeda transient, update_plugins
daripada update_themes
. Salah satu cara ini menunjukkan adalah bahwa sementara data dalam update_themes
disimpan sebagai array, update_plugins
menggunakan objek (baris 30)!
Panggilan untuk API lisensi Manager kami yang sama ketika menggunakan tema, tapi data yang disimpan untuk sementara sedikit berbeda — berdasarkan apa WordPress mengharapkan untuk menemukan di transien.
Dengan kode ini di tempat, Anda dapat sudah menguji pembaruan dengan cara yang sama kita lakukan dengan tema (buat zip file, meng-upload ke S3, mengedit properti produk). Pastikan nomor versi plugin pada server lisensi lebih tinggi daripada yang diinstal, dan navigasikan ke server tes Updates halaman. Pembaruan untuk Hello World Plugin harus muncul:



Ketika Anda memutahirkan plugin, Anda akan melihat bahwa itu adalah download dari server Anda sendiri seperti tema.
Tapi kita belum cukup selesai: jika Anda melihat informasi plugin dalam screenshot di atas, Anda akan melihat "Kompatibilitas dengan WordPress 4.0.1" mengatakan "Tidak diketahui". Juga, jika Anda klik View version 0.2 details, pesan kesalahan ditampilkan.
Mari kita memperbaiki hal ini.
Langkah 3: Sediakan informasi Plugin
Untuk mengumpulkan informasi yang menunjukkan tentang plugin, WordPress menggunakan fungsi yang disebut plugins_api
. Secara default, fungsi memanggil API WordPress.org, seperti cek versi. Namun, tidak seperti memeriksa versi, fungsi ini berisi tiga filter kuat: plugins_api_args
untuk mengedit parameter dikirim ke API, plugins_api
untuk mengganti default permintaan API, dan plugins_api_result
untuk mengedit hasil diterima dari API.
Kita akan menggunakan plugins_api
karena memberikan kita tingkat terbesar mengontrol fungsi: ketika WordPress memulai panggilan API plugin untuk mendapatkan informasi tentang plugin saat ini, fungsi kita akan melompat dan menangani request menggunakan server lisensi bukan WordPress.org. Seluruh permintaan akan ditinggalkan untuk WordPress untuk di proses.
Pertama, tambahkan filter dalam konstruktor Wp_License_Manager_Client
plugin di cabang else tertentu:
1 |
// Showing plugin information
|
2 |
add_filter( 'plugins_api', array( $this, 'plugins_api_handler' ), 10, 3 ); |
Kemudian, tambahkan fungsi:
1 |
/**
|
2 |
* A function for the WordPress "plugins_api" filter. Checks if
|
3 |
* the user is requesting information about the current plugin and returns
|
4 |
* its details if needed.
|
5 |
*
|
6 |
* This function is called before the Plugins API checks
|
7 |
* for plugin information on WordPress.org.
|
8 |
*
|
9 |
* @param $res bool|object The result object, or false (= default value).
|
10 |
* @param $action string The Plugins API action. We're interested in 'plugin_information'.
|
11 |
* @param $args array The Plugins API parameters.
|
12 |
*
|
13 |
* @return object The API response.
|
14 |
*/
|
15 |
public function plugins_api_handler( $res, $action, $args ) { |
16 |
if ( $action == 'plugin_information' ) { |
17 |
|
18 |
// If the request is for this plugin, respond to it
|
19 |
if ( isset( $args->slug ) && $args->slug == plugin_basename( $this->plugin_file ) ) { |
20 |
$info = $this->get_license_info(); |
21 |
|
22 |
$res = (object) array( |
23 |
'name' => isset( $info->name ) ? $info->name : '', |
24 |
'version' => $info->version, |
25 |
'slug' => $args->slug, |
26 |
'download_link' => $info->package_url, |
27 |
|
28 |
'tested' => isset( $info->tested ) ? $info->tested : '', |
29 |
'requires' => isset( $info->requires ) ? $info->requires : '', |
30 |
'last_updated' => isset( $info->last_updated ) ? $info->last_updated : '', |
31 |
'homepage' => isset( $info->description_url ) ? $info->description_url : '', |
32 |
|
33 |
'sections' => array( |
34 |
'description' => $info->description, |
35 |
),
|
36 |
|
37 |
'banners' => array( |
38 |
'low' => isset( $info->banner_low ) ? $info->banner_low : '', |
39 |
'high' => isset( $info->banner_high ) ? $info->banner_high : '' |
40 |
),
|
41 |
|
42 |
'external' => true |
43 |
);
|
44 |
|
45 |
// Add change log tab if the server sent it
|
46 |
if ( isset( $info->changelog ) ) { |
47 |
$res['sections']['changelog'] = $info->changelog; |
48 |
}
|
49 |
|
50 |
return $res; |
51 |
}
|
52 |
}
|
53 |
|
54 |
// Not our request, let WordPress handle this.
|
55 |
return false; |
56 |
}
|
Baris 16: Periksa Plugin API action yang diminta. Kami sedang hanya tertarik pada plugin_information
, jadi jika WordPress meminta sesuatu yang lain, kita hanya mengembalikan nilai false
dan membiarkan permintaan pergi semua jalan ke WordPress.org.
Baris 19: Periksa apakah request tentang plugin saat ini. Jika ya, kita akan mengambil permintaan dan menanganinya. Jika tidak, mengembalikan nilai false
sehingga kita tidak memotong request API plugin-plugin lainnya.
Baris 20: Menghubungi server lisensi kami untuk mengambil informasi untuk produk saat ini.
Baris 22-48: mengumpulkan semua data plugin yang kami dapatkan dari info request. Sekarang, kami akhirnya menggunakan semua bidang yang dikembalikan oleh API.
Baris 50: Mengembalikan object result.
Untuk menguji fungsi ini, mengedit produk Hello World Plugin pada server lisensi Anda dan menambahkan nilai untuk semua bidang pengaturan produk. Selain pengaturan ditetapkan sebelumnya, masukkan yang berikut, menetapkan nilai-nilai untuk apa pun yang Anda suka — kami hanya menguji...
- Tested with WordPress version: versi WordPress tertinggi Anda telah diuji plugin pada.
- Requires WordPress version: versi WordPress minimum yang diperlukan untuk menjalankan plugin Anda.
- Last Updated: Tanggal terakhir update ke plugin ini, dalam format
YYYY-MM-DD
. - Banner low and Banner high: bidang ini mendefinisikan normal (rendah) dan retina (tinggi) versi banner yang ditampilkan di atas layar informasi plugin. Sisipkan URL untuk gambar ukuran berikut: 772 x 250 untuk rendah dan 1544 x 500 untuk tinggi.
Simpan produk dan kepala kembali ke halaman Updates situs pengujian. Sekarang, Anda akan melihat bahwa ada bidang kompatibilitas versi WordPress tidak lagi tidak diketahui, dan ketika Anda klik pada Lihat Versi 0.2 rincian, Anda akan melihat popup ini:



Kesimpulan
Kami sekarang telah menciptakan sepenuhnya fungsional, lisensi dikendalikan WordPress plugin dan tema update sistem. Itu masih agak dasar, tapi sudah dapat digunakan untuk melewati update untuk pengguna internal organisasi Anda atau pelanggan plugin dan tema premium Anda.
Mudah-mudahan, Anda juga belajar sesuatu yang baru tentang bekerja dengan WordPress Plugin dan tema dan dapat menggunakan pengetahuan dalam menciptakan proyek Anda sendiri.