Jetpack работает локально [закрыто]

16

Интересно, знает ли кто-нибудь легкий способ обойти это.

Код моей локальной версии разработчика экземпляра WordPress и версии live синхронизированы (как и должно быть). Проблема в том, что это означает, что плагин Jetpack работает над живой версией (так как это живой блог, который может подключаться к WordPress.com), но не над локальной версией разработчика.

Это означает, что функциональность доступна в реальной версии (например, в виджете боковой панели «Подписаться»), но не в локальной версии разработчика, поэтому они не синхронизированы.

AlecRust
источник

Ответы:

24

Начиная с JetPack 2.2.1 теперь существует режим локальной разработки / отладки. http://jetpack.me/2013/03/28/jetpack-dev-mode-release/

использовать:

define ('JETPACK_DEV_DEBUG', true);

в вашем wp-config, и вы должны иметь доступ к любым модулям, которые не требуют подключения для работы.

Обновление, поскольку около v3.3 другой локальный триггер разработки был добавлен через фильтр вместо определения.

Последняя версия доступна здесь: 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' );
jb510
источник
2
Режим Dev / Debug ищет заголовок Requires Connectionв файлах модулей ( jetpack/modules/*.php). Таким образом, мы можем проверить, какие из них будут работать в режиме разработки или нет.
brasofilo
Список функций, которые все еще работают, когда режим разработки включен на localhost: wpperform.com/jetpack-development-mode
Кейси Пламмер
9

Метод в ссылке, предоставленной @TracyRotton, кажется, не работает с Jetpack 2.0 и WordPress 3.4.2.

Даже реплицируя все поля базы данных, он не действует как связанный.
база данных реактивного ранца


Поскольку вопрос 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что мы можем скопировать изнутри опции jetpack_options.

PS: первая версия этого ответа использовала еще одну хитрость. Здесь, это однострочная модификация, которая ловит все, в теории ...

brasofilo
источник
Вам также может понадобиться взломать отдельные модули, например, force_user_connection()метод в publicize/publicize-jetpack.php. Даже с этим, однако, это все еще, кажется, не ведет себя точно так же, как будто это фактически связано. Я не копался в коде широко, но я подозреваю, что в коде есть еще много мест, которые нужно взломать, чтобы заставить его работать точно так же, как на живом сервере.
Ян Данн
1
@IanDunn, согласен, мой ответ больше о том, что «не надоедай мне о подключении и дай мне проверить некоторые хуки», и на самом деле не нацелен на проблему OP , связанную с синхронизацией dev и развернутых версий.
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 - Дублирующаяся запись 'jetpack_activation' для ключа 'option_name'"
AlecRust
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и WordPress3.5

Но вы должны установить правило игнорирования для этого файла или что-то подобное, если вы хотите, чтобы плагин работал нормально на живом сайте, потому что лучше подключиться реальным способом, чем жестко кодировать активный флаг.

GabLeRoux
источник
3

Если вам нужна полная функциональность Jetpack, ваша среда разработки должна быть общедоступной. Вы можете настроить это, сделав свой адрес dev поддоменом, например, 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 .

birgire
источник
-1

Исправление на http://ravendevelopers.com/node/57 МОЖЕТ не работать с версиями Jetpack выше 2.x. Если он не работает в версии 2.x, попробуйте сначала установить Jetpack на ваш сайт, например (example.com), подключите его к wordpress.com, а затем импортируйте настройки с вашего сайта на ваш localhost / пример, который должен быть то же самое (настройки, импортированные с сайта example.com, могут не работать с localhost / example2). Это то, что вы делаете на своем живом сайте, убедитесь, что импортированные настройки для того же сайта на вашем локальном хосте.

anithegregorian
источник
-2

Хм, похоже, ваш ответ может быть упрощен. Примите это изменение, и я проголосую за ваш ответ.

Поскольку 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_activeJetPack есть 2 функции, поэтому решение кажется избыточным, но это не так :)
brasofilo
Хм, я посмотрю. Я думал, что нашел только один метод is_active, который был в классе Jetpack, но проверим снова.
Мэтт Сенат