Jetpack กำลังทำงานอยู่ภายใน [ปิด]


16

สงสัยว่าถ้าใครรู้วิธีง่ายๆในการนี้

โค้ดที่อยู่เบื้องหลังอินสแตนซ์ของ WordPress ในเครื่องของฉันและเวอร์ชั่นสดนั้นกำลังซิงค์กัน (อย่างที่ควรจะเป็น) ปัญหาคือสิ่งนี้หมายความว่าปลั๊กอิน "Jetpack" ทำงานบนเวอร์ชันสด (เนื่องจากเป็นบล็อกสดที่สามารถเชื่อมต่อกับ WordPress.com) แต่ไม่ใช่ในเวอร์ชัน dev ท้องถิ่น

ซึ่งหมายความว่าการทำงานนั้นมีให้ในเวอร์ชันสด (เช่นวิดเจ็ตแถบด้านข้าง "สมัครสมาชิก") แต่ไม่ใช่ในเวอร์ชัน dev ในตัวเครื่องจึงไม่ซิงค์กัน

คำตอบ:


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ในไฟล์ modules ( jetpack/modules/*.php) วิธีนี้เราสามารถตรวจสอบว่าอันไหนจะทำงานในโหมด dev หรือไม่
brasofilo

รายการคุณลักษณะที่ยังคงทำงานเมื่อเปิดใช้งานโหมดการพัฒนาบน localhost: wpperform.com/jetpack-development-mode
Casey Plummer

9

วิธีการในลิงก์ที่ให้บริการโดย @TracyRotton ดูเหมือนว่าจะไม่สามารถใช้งานได้ตั้งแต่ Jetpack 2.0 และ WordPress 3.4.2

แม้แต่การจำลองฟิลด์ฐานข้อมูลทั้งหมดก็ไม่ได้ทำหน้าที่เชื่อมต่อ
ฐานข้อมูล jetpack


เนื่องจากคำถาม 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

PS: รุ่นแรกของคำตอบนี้ใช้เคล็ดลับอื่น ที่นี่มันเป็นการดัดแปลงแบบบรรทัดเดียวที่จับทั้งหมดในทางทฤษฎี ...


นอกจากนี้คุณยังอาจต้องตัดแต่ละโมดูลเช่นวิธีการในforce_user_connection() publicize/publicize-jetpack.phpแม้ว่าจะเป็นเช่นนั้น แต่ก็ยังดูเหมือนจะไม่ทำงานเหมือนกับว่ามันเชื่อมต่อจริง ฉันยังไม่ได้ขุดรหัสอย่างกว้างขวาง แต่ความสงสัยของฉันคือมีหลายสถานที่ในรหัสที่ต้องแฮ็กเพื่อให้สามารถดำเนินการได้จริงเหมือนกับที่ทำบนเซิร์ฟเวอร์จริง
Ian Dunn

1
@IanDunn เห็นด้วยคำตอบของฉันเพิ่มเติมเกี่ยวกับ"อย่าจู้จี้ฉันเกี่ยวกับการเชื่อมต่อและให้ฉันทดสอบ hooks บางอย่าง"และไม่ได้กำหนดเป้าหมายปัญหา OP จริง ๆ ของการมี dev และเวอร์ชันที่ปรับใช้ในการซิงค์
brasofilo

@IanDunn พบวิธีอื่นอาจมีประสิทธิภาพมากกว่า อัปเดตคำตอบคุณคิดอย่างไร?
brasofilo

ฉันลองสิ่งที่คล้ายกับเมื่อวาน แต่ก็ยังไม่สามารถสร้างปัญหาที่ฉันเห็นบนเซิร์ฟเวอร์การจัดเตรียมของฉันดังนั้นฉันไม่แน่ใจว่ามันทำงานได้สมบูรณ์หรือไม่ ปัญหากลายเป็นข้อผิดพลาดในปลั๊กอินที่แตกต่างกันและได้รับการแก้ไขแล้วดังนั้นฉันไม่จำเป็นต้องแฮ็ค Jetpack อีกต่อไป
Ian Dunn

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_activated' สำหรับคีย์ '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 version 2.1.1และ WordPress version3.5

แต่คุณควรตั้งกฎการเพิกเฉยสำหรับไฟล์นี้หรืออะไรทำนองนั้นถ้าคุณต้องการให้ปลั๊กอินทำงานได้ดีบนเว็บไซต์สดเพราะมันจะดีกว่าที่จะเชื่อมต่อด้วยวิธีการที่แท้จริงมากกว่าการเข้ารหัสฮาร์ดแฟล็กที่ใช้งานอยู่


3

หากคุณต้องการฟังก์ชั่น Jetpack อย่างเต็มรูปแบบสภาพแวดล้อมการพัฒนาของคุณจะต้องสามารถสืบค้นได้แบบสาธารณะ คุณสามารถตั้งค่านี้ได้โดยกำหนดที่อยู่ dev เป็นโดเมนย่อยเช่น 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 แล้วนำเข้าการตั้งค่าจากไซต์สดของคุณไปยัง localhost / ตัวอย่างที่ต้องเป็น เหมือนกัน (การตั้งค่าที่นำเข้าจาก example.com อาจไม่ทำงานกับ localhost / example2) สิ่งนี้เป็นสิ่งที่คุณทำบนไซต์สดของคุณตรวจสอบให้แน่ใจว่าการตั้งค่าที่นำเข้านั้นสำหรับไซต์เดียวกันบนโลคัลโฮสต์ของคุณ


-2

อืมดูเหมือนว่าคำตอบของคุณจะง่ายขึ้น ใช้การเปลี่ยนแปลงนี้และฉันจะโหวตคำตอบของคุณ

เนื่องจาก is_active () ผลตอบแทนจริงคุณจะต้องเปลี่ยนหนึ่งบรรทัดใน 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

สวัสดี Matt ฉันเข้าใจว่านี่เป็นความเห็นต่อคำตอบของฉัน มี 2 is_activeฟังก์ชั่นใน JetPack ที่ว่าทำไมการแก้ปัญหาที่ดูเหมือนว่าซ้ำซ้อน แต่ก็ไม่ได้ :)
brasofilo

อืมฉันจะดู ฉันคิดว่าฉันพบวิธี is_active เพียงวิธีเดียวที่อยู่ในคลาส Jetpack แต่จะตรวจสอบอีกครั้ง
แมตต์วุฒิสภา
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.