我正在为我的 WordPress 网站开发一个自定义主题,我想从一个私有的 GitHub 存储库进行管理。 (这个主题永远不会被推入 WordPress 市场)一般的想法是我使用 repo 来管理代码,然后一旦我标记了一个新版本,该标记就会触发 WordPress 主题的更新。
我有这个模式,使用以下作为模板:
https://github.com/krafit/wp-gitlab-updater
(是的,我知道 repo 是针对 Gitlab 而不是 GitHub)
由于我的回购是私人的,我需要生成一个用户令牌以允许更新主题。而且因为用户令牌能够访问我所有的私有存储库,所以从安全的角度来看,与另一个插件共享用户令牌的想法是令人不安的。 (意思是,我不喜欢使用这样的插件:https://github.com/afragen/git-updater)
问题是 GitHub 已经 deprecated 使用
access_token
作为查询字符串参数,因此所有令牌都必须作为 Authorization
标头发送。
如何将授权标头添加到 WordPress 发送以下载工件的请求中?
当我检查新标签时,我使用代码:
protected function fetch_tags_from_repo( $git_url, $repo, $access_token ) {
$request_url = "$git_url/repos/$repo/tags?access_token=$access_token";
$args = [
"headers" => [
"Accept" => "application/vnd.github.v3+json",
"Authorization" => "token " . $access_token
]
];
$request = wp_safe_remote_get( $request_url, $args );
return $request;
}
这没有任何问题。然而……
在
pre_set_site_transient_update_themes
钩子期间,我返回一个看起来像这样的对象:
$transient->response[ $theme['name'] ]['theme'] = $theme['name'];
$transient->response[ $theme['name'] ]['new_version'] = $latest_version;
$transient->response[ $theme['name'] ]['package'] = $theme_package;
问题是,我无法将
Authorization
标头添加到瞬态响应对象。因此,当 WP 稍后尝试下载工件时,它会失败。
注意:
字符串是一个 URL,如下所示:$theme_package
$theme_package = "$git_url/repos/$repo/zipball/refs/tags/$latest_version";
感谢任何支持,谢谢!
老实说,这个问题已经很累了,够了……
从 GitHub 中弹出并使用 Gitlab,因为它们仍然支持
access_token
作为标题。他们有无限的免费私人回购<5gb storage.
如果您打算使用许可证分发私人仓库,我建议您不要在脚本中公开您的访问凭证。
相反,您应该将 GitHub PHP API 与您在回购设置中设置的 SSH 密钥或在您的回购上授予访问权限的 GitHub 应用程序一起使用。
这里有一个可靠的 SDK 可以从:
https://github.com/KnpLabs/php-github-api
或者如您在回答中所建议的那样,可以使用第三方服务代表您管理凭据。
Gitlab 是一个不错的通用且低成本的选择,但如果您正在寻找专门用于 Wordpress 开发的东西,我推荐WP Package Editor (WP2E)
除其他外,该服务使用注册的 GitHub 应用程序从公共/私人 GitHub 存储库中提取最新版本:
https://github.com/marketplace/wp-package-editor
这引用自关于如何使用 GitHub 实现的文档:
要将脚本成功导入到存储库库并稍后作为安装程序依赖项同步,有 4 个条件:
注意:为了与 GitHub 帐户/repo 同步,GitHub 应用程序应通过 saas 面板集成(而不是直接通过 GitHub Marketplace)
最近有一些插件可以解决这个问题。例如 FetchPress https://fetch.press/