Jetpack працює локально [закрито]


16

Цікаво, чи хтось знає простий спосіб цього.

Код, що стоїть за моєю локальною версією розробленого примірника WordPress, та реальною версією синхронізуються (як і належить). Проблема полягає в тому, що плагін "Jetpack" працює над живою версією (оскільки це блог в реальному часі, який може підключатися до WordPress.com), але не над локальною версією розробника.

Це означає, що функціональність доступна в реальній версії (наприклад, віджет бічної панелі "Підписатися"), але не в локальній версії розробника, тому вони не синхронізовані.

Відповіді:


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

2
Режим Dev / Debug шукає заголовок Requires Connectionу файлах модулів ( jetpack/modules/*.php). Таким чином ми можемо перевірити, які з них працюватимуть у режимі розробки чи ні.
brasofilo

Перелік тих функцій, які все ще працюють, коли ввімкнено режим розробки на localhost: wpperform.com/jetpack-development-mode
Casey Plummer

9

Метод у посиланні, наданий @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'; // <---trick
        if ( $user_id ) {
            if ( !$tokens = Jetpack::get_option( 'user_tokens' ) ) {
                return false;
            }

Або просто поставити return true;замість того, user_tokensщо ми можемо скопіювати зсередини опції jetpack_options.

PS: Перша версія цієї відповіді використовувала ще одну хитрість. Ось, це однолінійна модифікація, яка охоплює всіх, теоретично ...


Можливо, вам також знадобиться зламати окремі модулі, як, наприклад, force_user_connection()метод в publicize/publicize-jetpack.php. Навіть незважаючи на це, все ж, схоже, він не веде себе так само, як ніби він насправді пов'язаний. Я не переглянув код широко, але я підозрюю, що в коді є багато інших місць, які потрібно зламати, щоб дійсно змусити його виконувати точно так само, як це було б на живому сервері.
Ян Данн

1
@IanDunn, погодився, моя відповідь стосується більше того, «не торкайтеся мене щодо підключення, і дозвольте перевірити деякі гачки», і насправді не націлений на питання ОП щодо синхронізації розроблених та розгорнутих версій.
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_activate "для ключа" 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

Але вам слід встановити правило ігнорування цього файлу чи щось подібне, якщо ви хочете, щоб плагін працював нормально на веб-сайті, тому що його краще підключити реальним способом, ніж жорстке кодування активного прапора.


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 НЕ МОЖЕ працювати з версіями Jetpack вище 2.x. Якщо це не працює у версії 2.x, спробуйте спочатку встановити Jetpack на своєму веб-сайті, наприклад (example.com), підключіть його до wordpress.com, а потім імпортуйте налаштування зі свого веб-сайту на локальний хост / приклад, який повинен бути те саме (налаштування, імпортовані з example.com, можливо, не працюють з localhost / example2). Річ - це те, що ви робите на своєму прямому веб-сайті, переконайтесь, що імпортовані налаштування є для того самого сайту у вашому localhost.


-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, але перевіряю ще раз.
Метт Сенат
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.