Cách làm phần update plugin từ yourselt hosting: bạn muốn làm phần update plugin cho plugin trả phí của mình từ yourselt hosting thì làm như thế nào, hôm nay mình sẽ chia sẽ cách làm:
Đây là phần mà chúng ta cung cấp để plugin nó hiểu có update hay không và cái quan trong nhất là version và url tới file zip (file chứa plugin mới) và dữ liệu này là json nha mấy bạn. Sau đây là đoạn code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
{ "name" : "Eupro Seo", "slug" : "eupro-seo/eupro-seo.php", "download_url" : "https://chilitheme.com/wp-content/uploads/eupro-seo/eupro-seo.zip", "homepage" : "https://chilitheme.com", "version" : "1.6.0", "requires" : "3.0", "tested" : "5.3", "last_updated" : "2019-11-28 20:19:00", "upgrade_notice" : "Có phiên bản mới. Anh/chị cần cập nhật ngay", "author" : "Chilitheme.com", "author_homepage" : "https://chilitheme.com", "donate_link" : "https://chilitheme.com", "sections" : { "description" : "Plugin này cho phép khách hàng có thể để lại ý kiến. Với giao diện hiện đại, đẹp và tính năng chống spam comment", "installation" : "<h4>1.Cài đặt</h4><ul><li>Cài đặt như mọi plugin khác</li></ul><h4>2.Tích hợp vào theme</h4><ul><li>Copy dòng code dưới đây vào nơi cần sử dụng tính năng comment</li></ul><img src='https://chilitheme.com/wp-content/uploads/chilitheme-comment-update/chili-integrate.png' style='max-width: 100%;' />", "changelog" : "<h4>1 – 28/11/2019 </h4><ul><li>Cập nhật tính năng tự động cập nhật plugin.</li><li>Set timezone việt nam để thời gian đăng bình luận theo mốc giờ việt.</li></ul><h4>2 – 30/11/2019 </h4><ul><li>Làm các option về màu sắc và văn bản.</li></ul><h4>3 – 02/12/2019 </h4><ul><li>Thêm cài đặt cho text trả lời.</li><li>Thêm tính năng gửi email thông báo tới email quản trị viên.</li></ul>" } } |
WordPress nó sẽ check các plugin có new version mới không thông qua hook pre_set_site_transient_update_plugins. Dưới đây là function để filter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
public function update_check( $transient ) { global $pagenow; if ( 'plugins.php' == $pagenow && is_multisite() ) { return $transient; } if ( ! is_object( $transient ) ) { $transient = new stdClass(); } if ( ! isset( $transient->checked ) ) { $transient->checked = array(); } $response = $this->get_response(); if ( ! isset( $response->error ) && is_object($response)) { $transient->last_checked = time(); $transient->checked[ $this->plugin_slug ] = EUPROSEO_PLUGIN_VER; $plugin = $this->plugin_slug; if ( version_compare( $response->version, EUPROSEO_PLUGIN_VER, '>' ) ) { $transient->response[ $plugin ] = new stdClass(); $transient->response[ $plugin ]->slug = $response->slug; $transient->response[ $plugin ]->plugin = $plugin; $transient->response[ $plugin ]->new_version = $response->version; $transient->response[ $plugin ]->url = $response->homepage; $transient->response[ $plugin ]->package = $response->download_url; $transient->response[ $plugin ]->tested = $response->tested; if ( empty( $response->package ) ) { $transient->response[ $plugin ]->upgrade_notice = $this->get_update_error_message(); } } } //var_dump($transient); return $transient; } |
Đây là các thông tin liên quan đến plugin như các tính năng được bổ sung, hướng dẫn cài đặt rồi … và nó cũng được điều khiển từ dữ liệu json update được đề cập ở “1. Dữ liệu điều khiển update” mà tôi đã nêu ở phần 1 và hook filter làm việc này sẽ là “plugins_api”. Dưới đây sẽ là code function gắn vào nó:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
public function plugin_info( $false, $action, $args ) { //echo "<pre>"; print_r($args); echo "</pre>"; if ( 'plugin_information' != $action ) { return $false; } if ( ! isset( $args->slug ) || $args->slug != $this->plugin_slug ) { return $false; } $response = $this->get_information_update(); if ( ! isset( $response->error ) ) { $info = new stdClass(); $info->name = $response->name; $info->version = $response->version; $info->slug = $response->slug; $info->plugin_name = $response->name; $info->author = $response->author; $info->homepage = $response->homepage; $info->requires = $response->requires; $info->tested = $response->tested; $info->last_updated = $response->last_updated; $info->download_link = $response->download_url; $info->donate_link = $response->donate_link; $info->sections = array( 'description' => $response->sections->description, 'installation' => $response->sections->installation, 'changelog' => $response->sections->changelog ); /*$info->contributors = array( 'nguyentantung' => $response->contributors->nguyentantung );*/ return $info; } return $false; } |
Đây là phần ngoài thông báo như “There is a new version of Eupro Seo available. View version 7.5.2 details or update now.” thì chúng ta có thể thêm các thông tin riêng của chúng ta vào ví dụ:
“There is a new version of Eupro Seo available. View version 7.5.2 details or update now.”
Nếu cần hỗ trợ vui lòng liên hệ Mr Tùng. Phone: 0912.889.416
và hook action làm việc này: ‘in_plugin_update_message-‘.{plugin_slug}
Dưới đây là code function gắn vào nó:
1 2 3 4 5 6 7 8 |
function get_update_error_message( $plugin_data = null ) { $message = ''; $message .= '<span style="display:block;padding:10px 20px;margin:10px 0; background: #d54e21; color: #fff;">'; $message .= __( '<strong>Chưa có giấy phép sử dụng vui lòng liên hệ: Tung Nguyen - ĐT: 0912.889.416 - Email:[email protected], để lấy giấy phép. Nếu đã có giấy phép hãy click vào mục <a href="'.admin_url("admin.php?page=chilicomment-license").'">Nhập giấy phép</a></strong>' ); $message .= ' '; $message .= '</span>'; return $message; } |
Vâng đấy là các bước chúng ta cần làm cho việc update plugin. sau đây tôi xin gửi bạn code mẫu để bạn tiện chỉnh sửa:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
<?php if(!class_exists('Euproseo_Updater')){ class Euproseo_Updater { var $updates_api_url = ''; var $responses = array(); var $plugin_slug=''; public function __construct() { $this->set_information_update(); //check update add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'update_check' ) ); //custom View version 1.x.x details add_filter( 'plugins_api', array( $this, 'plugin_info' ), 99, 3 ); //custom update message add_action( 'in_plugin_update_message-'.$this->plugin_slug, array( $this, 'update_message' ), 1, 2 ); //for check update instant, you need update option "_site_transient_update_plugins" is empty } function set_information_update(){ //you can replace update.json by data json that get from any where $this->updates_api_url = EUPROSEO_URL.'/includes/update/update.json'; $this->plugin_slug='eupro-seo/eupro-seo.php'; } function get_information_update(){ $remote = wp_remote_get( $this->updates_api_url, array( 'timeout' => 10, 'headers' => array( 'Accept' => 'application/json' ) ) ); return json_decode($remote['body']); } public function get_response() { $slug = $this->plugin_slug; if ( isset( $this->responses[$slug] ) ) { return $this->responses[$slug]; } $this->responses[$slug] = $this->get_information_update(); return $this->responses[ $slug ]; } public function update_check( $transient ) { global $pagenow; if ( 'plugins.php' == $pagenow && is_multisite() ) { return $transient; } if ( ! is_object( $transient ) ) { $transient = new stdClass(); } if ( ! isset( $transient->checked ) ) { $transient->checked = array(); } $response = $this->get_response(); if ( ! isset( $response->error ) && is_object($response)) { $transient->last_checked = time(); $transient->checked[ $this->plugin_slug ] = EUPROSEO_PLUGIN_VER; $plugin = $this->plugin_slug; if ( version_compare( $response->version, EUPROSEO_PLUGIN_VER, '>' ) ) { $transient->response[ $plugin ] = new stdClass(); $transient->response[ $plugin ]->slug = $response->slug; $transient->response[ $plugin ]->plugin = $plugin; $transient->response[ $plugin ]->new_version = $response->version; $transient->response[ $plugin ]->url = $response->homepage; $transient->response[ $plugin ]->package = $response->download_url; $transient->response[ $plugin ]->tested = $response->tested; if ( empty( $response->package ) ) { $transient->response[ $plugin ]->upgrade_notice = $this->get_update_error_message(); } } } //var_dump($transient); return $transient; } public function plugin_info( $false, $action, $args ) { //echo "<pre>"; print_r($args); echo "</pre>"; if ( 'plugin_information' != $action ) { return $false; } if ( ! isset( $args->slug ) || $args->slug != $this->plugin_slug ) { return $false; } $response = $this->get_information_update(); if ( ! isset( $response->error ) ) { $info = new stdClass(); $info->name = $response->name; $info->version = $response->version; $info->slug = $response->slug; $info->plugin_name = $response->name; $info->author = $response->author; $info->homepage = $response->homepage; $info->requires = $response->requires; $info->tested = $response->tested; $info->last_updated = $response->last_updated; $info->download_link = $response->download_url; $info->donate_link = $response->donate_link; $info->sections = array( 'description' => $response->sections->description, 'installation' => $response->sections->installation, 'changelog' => $response->sections->changelog ); /*$info->contributors = array( 'nguyentantung' => $response->contributors->nguyentantung );*/ return $info; } return $false; } public function update_message( $plugin_data, $response ) { //$chilicomment_key=get_option('chilicomment_key'); //if($chilicomment_key == false): echo $this->get_update_error_message( $plugin_data ); //endif; } function get_update_error_message( $plugin_data = null ) { $message = ''; $message .= '<span style="display:block;padding:10px 20px;margin:10px 0; background: #d54e21; color: #fff;">'; $message .= __( '<strong>Chưa có giấy phép sử dụng vui lòng liên hệ: Tung Nguyen - ĐT: 0912.889.416 - Email:[email protected], để lấy giấy phép. Nếu đã có giấy phép hãy click vào mục <a href="'.admin_url("admin.php?page=chilicomment-license").'">Nhập giấy phép</a></strong>' ); $message .= ' '; $message .= '</span>'; return $message; } } new Euproseo_Updater(); } |
Mọi sự sao chép xin ghi rõ nguồn là fcwordpress.net
Chuyên trang về wordpress: hướng dẫn thiết kế theme, plugin, thủ thuật wordpress