自动更新主题未托管在WordPress存储库中



你如何使WordPress主题成为自动更新检查的一部分。我知道您可以插入插件自动更新程序,从自动更新程序中添加/删除插件,但是您如何使用主题执行此操作?

我尝试挖掘 Twenty Ten 主题,但任何地方都没有代码来定义它如何自动更新或注册它以进行自动更新。然而,它会自动更新Wordpress。

任何帮助将不胜感激。

编辑:应该指定,我的主题不在Wordpress存储库中。它将单独分发。

钩入pre_set_site_transient_update_themes

由于您的主题不驻留在 Wordpress 存储库中,因此一个简单的方法是将文件访问合并到您的主题中。执行此操作的快速方法:

  1. 将版本控制合并到主题的主文件中。创建一个具有 PHP 变量的"版本.php"文件,例如 version = 1.1
  2. 创建一个目录,您的主题文件将托管在您自己的网站上。在该目录中创建一个"版本.txt"文件,该文件仅包含最新版本号(即:1.2),不包含其他文本或数字。该网址可能看起来像 domain.com/repository/version.txt。
  3. 设计您的主题以打开 domain.com/repository/version.txt 的内容,并使用 PHP 比较每个主题的数量。如果有较新的版本,则将最新版本的主题下载为 ZIP。

    $version = floatval(file_get_contents('domain.com/repository/version.txt')); // note use only 1 decimal to keep it simple and prevent floatval() from failing

    if($version > $localversion) {
    copy("domain.com/repository/version".$version.".zip","theme/tmp/version_temp.zip");
    $zip = new ZipArchive;
    $res = $zip->open("theme/tmp/version_temp.zip");
    if ($res === TRUE) {
    $zip->extractTo("theme");
    $zip->close(); echo 'ok';
    } else {
    echo 'failed'; } }

您需要获取该代码,对其进行优化,并考虑文件权限以及最适合性能的代码。

更新 API 分为三个:核心、插件和主题。所有这些都托管在 wp.org 上,并且您的插件/主题仅存在于WP存储库中就可以自动更新,而无需标准插件/主题标题和自述文件之外的.txt行代码。

wordpress.org 有一个 API 侦听插件/主题更新请求。客户端是本地WordPress安装,它将这些请求发送到 WordPress.org,并等待回复。本地 WordPress 安装使用 wordpress.org 作为默认值,但远程 API 可以是任何自定义 URL,例如 example.com。

如果您的本地WordPress安装 example.com 它将需要一个自定义插件,该插件构建为API来侦听来自其他地方甚至同一服务器上的插件/主题的HTTP的更新请求。

对于将 API 请求发送到服务器(例如 example.com)而不是

wordpress.org 的插件/主题,您需要构建客户端软件(例如客户端类)以将 API 请求发送到 example.com,当客户端收到 HTTP(s) 响应时,它将挂钩到两个过滤器之一:

pre_set_site_transient_update_plugins
pre_set_site_transient_update_themes
一个过滤器钩子

用于插件,一个过滤器钩子用于主题。这些并不是WordPress中唯一可用的钩子。

总而言之,需要为主题插件构建一个客户端库,以便将 HTTP(s) 请求发送到位于服务器上的 API,例如在 example.com。还必须在服务器上(例如在 example.com)上构建和安装插件,以便 API 侦听客户端 HTTP(s) 请求。

客户端和服务器上的这些 HTTP(s) 请求的处理方式可以随心所欲地自定义,但开发解决方案需要时间。有免费的商业解决方案可以满足您的即时需求,或者您可以使用这些解决方案之一作为创建自己的自定义解决方案的开始。

以下是请求和响应流:

client ->(HTTP(s)) request)-> server(API)
server(API) ->(HTTP(s)) response)-> client

以下是两种解决方案作为示例:

(免费) 来自YahnisElsts的wp-update-server

(商业) WooCommerce API Manager

目前还有其他解决方案和教程,Google搜索可以帮助定位。

请记住,您开发的任何解决方案都应将安全性放在首位,以免您的服务器受到黑客攻击,特别是因为您在服务器上公开了API。这就是我将商业解决方案作为众多可用解决方案之一的原因之一。

相关内容

  • 没有找到相关文章

最新更新