网站模板库
  • 首页
  • web前端工具
    • HTML/JS转换工具
    • JS/HTML格式化工具
    • 字母/英文大小写转换工具
    • robots.txt文件生成工具
    • Js压缩/格式化工具
    • Css在线压缩工具_代码格式化
  • 关于我们
    • 免责声明
    • 联系我们
    • 广告服务
    • 服务项目
    • 关于我们
    • 网站轮播
    • 公告
    • 成都优优科技专用
    • 按行业分类
  • web学院
    • 服务器教程
    • 学习资料
      • 基础书籍
      • 交互书籍
      • 入门教程
      • 特效分类
    • 案例分享
    • web资讯
  • 网页特效
    • 图片特效
    • 导航特效
    • 滑动按钮
    • 表单特效
    • 文字特效
    • 弹窗特效
    • 其他特效
  • 织梦模板
    • 科技/电子/数码/通信
    • 文化/艺术/广告/传媒
    • 装修/设计/家居/家具
    • 基建/施工/地产/物业
    • 餐饮/酒店/旅游/票务
    • 食品/果蔬/饮料/日用
    • 服饰/珠宝/礼品/玩具
    • 摄影/婚庆/家政/生活
    • 运动/健身/体育/器材
    • 学校/教育/培训/科研
    • 美容/保健/医院/医疗
    • 金融/财税/咨询/法律
    • 政府/组织/集团/协会
    • 汽车/物流/交通/搬运
    • 机械/设备/制造/仪器
    • 化工/环保/能源/材料
    • 农业/畜牧/养殖/宠物
    • 其他模版
    • IT/软件/信息/互联网
  • 手机模板
    • 手机APP模板
    • 微信小程序模板
    • wap
  • 网站模板
    • joomla模板
    • Drupal模板
    • z-blog模板
    • EyouCms模板
    • Bootstrap模板
    • 帝国cms模板
    • CmsEasy模板
    • MetInfo模板
    • 购物商城模板
      • Shopify主题
      • PrestaShop主题
    • 后台模板
    • 纯HTML模板
    • ecshop模板
    • phpwind模板
    • pbootcms模板
    • phpcms模板
    • wordpress模板
    • discuz模板
  • 教程
    • 织梦教程
    • Discuz教程
    • WordPress教程
    • Phpcms教程
    • Phpwind教程
    • ECShop教程
    • Joomla教程
    • Drupal教程
    • zblog教程
    • EyouCMS教程
    • 帝国cms教程
    • MetInfo教程
    • CmsEasy教程
登录
当前位置:网站模板库 > web学院 > web资讯 > WordPress使用托管插件后如何更新
admin web资讯 2020-10-08 13:03:08

WordPress使用托管插件后如何更新

WordPress使用托管插件后如何更新,第1张

WordPress网站在使用插件后都是需要进行更新的,当然有些插件可能就需要自托管更新,比如收费插件,那开发者如何实现自托管插件的更新呢?今天就为大家讲一讲如何实现该功能;    

之前看到@Misha Rudrastyh的教程,借过来分享给大家,希望可以帮助到有需要的朋友。

第1步:在服务器上创建具有更新信息和插件zip压缩包的.json文件

WordPress 的更新API接受某些参数,例如插件名称、作者、更新历史等。您可以:

在您的插件文件中直接指定其中的一些静态文件(插件作者、插件名称..),并从更新服务器获取其他文件(下载网址、新版本、上次更新)。

或者,您可以从更新服务器中获取所有内容。

首先,您必须在服务器上的某个位置创建一个.json文件,例如YOUR_WEBSITE/info.json。然后这个文件应该包含下面的相关参数:

{

"version" => "1.1",

"download_url" : "https://rudrastyh.com/misha-plugin.zip",

"requires" : "3.0",

"tested" : "4.8.1",

"requires_php" : "5.3",

"last_updated" : "2017-08-17 02:10:00",

"sections" : {

"description" : "This is the plugin to test your updater script",

"installation" : "Upload the plugin to your blog, Activate it, that's it!",

"changelog" : "<h4>1.1 – January 17, 2020</h4><ul><li>Some bugs are fixed.</li><li>Release date.</li></ul>"

},

"banners" : {

"low" : "https://YOUR_WEBSITE/banner-772x250.jpg",

"high" : "https://YOUR_WEBSITE/banner-1544x500.jpg"

},

"screenshots" : "<ol><li><a href='IMG_URL' target='_blank'><img src='IMG_URL' alt='CAPTION' /></a><p>CAPTION</p></li></ol>"

}

还有很多其他参数,我将在下面介绍所有这些参数。您可以选择在info.json文件中指定哪个参数。

并且我们需要注意下zip插件包的文件结构:

WordPress使用托管插件后如何更新,第2张

正确的做法是连同插件文件夹一起压缩,而不是仅仅压缩插件文件夹内部的文件。否则,当点击“更新”按钮后,旧版本的插件将被删除,但新版本插件并不会生效,因为WordPress会随机生成类似于misha-plugin-xhfuif的插件文件夹,并且将返回错误:“由于错误,misha-plugin.php已被停用:插件文件不存在。”

第2步:自定义插件弹窗信息

当您单击“查看详细信息”时,WordPress会从WordPress的服务器显示相应的插件信息。最有趣的是,该信息可以通过钩子定制,并在WordPress连接到它自己的服务器之前生效。 因此,它不会影响网站的性能。

WordPress使用托管插件后如何更新,第3张

相关的代码如下:

#p#分页标题#e#

add_filter('plugins_api', 'misha_plugin_info', 20, 3);

/*

* $res empty at this step

* $action 'plugin_information'

* $args stdClass Object ( [slug] => woocommerce [is_ssl] => [fields] => Array ( [banners] => 1 [reviews] => 1 [downloaded] => [active_installs] => 1 ) [per_page] => 24 [locale] => en_US )

*/

function misha_plugin_info( $res, $action, $args ){

// 如果没有执行获取插件信息的操作,则不往下执行

if( 'plugin_information' !== $action ) {

return false;

}

$plugin_slug = 'YOUR PLUGIN SLUG'; //插件的slug别名,会在下面的代码中多次用到

// 如果不是我们这个插件,不往下执行

if( $plugin_slug !== $args->slug ) {

return false;

}

// 尝试先通过缓存获取数据

if( false == $remote = get_transient( 'misha_update_' . $plugin_slug ) ) {

// info.json 是保存在你的服务器的文件

$remote = wp_remote_get( 'https://rudrastyh.com/wp-content/uploads/info.json', array(

'timeout' => 10,

'headers' => array(

'Accept' => 'application/json'

) )

);

if ( ! is_wp_error( $remote ) && isset( $remote['response']['code'] ) && $remote['response']['code'] == 200 && ! empty( $remote['body'] ) ) {

set_transient( 'misha_update_' . $plugin_slug, $remote, 43200 ); // 设置缓存12个小时

}

}

if( ! is_wp_error( $remote ) && isset( $remote['response']['code'] ) && $remote['response']['code'] == 200 && ! empty( $remote['body'] ) ) {

$remote = json_decode( $remote['body'] );

$res = new stdClass();

$res->name = $remote->name;

$res->slug = $plugin_slug;

$res->version = $remote->version;

$res->tested = $remote->tested;

$res->requires = $remote->requires;

$res->author = '<a href="https://rudrastyh.com">Misha Rudrastyh</a>';

$res->author_profile = 'https://profiles.wordpress.org/rudrastyh';

$res->download_link = $remote->download_url;

$res->trunk = $remote->download_url;

$res->requires_php = '5.3';

$res->last_updated = $remote->last_updated;

$res->sections = array(

'description' => $remote->sections->description,

'installation' => $remote->sections->installation,

'changelog' => $remote->sections->changelog

// 你还可以在这里添加自定义的选项卡

);

// 假如你需要添加缩略图部分,请按照下面的格式添加图片内容

// <ol><li><a href="IMG_URL" target="_blank"><img src="IMG_URL" alt="CAPTION" /></a><p>CAPTION</p></li></ol>

if( !empty( $remote->sections->screenshots ) ) {

$res->sections['screenshots'] = $remote->sections->screenshots;

}

$res->banners = array(#p#分页标题#e#

'low' => 'https://YOUR_WEBSITE/banner-772x250.jpg',

'high' => 'https://YOUR_WEBSITE/banner-1544x500.jpg'

);

return $res;

}

return false;

}

接下来简单描述下一些上面没有提及的参数:

contributors:贡献者(contributors)字段信息为wordpress.org个人资料名称和网址的关联数组,例如

array(

'rudrastyh' => 'https://profiles.wordpress.org/rudrastyh',

'contributer' => 'https://profiles.wordpress.org/contributer'

)

WordPress使用托管插件后如何更新,第4张

requires_php:最低PHP版本要求

rating:评分,从 1 到 100

ratings:5星评价中各个星级的得分次数

array(

5 => 2104

4 => 116,

3 => 64,

2 => 57,

1 => 175

)

num_ratings:所有评分的总数

WordPress使用托管插件后如何更新,第5张

WordPress plugin rating that is displayed in plugin update popup

support_threads:相关的论坛文章数

support_threads_resolved:已解决的论坛文章数

active_installs:插件的安装数量

added:添加日期,YYYY-MM-DD格式的日期

homepage:插件的主页网址

reviews:插件的点评,例如

versions:插件各个版本以及对应的下载网址数组,例如

WordPress使用托管插件后如何更新,第6张

array(

'1.0' => 'URL of zip archive of 1.0 plugin version',

'trunk' => 'URL of the latest plugin version'

)

donate_link:捐助链接

第3步:将更新信息推送到WP Transients 中

WordPress使用托管插件后如何更新,第7张

add_filter('site_transient_update_plugins', 'misha_push_update' );

function misha_push_update( $transient ){

if ( empty($transient->checked ) ) {

return $transient;

}

$plugin_slug = 'YOUR PLUGIN SLUG'; //插件的slug别名,会在下面的代码中多次用到

// 尝试先从缓存中获取信息,如果要禁用缓存,请注销 12,22,23,24,26 行的代码

if( false == $remote = get_transient( 'misha_upgrade_' . $plugin_slug ) ) {

// info.json 是在你自己的服务器上的文件

$remote = wp_remote_get( 'https://YOUR_WEBSITE/SOME_PATH/info.json', array(

'timeout' => 10,

'headers' => array(

'Accept' => 'application/json'

) )

);

if ( !is_wp_error( $remote ) && isset( $remote['response']['code'] ) && $remote['response']['code'] == 200 && !empty( $remote['body'] ) ) {

set_transient( 'misha_upgrade_' . $plugin_slug, $remote, 43200 ); // 设置缓存12个小时

}

}

if( $remote ) {

$remote = json_decode( $remote['body'] );

// 您安装的插件版本应该在下行代码中!你也可以动态获取它

if( $remote && version_compare( '1.0', $remote->version, '<' ) && version_compare($remote->requires, get_bloginfo('version'), '<' ) ) {#p#分页标题#e#

$res = new stdClass();

$res->slug = $plugin_slug;

$res->plugin = 'YOUR_PLUGIN_FOLDER/YOUR_PLUGIN_SLUG.php'; // 如果您的插件没有自己的目录,应该只填写YOUR_PLUGIN_SLUG.php

$res->new_version = $remote->version;

$res->tested = $remote->tested;

$res->package = $remote->download_url;

$transient->response[$res->plugin] = $res;

//$transient->checked[$res->plugin] = $remote->version;

}

}

return $transient;

}

第4步:更新后清除缓存

最后一步是在更新插件后清除缓存。

add_action( 'upgrader_process_complete', 'misha_after_update', 10, 2 );

function misha_after_update( $upgrader_object, $options ) {

if ( $options['action'] == 'update' && $options['type'] === 'plugin' ) {

// 仅在新插件版本已安装时清除缓存

delete_transient( 'misha_upgrade_YOUR_PLUGIN_SLUG' );

}

}

以上就是为WordPress自托管插件添加在线更新功能所有内容,再次感谢@Misha Rudrastyh。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » WordPress使用托管插件后如何更新

admin 钻石

分享到:
上一篇
WordPress推荐一个优化缓存的插件
下一篇
WordPress制作企业联系表项目

相关推荐

WordPress避免网站被误操作的方法

WordPress避免网站被误操作的方法

介绍几个保障WordPress安全的措施

介绍几个保障WordPress安全的措施

WordPress 5.5猜测技术的运用

WordPress 5.5猜测技术的运用

WordPress网站传输模板文件的设置

WordPress网站传输模板文件的设置

0条评论

发表评论 取消回复

要发表评论,您必须先登录。

提供最优质的资源集合

立即查看 了解详情
网站模板库

主题/付费下载/查看/余额管理/自定义积分,集成支付,卡密,推广奖励等。

本站导航
  • 链接标题
友情链接
  • 链接标题
快速搜索
本站由钛宇宙强力驱动
友情链接:
    商业源码网蜀ICP备2023005044号
    网站模板库
    • 登录
    • 注册
    网站模板库
    • 首页
    • web前端工具►
      • HTML/JS转换工具
      • JS/HTML格式化工具
      • 字母/英文大小写转换工具
      • robots.txt文件生成工具
      • Js压缩/格式化工具
      • Css在线压缩工具_代码格式化
    • 关于我们►
      • 免责声明
      • 联系我们
      • 广告服务
      • 服务项目
      • 关于我们
      • 网站轮播
      • 公告
      • 成都优优科技专用
      • 按行业分类
    • web学院►
      • 服务器教程
      • 学习资料►
        • 基础书籍
        • 交互书籍
        • 入门教程
        • 特效分类
      • 案例分享
      • web资讯
    • 网页特效►
      • 图片特效
      • 导航特效
      • 滑动按钮
      • 表单特效
      • 文字特效
      • 弹窗特效
      • 其他特效
    • 织梦模板►
      • 科技/电子/数码/通信
      • 文化/艺术/广告/传媒
      • 装修/设计/家居/家具
      • 基建/施工/地产/物业
      • 餐饮/酒店/旅游/票务
      • 食品/果蔬/饮料/日用
      • 服饰/珠宝/礼品/玩具
      • 摄影/婚庆/家政/生活
      • 运动/健身/体育/器材
      • 学校/教育/培训/科研
      • 美容/保健/医院/医疗
      • 金融/财税/咨询/法律
      • 政府/组织/集团/协会
      • 汽车/物流/交通/搬运
      • 机械/设备/制造/仪器
      • 化工/环保/能源/材料
      • 农业/畜牧/养殖/宠物
      • 其他模版
      • IT/软件/信息/互联网
    • 手机模板►
      • 手机APP模板
      • 微信小程序模板
      • wap
    • 网站模板►
      • joomla模板
      • Drupal模板
      • z-blog模板
      • EyouCms模板
      • Bootstrap模板
      • 帝国cms模板
      • CmsEasy模板
      • MetInfo模板
      • 购物商城模板►
        • Shopify主题
        • PrestaShop主题
      • 后台模板
      • 纯HTML模板
      • ecshop模板
      • phpwind模板
      • pbootcms模板
      • phpcms模板
      • wordpress模板
      • discuz模板
    • 教程►
      • 织梦教程
      • Discuz教程
      • WordPress教程
      • Phpcms教程
      • Phpwind教程
      • ECShop教程
      • Joomla教程
      • Drupal教程
      • zblog教程
      • EyouCMS教程
      • 帝国cms教程
      • MetInfo教程
      • CmsEasy教程

      弹窗标题

      这是一条网站公告,可在后台开启或关闭,可自定义背景颜色,标题,内容,用户首次打开关闭后不再重复弹出,此处可使用html标签...