Запуск Jetpack локально

15 февр. 2012 г., 01:13:52
Просмотры: 18.3K
Голосов: 17

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

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

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

0
Все ответы на вопрос 8
2
25

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

Используйте:

define ('JETPACK_DEV_DEBUG', true);

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

Обновление: примерно с версии 3.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' );
30 мар. 2013 г. 03:23:31
Комментарии

Режим Dev/Debug ищет заголовок Requires Connection в файлах модулей (jetpack/modules/*.php). Таким образом, мы можем проверить, какие из них будут работать в режиме разработки, а какие нет.

brasofilo brasofilo
17 июл. 2013 г. 23:25:36

Список функций, которые продолжают работать при включении режима разработки на localhost: https://wpperform.com/jetpack-development-mode/

Casey Plummer Casey Plummer
10 янв. 2019 г. 04:57:58
4

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

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


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

Я не тестировал глубоко, какие модули работают, а какие нет, но 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'; // <---обход
        if ( $user_id ) {
            if ( !$tokens = Jetpack::get_option( 'user_tokens' ) ) {
                return false;
            }

Или просто вставьте return true; вместо user_tokens, который можно скопировать из опции jetpack_options.

Примечание: в первой версии этого ответа использовался другой обходной путь. Здесь представлено однострочное изменение, которое, в теории, охватывает все случаи...

14 нояб. 2012 г. 21:59:04
Комментарии

Возможно, вам также придется модифицировать отдельные модули, например, метод force_user_connection() в файле publicize/publicize-jetpack.php. Однако даже после этого он все равно не ведет себя так же, как при реальном подключении. Я не углублялся в код слишком тщательно, но подозреваю, что в коде есть еще множество мест, которые нужно изменить, чтобы добиться полного соответствия поведения с рабочим сервером.

Ian Dunn Ian Dunn
1 янв. 2013 г. 23:42:17

@IanDunn, согласен, мой ответ скорее о том, чтобы "не докучать мне сообщениями о подключении и дать протестировать некоторые хуки", и не решает проблему автора вопроса о синхронизации dev и рабочих версий.

brasofilo brasofilo
2 янв. 2013 г. 14:34:46

@IanDunn, нашел другой способ, возможно, более эффективный. Обновил ответ, что думаешь?

brasofilo brasofilo
2 янв. 2013 г. 16:08:00

Вчера я попробовал нечто подобное, но так и не смог воспроизвести проблему, с которой столкнулся на своем staging-сервере, поэтому не уверен, работает ли это полностью или нет. Проблема оказалась багом в другом плагине, и сейчас она исправлена, так что мне больше не нужно взламывать Jetpack.

Ian Dunn Ian Dunn
2 янв. 2013 г. 19:08:28
1

Можно обмануть JetPack, скопировав значения полей базы данных из активированной установки в вашу локальную установку.

На удалённой установке с подключённым JetPack найдите в таблице wp_options поля option_name, начинающиеся с jetpack_, например:

  • jetpack_activated
  • jetpack_options
  • jetpack_nonce_{random_string}
  • jetpack_active_modules

Скопируйте эти поля и их значения в базу данных вашей локальной установки.

Для получения более подробной информации об этом процессе см.: http://www.ravendevelopers.com/node/57

11 окт. 2012 г. 23:15:59
Комментарии

Спасибо за ссылку. Получаю ошибку MySQL "#1062 - Duplicate entry 'jetpack_activated' for key 'option_name'"

Alec Rust Alec Rust
12 окт. 2012 г. 03:30:51
0

Вдохновленный последним решением brasofilo, есть еще более простой способ: просто откройте jetpack.php, найдите

/**
* Активен ли Jetpack?
*/
public static function is_active() {
    return (bool) Jetpack_Data::get_access_token( JETPACK_MASTER_USER );
}

и замените на это:

/**
* Активен ли Jetpack?
*/
public static function is_active() {
    return true;
}

Это кажется намного проще, чем возиться с базой данных, и сработало для меня с Jetpack версии 2.1.1 и WordPress версии 3.5.

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

18 янв. 2013 г. 16:55:18
0

Если вам нужна полная функциональность Jetpack, ваша среда разработки должна быть доступна для публичных запросов. Это можно настроить, создав субдомен для вашего dev-адреса, например sandbox.mysite.com, указав DNS-запись на IP-адрес вашего сервера разработки и, возможно, настроив маршрутизатор/брандмауэр для разрешения запросов через порт 80 на вашу машину.

Другой вариант — использовать staging-окружение для всех задач, связанных с Jetpack. Staging-окружения имеют множество преимуществ, поэтому их настройка в любом случае будет полезным вложением.

15 февр. 2012 г. 01:26:19
0

Фильтр 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: Запуск JetPack локально
 * Plugin URI:  http://wordpress.stackexchange.com/a/144317/26350
 * Version:     0.0.1
 */
add_filter( 'jetpack_development_mode', '__return_true' );

Вы можете посмотреть его на GitHub.

13 мая 2014 г. 23:30:54
0
-1

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

26 дек. 2012 г. 21:31:19
2
-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);
    // ...функция продолжается
27 нояб. 2012 г. 00:14:22
Комментарии

Привет, Мэтт, я понимаю, что это комментарий к моему ответу. В JetPack есть 2 функции is_active, поэтому решение может показаться избыточным, но это не так :)

brasofilo brasofilo
27 нояб. 2012 г. 04:15:05

Хм, я проверю. Я думал, что нашел только один метод is_active в классе Jetpack, но проверю еще раз.

Matt Senate Matt Senate
30 нояб. 2012 г. 23:15:17