Bao gồm các tệp trong tệp chức năng chủ đề con


8

Thông thường trong tệp chức năng chủ đề của tôi, tôi sẽ yêu cầu các tệp khác để giữ mọi thứ gọn gàng.

require_once("foo.php");

Bây giờ làm việc trong một chủ đề trẻ em tôi muốn làm điều đó. Tôi đang thêm tùy chọn quản trị viên tùy chỉnh và dường như không thể bao gồm mã. Tôi đã lặp lại đường dẫn để đảm bảo rằng tôi đang gọi đúng tệp và nó đang gọi đúng vị trí nhưng dường như không có gì trong tệp đó chạy. Mã này chạy tốt nếu được đặt bên trong tệp chức năng chủ đề con.


Bạn có thể vui lòng gửi thêm một số mã của bạn để hiển thị những gì bạn đang làm, chính xác?
MikeSchinkel

Câu trả lời:


13

Các chủ đề con tham chiếu các chủ đề gốc theo tên thư mục và trong một cài đặt bình thường, tất cả các chủ đề của bạn đều tồn tại wp-content/themes/, vì vậy tôi nói rằng thật tốt khi tham chiếu các chủ đề đó theo đường dẫn tương đối của chúng:

include '../parent-theme/some-file.php';

Nếu điều đó làm bạn khó chịu, tôi quan sát các hằng số sau trong WordPress 3.0.1 với chủ đề con hai mươi được gọi là tt-child :

TEMPLATEPATH     /home/adam/public_html/wp3/wp-content/themes/twentyten
STYLESHEETPATH   /home/adam/public_html/wp3/wp-content/themes/tt-child

Vì vậy, bạn có thể làm như sau trong chủ đề con của bạn để tham chiếu thư mục chủ đề gốc:

include TEMPLATEPATH . '/some-file.php';

STYLESHEETPATH ​​không đổi là những gì tôi đang tìm kiếm. Bao gồm công việc trong một chủ đề con nếu bạn sử dụng đó.
curtismchale

Tôi thực sự ngạc nhiên khi bạn thậm chí có thể cân nhắc sử dụng một con đường được mã hóa cứng ... một chủ đề không được phép chỉ hoạt động trong một môi trường. Tôi có thể hiểu nếu get_template_directory () không tồn tại ... nhưng nó tồn tại. Tôi mới nhận ra rằng đó là một câu hỏi từ năm 2010 lol
Christian

Tùy chọn hàng đầu không làm việc cho tôi. Tôi không chắc tại sao khi tôi chắc chắn có đường dẫn tương đối chính xác đến tệp cha. Tùy chọn thứ hai đã làm việc cho tôi vì vậy cảm ơn bạn.
bátera

12

Trong một chủ đề trẻ em, cách thích hợp là

require_once( get_stylesheet_directory() . '/foo.php');

Trong khi ở chủ đề chính, bạn vẫn có thể sử dụng

require_once ( get_template_directory() . '/foo.php' );

get_template_directory()vẫn hoạt động trong chủ đề con, đáng buồn là nhắm mục tiêu thư mục chủ đề phụ. Trong trường hợp của bạn, nó hữu ích


1
Tôi đã phải sử dụng một '/' ví dụ: request_once (get_stylesheet_directory (). '/Foo.php');
ssaltman

cảm ơn @ssaltman. Bạn nói đúng, tài liệu xác nhận nó: developer.wordpress.org/reference/fifts/iêng Tôi đã chỉnh sửa câu trả lời của tôi
Christian

2

Xin chào @curtismchale :

Không biết đây có phải là nó hay không, nhưng bạn cần bao gồm các trích dẫn xung quanh foo.php, như vậy:

require_once('foo.php');

Điều đó có giải quyết được vấn đề của bạn không?


Hà lưu ý tốt. Tôi đã bỏ lỡ nó ở đây nhưng tôi đã có nó trong chủ đề trẻ em.
curtismchale

2

Sử dụng <?php get_template_part( 'name-the-page-here' ); ?>. Nếu không có phần mở rộng .php


2

Bạn chắc chắn không muốn mã cứng URL. Cách làm đúng đắn là

require_once( get_stylesheet_directory(). '/my_included_file.php' );

Xem thêm thông tin tại Wordpress Codex

Bây giờ, nếu ví dụ sửa đổi tiêu đề.php của bạn có bao gồm bạn sẽ tham chiếu nó như sau:

require_once( get_stylesheet_directory() . '/../parenthteme/my_included_file.php' );

0

Nó là hoàn toàn có thể và bình thường để làm bao gồm trong functions.php.

Tôi làm như thế này trong chủ đề con của tôi ( phplà thư mục con cho mã):

include 'php/core.php';

Nếu bạn gặp sự cố mà không có lý do rõ ràng, hãy thử bật chế độ gỡ lỗi trong wp-config.php:

define('WP_DEBUG', true);

Có thể có lỗi liên quan xảy ra, nhưng không được hiển thị.


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.