Jetpack Chạy cục bộ [đã đóng]


16

Tự hỏi nếu có ai biết một cách dễ dàng xung quanh này.

Mã đằng sau phiên bản dev cục bộ của tôi về một phiên bản WordPress và phiên bản trực tiếp được đồng bộ hóa (như chúng phải vậy). Vấn đề là điều này có nghĩa là plugin "Jetpack" đang hoạt động trên phiên bản trực tiếp (vì đây là blog trực tiếp có thể kết nối với WordPress.com) nhưng không phải trên phiên bản dev cục bộ.

Điều này có nghĩa là chức năng có sẵn trên phiên bản trực tiếp (như tiện ích thanh bên "Đăng ký") nhưng không có trên phiên bản dev cục bộ, do đó chúng không đồng bộ.

Câu trả lời:


24

Kể từ JetPack 2.2.1, giờ đây đã có chế độ gỡ lỗi / phát triển cục bộ. http://jetpack.me/2013/03/11/jetpack-dev-mode-release/

sử dụng:

define ('JETPACK_DEV_DEBUG', true);

trong wp-config của bạn và bạn sẽ có quyền truy cập vào bất kỳ mô-đun nào không yêu cầu kết nối với chức năng.

Cập nhật, vì khoảng v3.3, một trình kích hoạt phát triển cục bộ khác đã được thêm thông qua bộ lọc thay vì xác định.

Mới nhất hiện có tại đây: http://jetpack.me/support/development-mode/

Chế độ phát triển sẽ tự động được bật nếu bạn không có dấu chấm trong tên máy chủ của trang web, tức là localhost. Nếu bạn sử dụng một URL khác, chẳng hạn như mycooltestsite.local hoặc một cái gì đó, thì bạn sẽ cần xác định hằng số JETPACK_DEV_DEBUG.

Bạn cũng có thể bật chế độ phát triển của Jetpack thông qua plugin, nhờ bộ lọc jetpack_development_mode:

add_filter( 'jetpack_development_mode', '__return_true' );

Kể từ Jetpack v3.9, giờ đây cũng có bộ lọc chế độ phân tầng buộc một trang web phải được thu hồi lại dưới dạng trang dàn thay vì sản xuất: https://developer.jetpack.com/hooks/jetpack_is_staging_site/

add_filter( 'jetpack_is_staging_site', '__return_true' );

2
Chế độ Dev / Debug tìm tiêu đề Requires Connectiontrong các tệp mô-đun ( jetpack/modules/*.php). Bằng cách này, chúng ta có thể kiểm tra cái nào sẽ hoạt động ở chế độ dev hay không.
brasofilo

Danh sách các tính năng vẫn hoạt động khi chế độ phát triển được bật trên localhost: wpperform.com/jetpack-development-mode
Casey Plummer

9

Phương thức trong liên kết được cung cấp bởi @T nềnR Bông dường như không hoạt động kể từ Jetpack 2.0 và WordPress 3.4.2.

Ngay cả khi sao chép tất cả các trường cơ sở dữ liệu, nó không hoạt động như được kết nối.
cơ sở dữ liệu jetpack


Vì câu hỏi của OP là về việc đồng bộ hóa một môi trường phát triển và sản xuất, có lẽ điều đó là không thể.

Tôi chưa kiểm tra sâu các mô-đun nào hoạt động và không hoạt động, nhưng Jetpack có thể bị lừa tin rằng nó được kết nối thực hiện sửa đổi sau trong tệp /plugins/jetpack/jetpack.php.

Trong lớp Jetpack_Data, sửa đổi hàm đầu tiên get_access_tokennhư:

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;
            }

Hoặc chỉ cần đặt một return true;thay vì user_tokenschúng ta có thể sao chép từ bên trong tùy chọn jetpack_options.

PS: phiên bản đầu tiên của câu trả lời này đã sử dụng một mẹo khác. Ở đây, đó là một sửa đổi một dòng bắt tất cả, theo lý thuyết ...


Bạn cũng có thể cần phải hack các mô-đun riêng lẻ, như force_user_connection()phương thức trong publicize/publicize-jetpack.php. Mặc dù vậy, mặc dù vậy, nó dường như vẫn không hoạt động giống hệt như khi nó thực sự được kết nối. Tôi đã không tìm hiểu sâu về mã, nhưng sự nghi ngờ của tôi là có rất nhiều vị trí trong mã cần được hack để thực sự làm cho nó thực thi chính xác như trên máy chủ trực tiếp.
Ian Dunn

1
@IanDunn, đồng ý, câu trả lời của tôi là về "đừng cằn nhằn tôi về việc được kết nối và để tôi kiểm tra một số hook" và không thực sự nhắm mục tiêu vấn đề OP có dev và các phiên bản được triển khai đồng bộ hóa.
brasofilo

@IanDunn, tìm thấy một cách khác, có thể hiệu quả hơn. Cập nhật câu trả lời, bạn nghĩ gì?
brasofilo

Tôi đã thử một cái gì đó tương tự như ngày hôm qua, nhưng vẫn không thể tái tạo vấn đề tôi gặp trên máy chủ dàn dựng của mình, vì vậy tôi không chắc liệu nó có hoạt động hoàn toàn hay không. Vấn đề hóa ra là một lỗi trong một plugin khác và hiện đã được sửa, vì vậy tôi không còn cần phải hack Jetpack nữa.
Ian Dunn

7

Có thể lừa JetPack bằng cách sao chép các giá trị trường cơ sở dữ liệu từ cài đặt được kích hoạt vào cài đặt cục bộ của bạn.

Khi cài đặt (từ xa) với JetPack được kết nối, tìm kiếm wp_optionsbảng cho option_namecác trường bắt đầu bằng jetpack_, chẳng hạn như:

  • jetpack_activated
  • jetpack_options
  • jetpack_nonce_{random_string}
  • jetpack_active_modules

Sao chép các trường và giá trị này vào cơ sở dữ liệu cài đặt cục bộ của bạn.

Để biết thêm chi tiết về quy trình này, hãy xem: http://www.ravendevelopers.com/node/57


Cảm ơn các liên kết. Tôi gặp lỗi MySQL "# 1062 - Mục trùng lặp 'jetpack_activated' cho khóa '
tùy chọn_name

4

Lấy cảm hứng từ giải pháp mới nhất của brasofilo, thậm chí còn có một cách dễ dàng hơn, chỉ cần mở jetpack.php, tìm kiếm

/**
* Is Jetpack active?
*/
public static function is_active() {
    return (bool) Jetpack_Data::get_access_token( JETPACK_MASTER_USER );
}

và thay thế bằng điều này:

/**
* Is Jetpack active?
*/
public static function is_active() {
    return true;
}

Có vẻ dễ hơn nhiều so với chơi với cơ sở dữ liệu và làm việc với tôi với phiên bản Jetpack 2.1.1và phiên bản WordPress3.5

Nhưng bạn nên đặt quy tắc bỏ qua cho tệp này hoặc một cái gì đó tương tự nếu bạn muốn giữ cho plugin hoạt động tốt trên trang web trực tiếp vì tốt hơn là được kết nối bằng cách thực sự hơn là mã hóa cờ hoạt động.


3

Nếu bạn muốn có đầy đủ chức năng Jetpack, môi trường phát triển của bạn sẽ cần được truy vấn công khai. Bạn có thể thiết lập điều này bằng cách đặt địa chỉ nhà phát triển của mình thành tên miền phụ, ví dụ: sandbox.mysite.com, đặt bản ghi DNS đó để trỏ đến địa chỉ IP nơi đặt máy chủ phát triển của bạn và có thể định cấu hình bộ định tuyến / tường lửa của bạn để cho phép 80 yêu cầu qua cổng đến máy của bạn.

Một tùy chọn khác là chạy môi trường dàn dựng và sử dụng môi trường đó cho mọi thứ liên quan đến Jetpack. Môi trường dàn dựng có nhiều lợi thế, vì vậy dù sao đi nữa cũng sẽ là một khoản đầu tư đáng giá.


2

Bộ jetpack_development_modelọc:

Tôi chỉ muốn đề cập đến jetpack_development_modebộ lọc.

Bạn chỉ có thể sử dụng:

add_filter( 'jetpack_development_mode', '__return_true' );

để chạy JetPack cục bộ.

Một plugin nhỏ:

Để tránh phải sửa đổi wp-config.phptệp bằng thủ thuật thông thường:

define ('JETPACK_DEV_DEBUG', true);

bây giờ bạn có thể kiểm soát nó thông qua plugin nhỏ này:

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

Bạn có thể kiểm tra nó trên GitHub .


-1

Bản sửa lỗi trên http://ravendevelopers.com/node/57 MIGHT không hoạt động với các phiên bản Jetpack ở trên 2.x. Nếu nó không hoạt động trên phiên bản 2.x, hãy thử cài đặt Jetpack trên trang web trực tiếp của bạn trước tiên như (example.com), kết nối nó với wordpress.com và sau đó nhập cài đặt từ trang web trực tiếp của bạn vào localhost / ví dụ phải là tương tự (cài đặt được nhập từ example.com có ​​thể không hoạt động với localhost / example2). Điều đó là những gì bạn làm trên trang web trực tiếp của mình, hãy đảm bảo các cài đặt đã nhập cho cùng một trang trên localhost của bạn.


-2

Hmm, có vẻ như câu trả lời của bạn có thể được đơn giản hóa. Thông qua thay đổi này và tôi sẽ bỏ phiếu cho câu trả lời của bạn.

Vì is_active () trả về true, bạn chỉ cần thay đổi một dòng trong admin_page ():

1.thay đổi giá trị $is_user_connectedthànhtrue

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

Xin chào Matt, tôi hiểu rằng đây là một nhận xét cho câu trả lời của tôi. Có 2 is_activechức năng trong JetPack, đó là lý do tại sao giải pháp có vẻ dư thừa, nhưng không phải vậy :)
brasofilo

Hmm, tôi sẽ xem xét. Tôi nghĩ rằng tôi chỉ tìm thấy một phương thức is_active trong lớp Jetpack, nhưng sẽ kiểm tra lại.
Matt Thượng viện
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.