로컬로 실행되는 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) 개발 모드가 자동으로 활성화됩니다. mycooltestsite.local 또는 다른 URL과 같은 다른 URL을 사용하는 경우 JETPACK_DEV_DEBUG 상수를 정의해야합니다.

jetpack_development_mode 필터 덕분에 플러그인을 통해 Jetpack의 개발 모드를 활성화 할 수도 있습니다.

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

개발 모드는 로컬 호스트에서 활성화 된 경우 여전히 일을 어떤 기능의 목록 : 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_tokensjetpack_options

추신 : 이 답변 의 첫 번째 버전 은 또 다른 트릭을 사용했습니다. 여기, 이론적으로 모든 것을 잡는 한 줄 수정입니다.


force_user_connection()방법 과 같이 개별 모듈을 해킹해야 할 수도 있습니다 publicize/publicize-jetpack.php. 그럼에도 불구하고 실제로 연결되어있는 것과 똑같이 동작하지는 않습니다. 코드를 광범위하게 조사하지는 않았지만 실제 서버에서와 동일한 방식으로 코드를 실제로 실행하기 위해 해킹해야 할 부분이 더 많다는 의혹이 있습니다.
Ian Dunn

1
@IanDunn은 저의 대답은 "연결되는 것에 대해 잔소리하지 말고 후크를 테스트하겠습니다" 에 관한 것이기 때문에 개발 및 배포 버전을 동기화 한 OP 문제를 실제로 목표로하지 않습니다.
brasofilo

@IanDunn은 다른 방법을 찾았습니다. 답변을 업데이트했습니다. 어떻게 생각하십니까?
brasofilo

어제 그와 비슷한 것을 시도했지만 스테이징 서버에서보고있는 문제를 여전히 재현 할 수 없었으므로 완전히 작동하는지 확실하지 않습니다. 문제는 다른 플러그인의 버그로 밝혀졌으며 이제 수정되어 더 이상 Jetpack을 해킹 할 필요가 없습니다.
Ian Dunn

7

활성화 된 설치의 데이터베이스 필드 값을 로컬 설치로 복사하여 JetPack을 속일 수 있습니다.

JetPack이 연결된 설치 (원격) 에서 다음과 같이로 시작하는 필드를 wp_options테이블에서 검색하십시오 .option_namejetpack_

  • jetpack_activated
  • jetpack_options
  • jetpack_nonce_{random_string}
  • jetpack_active_modules

이 필드와 값을 로컬 설치 데이터베이스에 복사하십시오.

이 프로세스에 대한 자세한 내용은 http://www.ravendevelopers.com/node/57을 참조하십시오.


링크 주셔서 감사합니다. MySQL 오류 "# 1062-키 'option_name'에 대한 중복 항목 'jetpack_activated'"가
표시됨

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)으로 설정하고 개발 서버가있는 IP 주소를 가리 키도록 DNS 레코드를 설정하고 포트 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에서 작동하지 않으면 먼저 (example.com)과 같이 라이브 사이트에 Jetpack을 설치하고 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 에는 두 가지 기능 이 있습니다. 이것이 솔루션이 중복 된 것처럼 보이지만 그렇지 않습니다. :)
brasofilo

흠, 내가 볼게 Jetpack 클래스에있는 is_active 메소드를 하나만 찾았지만 다시 검사 할 것이라고 생각했습니다.
Matt Senate
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.