问题描述

想知道有没有人知道一个简单的方法。

我的本地开发版本的 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。