Cách chính xác để sử dụng các chức năng WordPress bên ngoài các tệp WordPress là gì?


59

Tôi đã đọc khoảng 2 phương pháp để khởi tạo chức năng WordPress bên ngoài các tệp WordPress để chúng tôi có thể sử dụng các chức năng này trên bất kỳ trang hoặc trang web nào ngoài blog WordPress.

Cái nào trong 2 phương thức này là đúng? Các trường hợp sử dụng cho mỗi phương pháp là gì nếu cả hai đều đúng? Sự khác biệt giữa việc sử dụng phương pháp này hay phương pháp khác là gì?

Cách 1:

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

Cách 2:

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

Những chức năng WP nào bạn đang cố gắng sử dụng "bên ngoài WP" và tại sao? Một trong hai phương thức này vẫn sẽ tải môi trường WP (mặc dù không có hỗ trợ chủ đề), vì vậy bạn vẫn đang gọi các hàm bên trong WP.
EAMann

Tôi đang cố gắng để hiểu sự khác biệt giữa 2 phương pháp. Những gì tôi sẽ làm là tích hợp chủ đề wordpress với kịch bản hỗ trợ của tôi. vì vậy sẽ cần tiêu đề, chân trang và vòng lặp từ wordpress cộng với một số hỗ trợ cho các widget và các plugin khác
alhoseany

Tôi thực sự nghi ngờ đây là cách bạn muốn làm ... có những giải pháp tốt hơn là cố gắng tự khởi động WordPress.
EAMann

Tôi đang mở rộng cho các đề xuất, tôi đang tìm cách tốt nhất để làm mọi thứ? cách tốt nhất để tích hợp chủ đề wordpress với ứng dụng web bên ngoài là gì?
alhoseany

Câu trả lời:


58

Có rất ít sự khác biệt giữa các tập tin. Khi bạn xem một trang WordPress, tệp đầu tiên được gọi là index.php. Và về cơ bản, đó là "Phương pháp 1:" của bạn

define('WP_USE_THEMES', true);

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

Tệp tiêu đề blog (xếp hàng phần còn lại của WordPress) tải wp-load.phptrực tiếp và tự kích hoạt WordPress. Đây là hầu hết 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' );

}

Vì vậy, sự khác biệt giữa hai phương thức của bạn là ... những gì được tải.

Phương pháp 1 chính xác là những gì WordPress làm để tự tải (ngoại trừ tắt chủ đề). Vì vậy, nếu bạn cần tất cả WordPress và muốn kích hoạt tất cả các hook / hành động mặc định, hãy đi theo tuyến đường đó.

Phương pháp 2 chỉ là một bước nữa xuống dòng. Nó tải tất cả WordPress, nhưng không gọi wp()hoặc gọi trình tải mẫu (được sử dụng bởi các chủ đề). Phương pháp 2 sẽ nhẹ hơn một chút, nhưng sẽ cung cấp cho bạn chức năng tương tự.


3
Có một sơ đồ hoặc một cái gì đó ánh xạ tất cả các tập tin ra? Tôi đã nhìn thấy một từ lâu nhưng tôi không thể tìm thấy nó.
ninja08

17

Phương pháp 2 từ câu hỏi của bạn:

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

wp-load.phplà quyền truy cập vào tất cả các chức năng của WordPress, đó là tất cả. Dòng đầu tiên yêu cầu WordPress tải không phải các tệp Theme; có thể các tập tin là cần thiết cho yêu cầu của bạn, sau đó loại bỏ dòng.


1
dòng đầu tiên đó có nghĩa là gì?
SEO Sagive

8
Dòng đầu tiên yêu cầu WordPress không tải tất cả các chức năng hỗ trợ chủ đề của nó. Về cơ bản, tải ít tập tin hơn.
EAMann

Là dòng đầu tiên chỉ cần cho phương pháp đầu tiên?
mcont

4

wp-blog-header.php sẽ đính kèm một trạng thái tiêu đề, nó sẽ trả về mã trạng thái http là 404

wp-load.php sẽ không

Hữu ích cần lưu ý khi sử dụng ajax vì nó kiểm tra mã trạng thái http


2

Đôi khi tải các hàm.php của chủ đề có thể gây ra cho bạn một số rắc rối. Nó đã phá vỡ html của trang khác của tôi. Vì vậy, đó là những gì tôi đã làm và giải quyết vấn đề của mình:

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

0

@ ninja08

Chúng ta có thể sử dụng phần mở rộng php xDebug để phân tích một tập lệnh.

chỉ cần kích hoạt ;xdebug.profiler_enable = 1trong php.initệp của bạn bằng cách xóa ;khỏi dòng đầu tiên và sau khi khởi động lại máy chủ apache này và chạy trang web wordpress của bạn ... bây giờ một tệp được tạo trong thư mục tmp của máy chủ xampp của bạn .. mở tệp này bằng ứng dụng WincachGrind .

bây giờ bạn có thể thấy một bản đồ của kịch bản của bạn

WincacheGrind Phân tích Wordpress đơn giản


Bạn nên thêm điều này trong bình luận bên dưới ninja08. đây là một câu trả lời không chính xác
alhoseany

2
@alhoseany vâng..tôi bây giờ ... nhưng tôi không có đủ danh tiếng ... và sau đó tôi quyết định làm điều này.
Mostafa
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.