Answers:
从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' );
自从Jetpack 2.0和WordPress 3.4.2起,@ TracyRotton提供的链接中的方法似乎不起作用。
即使复制所有数据库字段,它也不充当连接对象。
由于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
。即使这样,它的行为似乎仍与实际连接时并不完全相同。我没有广泛地研究代码,但是我怀疑代码中还有很多地方需要破解,以使其真正与实时服务器上的执行完全相同。
通过将数据库字段值从激活的安装复制到本地安装中,可以欺骗JetPack。
在连接了JetPack的安装(远程)上,在wp_options
表中搜索以option_name
开头的字段jetpack_
,例如:
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相关的任何事情。暂存环境具有许多优点,因此无论如何都要进行设置是值得的投资。
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上查看。
http://ravendevelopers.com/node/57上的修复程序可能不适用于高于2.x的Jetpack版本。如果它在版本2.x上不起作用,请尝试首先在您的活动站点上安装Jetpack,例如(example.com),将其连接到wordpress.com,然后将设置从活动站点导入到本地主机/示例,该主机名必须是相同(从example.com导入的设置可能不适用于localhost / example2)。这是您在实时站点上执行的操作,请确保导入的设置用于本地主机上的同一站点。
嗯,看来您的答案可以简化。采纳此更改,我会投票给你答案。
由于is_active()返回true,因此您只需要在admin_page()中更改一行:
1.
将值更改$is_user_connected
为true
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_active
JetPack中有2个功能,这就是为什么该解决方案似乎多余,但并非如此的原因:)
Requires Connection
在模块文件(jetpack/modules/*.php
)中查找标题。这样,我们可以检查哪些将在开发模式下工作或不工作。