Jetpack Running Secara Lokal [ditutup]

16

Ingin tahu apakah ada yang tahu cara mudah untuk mengatasi ini.

Kode di belakang versi pengembang lokal saya dari contoh WordPress dan versi langsung dalam sinkronisasi (sebagaimana mestinya). Masalahnya adalah ini berarti plugin "Jetpack" berfungsi pada versi langsung (karena ini adalah blog langsung yang dapat terhubung ke WordPress.com) tetapi tidak pada versi pengembang lokal.

Ini berarti fungsionalitas tersedia pada versi live (seperti widget sidebar "Berlangganan") tetapi tidak pada versi dev lokal, sehingga tidak sinkron.

AlecRust
sumber

Jawaban:

24

Pada JetPack 2.2.1 sekarang ada mode pengembangan / debug lokal. http://jetpack.me/2013/03/28/jetpack-dev-mode-release/

menggunakan:

define ('JETPACK_DEV_DEBUG', true);

di wp-config Anda dan Anda harus memiliki akses ke modul apa pun yang tidak memerlukan koneksi untuk berfungsi.

Perbarui, karena sekitar v3.3 pemicu pengembangan lokal lainnya ditambahkan melalui filter alih-alih ditentukan.

Terbaru sekarang di sini: http://jetpack.me/support/development-mode/

Mode pengembangan secara otomatis diaktifkan jika Anda tidak memiliki periode dalam nama host situs Anda, yaitu localhost. Jika Anda menggunakan URL yang berbeda, seperti mycooltestsite.local atau semacamnya, maka Anda perlu mendefinisikan konstanta JETPACK_DEV_DEBUG.

Anda juga dapat mengaktifkan mode pengembangan Jetpack melalui sebuah plugin, berkat filter jetpack_development_mode:

add_filter( 'jetpack_development_mode', '__return_true' );

Pada Jetpack v3.9 sekarang juga ada filter mode pementasan yang memaksa sebuah situs untuk direkonsiliasi sebagai situs pementasan daripada produksi: https://developer.jetpack.com/hooks/jetpack_is_staging_site/

add_filter( 'jetpack_is_staging_site', '__return_true' );
jb510
sumber
2
Mode Dev / Debug mencari header Requires Connectiondi file modul ( jetpack/modules/*.php). Dengan cara ini kita dapat memeriksa mana yang akan bekerja dalam mode dev atau tidak.
brasofilo
Daftar fitur apa yang masih berfungsi ketika mode pengembangan diaktifkan di localhost: wpperform.com/jetpack-development-mode
Casey Plummer
9

Metode dalam tautan yang disediakan oleh @TracyRotton tampaknya tidak berfungsi sejak Jetpack 2.0 dan WordPress 3.4.2.

Bahkan mereplikasi semua bidang basis data, itu tidak bertindak sebagai terhubung.
basis data jetpack


Karena pertanyaan OP adalah tentang menyinkronkan pengembangan dan lingkungan produksi, mungkin itu tidak mungkin.

Saya belum menguji modul mana yang bekerja dan mana yang tidak, tetapi Jetpack dapat diperdaya untuk meyakini bahwa itu terhubung membuat modifikasi berikut dalam file /plugins/jetpack/jetpack.php.

Di dalam kelas Jetpack_Data, modifikasi fungsi pertama get_access_tokenseperti:

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

Atau cukup masukkan return true;saja user_tokensyang dapat kita salin dari dalam opsi jetpack_options.

PS: versi pertama jawaban ini menggunakan trik lain. Di sini, ini adalah modifikasi satu baris yang menangkap semua, secara teori ...

brasofilo
sumber
Anda mungkin juga perlu meretas modul individual, seperti force_user_connection()metode di publicize/publicize-jetpack.php. Meskipun begitu, meskipun demikian, kelihatannya masih tidak berlaku sama seperti jika itu benar-benar terhubung. Saya belum menggali kode secara luas, tetapi kecurigaan saya adalah bahwa ada banyak tempat dalam kode yang perlu diretas untuk benar-benar membuatnya mengeksekusi persis sama seperti pada server langsung.
Ian Dunn
1
@IanDunn, setuju, jawaban saya adalah lebih lanjut tentang "jangan cerewetkan saya tentang terhubung dan biarkan saya menguji beberapa kait" dan tidak benar-benar menargetkan masalah OP memiliki dev dan menyebarkan versi dalam sinkronisasi.
brasofilo
@IanDunn, menemukan cara lain, mungkin lebih efektif. Memperbarui jawabannya, bagaimana menurut Anda?
brasofilo
Saya mencoba sesuatu yang mirip dengan itu kemarin, tetapi masih tidak dapat mereproduksi masalah yang saya lihat di server pementasan saya, jadi saya tidak yakin apakah itu berfungsi sepenuhnya atau tidak. Masalahnya ternyata adalah bug di plugin yang berbeda dan sudah diperbaiki sekarang, jadi saya tidak perlu lagi meretas Jetpack.
Ian Dunn
7

Dimungkinkan untuk menipu JetPack dengan menyalin nilai-nilai bidang basis data dari instalasi yang diaktifkan ke instalasi lokal Anda.

Pada instalasi (jarak jauh) dengan JetPack yang terhubung, cari wp_optionstabel untuk option_namebidang yang dimulai dengan jetpack_, seperti:

  • jetpack_activated
  • jetpack_options
  • jetpack_nonce_{random_string}
  • jetpack_active_modules

Salin bidang dan nilai ini ke basis data pemasangan lokal Anda.

Untuk detail lebih lanjut tentang proses ini lihat: http://www.ravendevelopers.com/node/57

Tracy Rotton
sumber
Terima kasih untuk tautannya. Saya mendapatkan kesalahan MySQL "# 1062 - Entri duplikat 'jetpack_activated' untuk key 'option_name'"
AlecRust
4

Terinspirasi oleh solusi terbaru brasofilo, bahkan ada cara yang lebih mudah, cukup buka jetpack.php, cari

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

dan ganti dengan ini:

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

Tampaknya jauh lebih mudah daripada bermain dengan database dan bekerja untuk saya dengan versi Jetpack 2.1.1dan versi WordPress3.5

Tetapi Anda harus menetapkan aturan abaikan untuk file ini atau sesuatu seperti itu jika Anda ingin agar plugin berfungsi dengan baik di situs langsung karena lebih baik terhubung dengan cara yang sebenarnya daripada meng-hardcoding flag yang aktif.

GabLeRoux
sumber
3

Jika Anda ingin fungsionalitas Jetpack penuh , lingkungan pengembangan Anda harus dapat diminta secara publik. Anda dapat mengatur ini dengan menjadikan alamat dev Anda sebuah subdomain, misalnya sandbox.mysite.com, mengatur catatan DNS untuk menunjuk ke alamat IP di mana server pengembangan Anda berada, dan mungkin mengkonfigurasi router / firewall Anda untuk memungkinkan permintaan port 80 melalui ke mesin Anda.

Pilihan lain adalah menjalankan lingkungan pementasan, dan menggunakannya untuk apa pun yang terkait dengan Jetpack. Pementasan lingkungan memiliki banyak keuntungan, jadi itu akan menjadi investasi yang berharga untuk mengaturnya.

Matthew Boynes
sumber
2

The jetpack_development_modefilter:

Saya hanya ingin menyebutkan jetpack_development_modefilter.

Anda cukup menggunakan:

add_filter( 'jetpack_development_mode', '__return_true' );

untuk menjalankan JetPack secara lokal.

Plugin kecil:

Untuk menghindari keharusan memodifikasi wp-config.phpfile dengan trik biasa:

define ('JETPACK_DEV_DEBUG', true);

Anda sekarang dapat mengontrolnya melalui plugin kecil ini:

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

Anda dapat memeriksanya di GitHub .

birgire
sumber
-1

Perbaikan pada http://ravendevelopers.com/node/57 MUNGKIN tidak berfungsi dengan versi Jetpack di atas 2.x. Jika tidak berfungsi pada versi 2.x cobalah menginstal Jetpack di situs langsung Anda terlebih dahulu seperti (example.com), sambungkan ke wordpress.com dan kemudian impor pengaturan dari situs langsung Anda ke localhost / contoh yang harus sama (pengaturan yang diimpor dari example.com mungkin tidak berfungsi dengan localhost / example2). Hal yang Anda lakukan di situs langsung, pastikan pengaturan yang diimpor adalah untuk situs yang sama di hosting Anda.

anithegregorian
sumber
-2

Hmm, sepertinya jawaban Anda bisa disederhanakan. Terapkan perubahan ini dan saya akan memilih jawaban Anda.

Karena is_active () mengembalikan true, Anda hanya perlu mengubah satu baris di admin_page ():

1.ubah nilainya $is_user_connectedmenjaditrue

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
Matt Senate
sumber
Hai Matt, saya mengerti bahwa ini adalah komentar untuk jawaban saya. Ada 2 is_activefungsi di JetPack, itu sebabnya solusinya tampak mubazir, tetapi tidak :)
brasofilo
Hmm, aku akan memeriksanya. Saya pikir saya hanya menemukan satu metode is_active yang ada di kelas Jetpack, tetapi akan memeriksa lagi.
Matt Senate