Phần mẫu bên trong shortcode, kết quả bất ngờ
Tôi đang cố gắng gọi một phần mẫu thông qua mã ngắn. Tôi đã đọc tất cả về cách thực hiện điều này nhiều lần trên trang web này nhưng sau khi thử một số cách vẫn không thể gọi một chuỗi thời gian echo php đơn giản. Tên tệp là test-one.php. Đây là những gì tôi đã thử:
function test_2( $attr ) {
ob_start();
get_template_part( 'test', 'one' );
return ob_get_clean();
}
add_shortcode('test2', 'test_2');
function test_2( $attr ) {
ob_start();
get_template_part( 'test-one' );
return ob_get_clean();
}
add_shortcode('test2', 'test_2');
function test_2( $attr ) {
ob_start();
get_template_part( 'wp-content/themes/theme-name/template-parts/test-one' );
return ob_get_clean();
}
add_shortcode('test2', 'test_2');
Mã phần mẫu là
<?php
echo "Current as of <br> ".date("m-d-Y h:i:sa");
Có vẻ như nó sẽ hoạt động, không? Tôi làm sai ở đâu?
Trả lời
Các get_template_part()
chức năng không chịu bất kỳ tên thư mục, bạn phải cung cấp nó một cách rõ ràng. Nó cũng liên quan đến thư mục chủ đề đang hoạt động. Vì vậy, trong nhiều ví dụ của bạn, nó đang tìm kiếm mẫu trong thư mục gốc của chủ đề đang hoạt động của bạn. Định dạng đúng sẽ là:
get_template_part( 'template-parts/test-one' );
Nếu muốn, bạn có thể đổi tên thư mục thành inc
hoặc includes
- tùy ý. Bạn chỉ cần phản ánh sự thay đổi này trong lệnh gọi hàm.
Một lưu ý nhỏ, WordPress cho phép bạn truyền tham số thứ 2 và sẽ tìm kiếm các tệp được nối bằng dấu gạch ngang. Ví dụ, điều này cũng sẽ hoạt động:
get_template_part( 'template-parts/test', 'one' );
Lợi ích của việc này là nó cho phép bạn có nhiều "loại" của một bộ phận cụ thể. Bạn có thể có một content-post.php
tệp để xuất nội dung bài đăng của mình và một tệp để xuất nội dung content-page.php
trang của bạn. Sau đó, trong chủ đề của bạn, bạn có thể gọi mẫu của mình bằng:
get_template_part( 'template-parts/content', $post->post_type );
Chỉ cho phép nó năng động hơn một chút.
Một lưu ý phụ khác. Bất kỳ lúc nào bạn gặp khó khăn với các loại chức năng này, bạn luôn có thể sử dụng:
add_action( 'init', function() {
$template = locate_template( $template_string_here ); printf( '<pre>%s</pre>', print_r( $template, 1 ) );
die( 'end' );
} );
Điều này sẽ xuất ra đường dẫn mẫu mà WordPress đang cố gắng truy cập vào mẫu bằng.