Đường dẫn tốt nhất để xác định đường dẫn và chủ đề và plugin


8

Tôi đang ở trong một mớ hỗn độn. Tôi biết đây là một câu hỏi ngớ ngẩn. Bạn thấy đường dẫn chủ đề không tốt lắm. Vậy còn cách nào khác không? Làm thế nào tôi có thể sử dụng get_template_directory()ở đây?

    // theme folder path
    if ( ! defined( 'TZSC_THEME_DIR' ) ) {
        define( 'TZSC_THEME_DIR', dirname(__FILE__).'/' );
    }

    // theme folder URL
    if ( ! defined( 'TZSC_THEME_URL' ) ) {
        define( 'TZSC_THEME_URL', plugin_dir_url( __FILE__ ) );
    }

1
Tại sao bạn cần hằng số? Họ tạo ra một sự phụ thuộc bổ sung vào trạng thái toàn cầu trong mã của bạn. Thật tồi tệ.
fuxia

Vì vậy, bạn khuyên tôi không nên sử dụng những thứ này? Cảm ơn bạn. Nó có ảnh hưởng đến thời gian tải trang của tôi không?
ashraf

2
Từ PHP 5.4 trở đi, các hằng số được đặt ở cuối ngăn xếp, vì vậy chúng sẽ được đọc nhanh hơn. Nhưng vấn đề thực sự ở đây là chất lượng mã: mỗi khi một hàm hoặc lớp sử dụng hằng số đó, chúng là một người biết quá nhiều, họ đưa ra một giả định về trạng thái bên ngoài mã của chính họ. Thật tệ. Nó phá vỡ đóng gói và làm cho mã khó đọc. Sự phụ thuộc của WordPress vào trạng thái toàn cầu là đủ tệ. Đừng làm cho nó tồi tệ hơn trong mã của bạn.
fuxia

Câu trả lời:


13

Không sử dụng hằng số cho điều đó. Không sử dụng hằng số toàn cầu.

Có hai loại hằng số: hằng số lớp / giao diện và hằng số toàn cầu.

Các hằng số trong các lớp hoặc giao diện là tốt và đôi khi hữu ích. Một ví dụ quá đơn giản:

interface Requirements
{
    const MIN_PHP_VERSION = 5.4;

    public function php_is_good();
}

class Theme_Requirements implements Requirements
{
    public function php_is_good()
    {
        return version_compare( PHP_VERSION, self::MIN_PHP_VERSION, '>=' );
    }
}

Nhưng hãy nhớ, các hằng số này luôn được công khai. Nếu bạn thay đổi chúng sau này, bạn có thể phá vỡ mã phụ thuộc vào chúng.

Điều này là tồi tệ hơn với hằng số toàn cầu. Hãy tưởng tượng như sau:

define( 'THEME_URI', get_template_directory_uri() );

Và sau đó là một chức năng cho một hình ảnh tiêu đề mặc định:

function get_default_header_image()
{
    return THEME_URI . '/img/default-header.jpg';
}

Hàm này đưa ra một giả định về một cái gì đó nằm ngoài tầm kiểm soát của nó, nó biết quá nhiều. Làm thế nào để bạn kiểm tra hàm đó với các giá trị khác nhau cho hằng số? Bạn không thể.

Giả sử bạn muốn kiểm tra điều gì xảy ra khi hằng số được đặt thành thư mục không tồn tại hoặc máy chủ khác chậm hơn. Nhưng một khi bạn đã xác định hằng số, bạn không thể thay đổi giá trị của nó. Bạn không thể chạy tất cả các bài kiểm tra trong một lần vội vàng, điều này làm cho việc kiểm tra khó hơn mức cần thiết.

Và trong một chủ đề con cố gắng sử dụng hình ảnh mặc định của riêng nó - làm thế nào để bạn thực hiện điều đó? Hằng số được đặt theo chủ đề gốc. Bạn có thể thêm một kiểm tra với defined(), nhưng điều đó làm cho việc xem giá trị của nó thực sự được viết ở đâu khó hơn.

Sẽ tốt hơn nhiều nếu viết lại hàm thành:

function get_default_header_image( $base )
{
    return esc_url( $base ) '/img/default-header.jpg';
}

Tôi đã nói trước đó, hằng số là một API. API nên dễ thay đổi, nhưng thực sự rất khó để loại bỏ hằng số, vì PHP không đăng nhập quyền truy cập. Vì vậy, thông điệp phản đối của bạn sẽ không bao giờ đến tay các nhà phát triển khác, ngoại trừ khi họ đọc mã nguồn của bạn hoặc tài liệu của bạn rất cẩn thận. Tin tôi đi, họ không làm thế.

Sử dụng get_stylesheet_directory_uri()trong các chủ đề con và get_template_directory_uri()trong các chủ đề phụ huynh. Cả hai có thể được lọc trong thời gian chạy, vì vậy bạn có thể chạy tất cả thử nghiệm của mình cùng một lúc.

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.