วิธีที่ถูกต้องในการใช้ฟังก์ชั่น WordPress นอกไฟล์ WordPress คืออะไร?


59

ฉันอ่านเกี่ยวกับ 2 วิธีในการเริ่มต้นฟังก์ชั่น WordPress นอกไฟล์ WordPress ดังนั้นเราจึงสามารถใช้ฟังก์ชั่นเหล่านี้ในหน้าหรือเว็บไซต์ใด ๆ นอกบล็อก WordPress

วิธีใดในสองวิธีนี้เป็นวิธีที่ถูกต้อง กรณีการใช้งานสำหรับแต่ละวิธีคืออะไรถ้าทั้งคู่ถูกต้อง? ความเคารพระหว่างการใช้วิธีการหนึ่งหรืออื่น ๆ คืออะไร?

วิธีที่ 1:

<?php 
    define('WP_USE_THEMES', false);
    require('./wp-blog-header.php');
?>

วิธีที่ 2:

<?php 
    define('WP_USE_THEMES', false);
    require('./wp-load.php');
?>

ฟังก์ชัน WP ใดที่คุณพยายามใช้ "นอก WP" และเพราะเหตุใด วิธีการเหล่านี้อย่างใดอย่างหนึ่งจะยังคงโหลดสภาพแวดล้อม WP (แม้ว่าจะไม่มีการสนับสนุนชุดรูปแบบ) ดังนั้นคุณยังคงเรียกใช้ฟังก์ชันภายใน WP
EAMann

ฉันพยายามทำความเข้าใจความแตกต่างระหว่าง 2 วิธี สิ่งที่ฉันจะทำคือรวมธีม wordpress เข้ากับสคริปต์สนับสนุนของฉัน ดังนั้นจะต้องมีส่วนหัวส่วนท้ายและห่วงจาก WordPress บวกสนับสนุนบางส่วนสำหรับเครื่องมือและปลั๊กอินอื่น ๆ
alhoseany

ฉันสงสัยจริงๆว่านี่คือวิธีที่คุณต้องการทำสิ่งต่าง ๆ ... มีวิธีแก้ปัญหาที่ดีกว่าการลองบู๊ต WordPress เอง
EAMann

ฉันเปิดกว้างสำหรับคำแนะนำฉันกำลังมองหาวิธีที่ดีที่สุดในการทำสิ่งต่าง ๆ ? วิธีที่ดีที่สุดในการรวมธีม wordpress กับแอปพลิเคชันเว็บภายนอกคืออะไร?
alhoseany

คำตอบ:


58

มีความแตกต่างระหว่างไฟล์เล็กน้อย เมื่อคุณดูหน้าเวิร์ดเพรส, index.phpไฟล์แรกเรียกว่าเป็น และเป็นหลัก "วิธีที่ 1:" ของคุณ

define('WP_USE_THEMES', true);

/** Loads the WordPress Environment and Template */
require ('./wp-blog-header.php');

ไฟล์ส่วนหัวของบล็อก (ที่เข้าคิวส่วนที่เหลือของ WordPress) โหลดwp-load.phpโดยตรงและยิงขึ้น WordPress เอง นี่คือที่สุดของwp-blog-header.php:

if ( !isset($wp_did_header) ) {

    $wp_did_header = true;

    require_once( dirname(__FILE__) . '/wp-load.php' );

    wp();

    require_once( ABSPATH . WPINC . '/template-loader.php' );

}

ดังนั้นความแตกต่างระหว่างสองวิธีของคุณคือ ... สิ่งที่โหลด

วิธีที่ 1 เป็นสิ่งที่ WordPress ทำเพื่อโหลดตัวเอง (ยกเว้นการปิดธีม) ดังนั้นหากคุณต้องการWordPress ทั้งหมดและต้องการเริ่มการทำงานของ hooks / actions ทั้งหมดให้ไปกับเส้นทางนั้น

วิธีที่ 2 เป็นเพียงขั้นตอนต่อไปของบรรทัด มันโหลด WordPress ทั้งหมด แต่ไม่เรียกwp()หรือเรียกใช้ตัวโหลดเทมเพลต (ใช้โดยธีม) วิธีที่ 2 จะมีน้ำหนักเบากว่าเล็กน้อย แต่ควรให้ฟังก์ชันการทำงานเดียวกันกับคุณ


3
มีไดอะแกรมหรือบางอย่างที่แมปไฟล์เหล่านี้หมดหรือไม่ ฉันเห็นนานมาแล้ว แต่หาไม่เจอ
ninja08

17

วิธีที่ 2 จากคำถามของคุณ:

<?php 
define( 'WP_USE_THEMES', false ); // Don't load theme support functionality
require( './wp-load.php' );

wp-load.phpคือการเข้าถึงฟังก์ชั่นทั้งหมดของ WordPress นั่นคือทั้งหมด บรรทัดแรกบอกให้ WordPress โหลดไม่ใช่ไฟล์ธีม อาจเป็นไฟล์ที่จำเป็นสำหรับความต้องการของคุณแล้วลบบรรทัด


1
บรรทัดแรกนั้นหมายความว่าอะไร
Sagive SEO

8
บรรทัดแรกบอกให้ WordPress ไม่โหลดฟังก์ชั่นการสนับสนุนธีมทั้งหมด โดยทั่วไปให้โหลดไฟล์น้อยลง
EAMann

บรรทัดแรกจำเป็นสำหรับวิธีแรกเท่านั้นหรือไม่
mcont

4

wp-blog-header.php จะแนบสถานะส่วนหัวโดยจะส่งคืนรหัสสถานะ http 404

wp-load.php จะไม่

มีประโยชน์ที่ควรทราบเมื่อใช้ ajax เนื่องจากตรวจสอบรหัสสถานะ http


2

บางครั้งการโหลด function.php ของชุดรูปแบบอาจทำให้คุณมีปัญหา มันทำลาย HTML ของหน้าอื่น ๆ ของฉัน นั่นคือสิ่งที่ฉันทำและแก้ไขปัญหาของฉัน:

define('STYLESHEETPATH', '');
define('TEMPLATEPATH', '');
require_once(RAIZ_WORDPRESS."/wp-load.php");

0

@ ninja08

เราสามารถใช้ส่วนขยาย xDebug php เพื่อวิเคราะห์สคริปต์

เพียงเปิดใช้งาน;xdebug.profiler_enable = 1ในphp.iniไฟล์ของคุณโดยลบออก;จากบรรทัดแรกและหลังจากรีสตาร์ทเซิร์ฟเวอร์ apache และเรียกใช้ไซต์ wordpress ของคุณ ... ตอนนี้ไฟล์ที่สร้างในไดเรกทอรี tmp ของเซิร์ฟเวอร์ xampp ของคุณ .. เปิดไฟล์นี้ด้วยแอปพลิเคชันWincachGrind

ตอนนี้คุณสามารถดูแผนที่ของสคริปต์ของคุณได้แล้ว

WincacheGrind Simple Wordpress วิเคราะห์


คุณควรเพิ่มสิ่งนี้ลงในความคิดเห็นด้านล่าง ninja08 นี่เป็นคำตอบที่ไม่ถูกต้อง
alhoseany

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