Câu trả lời muộn
Cách bao gồm các tệp của bạn đúng cách:
function wpse1403_bootstrap()
{
// Here we load from our includes directory
// This considers parent and child themes as well
locate_template( array( 'inc/foo.class.php' ), true, true );
}
add_action( 'after_setup_theme', 'wpse1403_bootstrap' );
Các plugin cũng vậy.
Làm thế nào để đi đúng đường hoặc URi
Ngoài ra hãy xem các chức năng API hệ thống tệp như:
home_url()
plugin_dir_url()
plugin_dir_path()
admin_url()
get_template_directory()
get_template_directory_uri()
get_stylesheet_directory()
get_stylesheet_directory_uri()
- Vân vân.
Làm thế nào để giảm số lượng include/require
Nếu bạn cần tìm nạp tất cả các tệp từ một thư mục, hãy đi với
foreach ( glob( 'path/to/folder/*.php' ) as $file )
include $file;
Hãy nhớ rằng điều này bỏ qua các lỗi (có thể tốt cho sử dụng sản xuất) / không thể tải các tệp.
Để thay đổi hành vi này, bạn có thể muốn sử dụng một cấu hình khác trong quá trình phát triển:
$files = ( defined( 'WP_DEBUG' ) AND WP_DEBUG )
? glob( 'path/to/folder/*.php', GLOB_ERR )
: glob( 'path/to/folder/*.php' )
foreach ( $files as $file )
include $file;
Chỉnh sửa: Cách tiếp cận OOP / SPL
Khi tôi vừa trở lại và thấy rằng câu trả lời này ngày càng được nâng cao hơn, tôi nghĩ rằng tôi có thể cho thấy cách mà tôi đang làm ngày nay - trong một thế giới PHP 5.3+. Ví dụ sau đây tải tất cả các tệp từ thư mục con chủ đề có tên src/
. Đây là nơi tôi có các thư viện của mình xử lý một số tác vụ nhất định như menu, hình ảnh, v.v. Thậm chí bạn không cần phải quan tâm đến tên khi mỗi tệp được tải. Nếu bạn có các thư mục con khác trong thư mục này, chúng sẽ bị bỏ qua.
Các \FilesystemIterator
là PHP 5.3+ supercedor qua \DirectoryIterator
. Cả hai đều là một phần của SPL PHP. Trong khi PHP 5.2 cho phép tắt phần mở rộng SPL tích hợp (dưới 1% trong số tất cả các cài đặt đã làm điều đó), SPL bây giờ là một phần của lõi PHP.
<?php
namespace Theme;
$files = new \FilesystemIterator( __DIR__.'/src', \FilesystemIterator::SKIP_DOTS );
foreach ( $files as $file )
{
/** @noinspection PhpIncludeInspection */
! $files->isDir() and include $files->getRealPath();
}
Trước đây trong khi tôi vẫn hỗ trợ PHP 5.2.x, tôi đã sử dụng giải pháp sau: A \FilterIterator
trong src/Filters
thư mục để chỉ truy xuất tệp (và không chấm con trỏ của thư mục) và a \DirectoryIterator
để thực hiện lặp và tải.
namespace Theme;
use Theme\Filters\IncludesFilter;
$files = new IncludesFilter( new \DirectoryIterator( __DIR__.'/src' ) );
foreach ( $files as $file )
{
include_once $files->current()->getRealPath();
}
Các \FilterIterator
là dễ dàng như vậy:
<?php
namespace Theme\Filters;
class IncludesFilter extends \FilterIterator
{
public function accept()
{
return
! $this->current()->isDot()
and $this->current()->isFile()
and $this->current()->isReadable();
}
}
Ngoài việc PHP 5.2 đã chết / EOL cho đến bây giờ (và cả 5.3), có một thực tế là có thêm mã và một tệp nữa trong trò chơi, vì vậy không có lý do gì để đi sau và hỗ trợ PHP 5.2.x.
Tóm tắt
Một bài viết chuyên sâu hơn nữa có thể được tìm thấy ở đây trên WPKrauts .
EDIT Cách rõ ràng chính xác là sử dụng namespace
mã d, được chuẩn bị cho tự động tải PSR-4 bằng cách đặt mọi thứ vào thư mục thích hợp đã được xác định thông qua không gian tên. Sau đó, chỉ cần sử dụng Trình soạn thảo và a composer.json
để quản lý các phụ thuộc của bạn và để nó tự động xây dựng trình tải tự động PHP của bạn (nhập tự động một tệp chỉ bằng cách gọi use \<namespace>\ClassName
). Đó là tiêu chuẩn thực tế trong thế giới PHP, cách dễ nhất để đi và thậm chí còn được tự động hóa và đơn giản hóa hơn bởi WP Starter .