Jetpack在本地运行[关闭]


16

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

我的WordPress实例的本地开发版本和实时版本背后的代码是同步的(应该是同步的)。问题是这意味着“ Jetpack”插件正在使用实时版本(因为它是可以连接到WordPress.com的实时博客),而不是本地开发版本。

这意味着功能在实时版本(如“订阅”侧边小部件)上可用,但在本地开发版本上不可用,因此它们不同步。

Answers:


24

从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/

如果站点的主机名中没有句号(即localhost),则会自动启用开发模式。如果使用其他URL,例如mycooltestsite.local或其他名称,则需要定义JETPACK_DEV_DEBUG常量。

您还可以通过插件启用Jetpack的开发模式,这要感谢jetpack_development_mode过滤器:

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' );

2
开发/调试模式Requires Connection在模块文件(jetpack/modules/*.php)中查找标题。这样,我们可以检查哪些将在开发模式下工作或不工作。
brasofilo

当在本地主机上启用开发模式时,哪些功能仍然有效的列表:wpperform.com/jetpack-development-mode
Casey Plummer

9

自从Jetpack 2.0和WordPress 3.4.2起,@ TracyRotton提供的链接中的方法似乎不起作用。

即使复制所有数据库字段,它也不充当连接对象。
jetpack数据库


由于OP问题是关于同步开发和生产环境的,所以也许是不可能的。

我尚未深入测试哪些模块有效,哪些模块无效,但是可以使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我们可以从option内部复制的jetpack_options

PS:此答案的第一个版本使用了另一个技巧。从理论上讲,这是一条涵盖所有内容的单行修改...


您可能还需要修改各个模块,例如中的force_user_connection()方法publicize/publicize-jetpack.php。即使这样,它的行为似乎仍与实际连接时并不完全相同。我没有广泛地研究代码,但是我怀疑代码中还有很多地方需要破解,以使其真正与实时服务器上的执行完全相同。
伊恩·邓恩

1
@IanDunn,同意,我的回答更多是关于“不要让我烦恼要连接并让我测试一些挂钩”,并且实际上并没有针对同步开发和部署版本的OP问题。
brasofilo

@IanDunn,找到了另一种方法,也许更有效。更新了答案,您怎么看?
brasofilo

我尝试了与昨天类似的操作,但是仍然无法重现我在登台服务器上看到的问题,因此我不确定它是否可以完全正常工作。问题原来是另一个插件中的错误,现在已修复,因此我不再需要破解Jetpack。
伊恩·邓恩

7

通过将数据库字段值从激活的安装复制到本地安装中,可以欺骗JetPack。

在连接了JetPack的安装(远程)上,在wp_options表中搜索以option_name开头的字段jetpack_,例如:

  • jetpack_activated
  • jetpack_options
  • jetpack_nonce_{random_string}
  • jetpack_active_modules

将这些字段和值复制到本地安装数据库中。

有关此过程的更多详细信息,请参见:http : //www.ravendevelopers.com/node/57


感谢您的链接。我收到MySQL错误“#1062-键'option_name'的条目'jetpack_activated'重复”
AlecRust 2012年

4

受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

但是,如果您想使插件在实时站点上正常工作,则应为此文件设置一个忽略规则或类似的规则,因为通过真实方式进行连接比对活动标志进行硬编码更好。


3

如果您需要完整的 Jetpack功能,则您的开发环境将需要公开查询。您可以通过以下方式进行设置:将开发人员地址设为子域,例如sandbox.mysite.com,将DNS记录设置为指向开发服务器所在的IP地址,并可能将路由器/防火墙配置为允许端口80请求通过到您的机器上。

另一个选择是运行一个临时环境,并将其用于与Jetpack相关的任何事情。暂存环境具有许多优点,因此无论如何都要进行设置是值得的投资。


2

jetpack_development_mode过滤器:

我只想提及jetpack_development_mode过滤器。

您可以简单地使用:

add_filter( 'jetpack_development_mode', '__return_true' );

在本地运行JetPack

一个小插件:

为了避免wp-config.php使用通常的技巧来修改文件:

define ('JETPACK_DEV_DEBUG', true);

您现在可以通过这个小插件控制它:

<?php
/**
 * Plugin Name: Run JetPack locally
 * Plugin URI:  http://wordpress.stackexchange.com/a/144317/26350
 * Version:     0.0.1
 */
add_filter( 'jetpack_development_mode', '__return_true' );

您可以在GitHub上查看。


-1

http://ravendevelopers.com/node/57上的修复程序可能不适用于高于2.x的Jetpack版本。如果它在版本2.x上不起作用,请尝试首先在您的活动站点上安装Jetpack,例如(example.com),将其连接到wordpress.com,然后将设置从活动站点导入到本地主机/示例,该主机名必须是相同(从example.com导入的设置可能不适用于localhost / example2)。这是您在实时站点上执行的操作,请确保导入的设置用于本地主机上的同一站点。


-2

嗯,看来您的答案可以简化。采纳此更改,我会投票给你答案。

由于is_active()返回true,因此您只需要在admin_page()中更改一行:

1.将值更改$is_user_connectedtrue

function admin_page() {
    global $current_user;

    $role = $this->translate_current_user_to_role();
    $is_connected = Jetpack::is_active();
    $user_token = Jetpack_Data::get_access_token($current_user->ID);
    $is_user_connected = true;//$user_token && !is_wp_error($user_token);
    // ...function continues

嗨,马特,我知道这是对我的回答的评论。is_activeJetPack中有2个功能,这就是为什么该解决方案似乎多余,但并非如此的原因:)
brasofilo 2012年

嗯,我来看一下。我以为我只在Jetpack类中找到了一个is_active方法,但是会再次检查。
马特参议院
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.