问题描述
想知道有没有人知道一个简单的方法。
我的本地开发版本的 WordPress 实例和实时版本之后的代码正在同步 (应该是) 。问题是这意味着”Jetpack” 插件正在使用实时版本 (因为它是一个可以连接到 WordPress.com 的实时博客),而不是在本地的开发版本上。
这意味着实时版本上可以使用功能 (如”Subscribe” 侧边栏小工具),但不在本地开发版本上,因此它们不同步。
最佳解决方案
从 JetPack 2.2.1 开始,现在有一个本地开发/调试模式。 http://jetpack.me/2013/03/28/jetpack-dev-mode-release/
使用:
define ('JETPACK_DEV_DEBUG', true);
在您的 wp-config 中,您应该可以访问任何不需要连接功能的模块。
更新,因为在 v3.3 附近,通过过滤器而不是 define 添加了另一个本地开发触发器。
现在最新的是:http://jetpack.me/support/development-mode/
Development mode automatically gets enabled if you don』t have a period in your site』s hostname, i.e. localhost. If you use a different URL, such as mycooltestsite.local or something, then you will need to define the JETPACK_DEV_DEBUG constant.
You can also enable Jetpack』s development mode through a plugin, thanks to the jetpack_development_mode filter:
add_filter( 'jetpack_development_mode', '__return_true' );
从 Jetpack v3.9 开始,现在还有一个分段模式过滤器,强制将站点作为分段站点而不是生产进行重新认证:https://developer.jetpack.com/hooks/jetpack_is_staging_site/
add_filter( 'jetpack_is_staging_site', '__return_true' );
次佳解决方案
由 @TracyRotton 提供的链接中的方法似乎没有工作,因为 Jetpack 2.0 和 WordPress 3.4.2 。
甚至复制所有的数据库字段,它不会作为连接。
由于 OP 问题是关于同步开发和生产环境,也许是不可能的。
我没有测试 in-depth 哪些模块工作,哪些模块不工作,但 Jetpack 可以被欺骗,认为它被连接在文件/plugins/jetpack/jetpack.php
中进行了以下修改。
在 Jetpack_Data
类中,修改了第一个函数 get_access_token
,如:
class Jetpack_Data {
function get_access_token( $user_id = false ) {
return 'USER_TOKENS-VALUE-FOUND-INSIDE-THE-OPTION-JETPACK_OPTIONS'; // <---trick
if ( $user_id ) {
if ( !$tokens = Jetpack::get_option( 'user_tokens' ) ) {
return false;
}
或者简单地放置一个 return true;
代替 user_tokens
,我们可以从选项 jetpack_options
中复制。
PS:这个答案的 first version 使用了另一个技巧。在这里,它是一个 one-line 修改,捕获所有,在理论上…
第三种解决方案
可以通过将激活的安装中的数据库字段值复制到本地安装中来刺激 JetPack 。
在使用 JetPack 连接的安装 (远程) 上,以 jetpack_
开头的 option_name
字段搜索 wp_options
表,例如:
-
jetpack_activated
-
jetpack_options
-
jetpack_nonce_{random_string}
-
jetpack_active_modules
将这些字段和值复制到本地安装数据库中。
有关此过程的更多详细信息,请参阅:http://www.ravendevelopers.com/node/57
第四种方案
灵感来自于 brasofilo 的最新解决方案,甚至还有一个更简单的方法,只需打开 jetpack.php 即可
/**
* Is Jetpack active?
*/
public static function is_active() {
return (bool) Jetpack_Data::get_access_token( JETPACK_MASTER_USER );
}
并替换为:
/**
* Is Jetpack active?
*/
public static function is_active() {
return true;
}
似乎比使用数据库要简单得多,并且使用 Jetpack 版本 2.1.1
和 WordPress 版本 3.5
但是您应该为此文件设置一个忽略规则,如果您希望保持插件在实时站点上正常工作,因为通过真正的方式来连接,而不是强制编辑活动标志。
第五种方案
如果您想要完整的 Jetpack 功能,您的开发环境将需要公开查询。您可以通过使您的开发者地址成为子域,例如 sandbox.mysite.com,将 DNS 记录设置为指向开发服务器所在的 IP 地址,并且可能配置路由器/防火墙以允许端口 80 请求通过您的计算机。
另一个选项是运行分段环境,并将其用于任何 Jetpack-related 。分段环境有很多优点,所以无论如何,这是一个有价值的投资。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。