Tôi nên sử dụng cái gì thay vì WP_CONTENT_DIR và WP_PLUGIN_DIR?


15

Tài liệu WordPress để Xác định Plugin và Nội dung thư mục nói rằng:

WordPress sử dụng các hằng số sau khi xác định đường dẫn đến thư mục nội dung và plugin. Chúng không nên được sử dụng trực tiếp bởi các plugin hoặc chủ đề , nhưng được liệt kê ở đây để hoàn thiện.

Nó đi vào danh sách WP_CONTENT_DIRWP_PLUGIN_DIRtrong số các hằng số mà các nhà phát triển chủ đề và plugin không nên sử dụng, có lẽ vì điều này:

WordPress cho phép người dùng đặt thư mục wp-content của họ ở bất cứ đâu họ muốn, vì vậy bạn không bao giờ cho rằng các plugin sẽ ở trong wp-content / plugin, hoặc các video tải lên sẽ ở wp-content / tải lên, hoặc các chủ đề sẽ ở trong wp- nội dung / chủ đề.

Mark Jaquith cũng bình luận ở đây rằng những hằng số đó không nên được sử dụng:

Không sử dụng WP_PLUGIN_URL hoặc WP_PLUGIN_DIR - các plugin có thể không có trong thư mục plugin.

Vì vậy, cách được chấp nhận để tham chiếu đường dẫn đầy đủ đến các thư mục bổ trợ, nội dung wp và chủ đề mà không sử dụng các hằng số này là gì?

Ví dụ đơn giản, để xuất đường dẫn đầy đủ của tất cả các plugin đã cài đặt, tôi có thể làm điều này:

<?php
$plugins = get_plugins();

foreach ($plugins as $file => $details) {
    echo WP_PLUGIN_DIR . '/' . $file . '<br>';
}

Mà tạo ra một danh sách như vậy:

/var/www/wp-content/plugins/akismet/akismet.php
/var/www/wp-content/plugins/debug-bar/debug-bar.php
/var/www/wp-content/plugins/hello.php

(Tôi có thể muốn làm điều này nếu tôi đang viết một plugin để cho phép người dùng lưu trữ có chọn lọc các plugin như một phần của bản sao lưu trang web chẳng hạn.)

Nếu sử dụng WP_PLUGIN_DIRlà sai, đề xuất thay thế là gì? Không có tương đương wp_upload_dir()với các plugin, chủ đề và thư mục nội dung wp mà tôi có thể tìm thấy, điều này làm cho việc tham chiếu các chủ đề có khả năng lang thang và các thư mục gốc của plugin có vấn đề.



2
@CharlesClarkson Tôi tham khảo trang đó trong câu đầu tiên của câu hỏi của tôi. Nó nói không sử dụng các hằng số trên, nhưng không đề xuất một giải pháp thay thế cho những thứ như WP_PLUGIN_DIR, do đó câu hỏi của tôi ở đây.
Nick

Câu trả lời:


17

Tệp tham chiếu trong đường dẫn hiện tại hoặc lồng sâu hơn

Để tham khảo đường dẫn hiện tại

plugin_dir_path( __FILE__ )."further/nesting/here.css";

hoạt động trong Plugins và Themes .

Tham khảo URl / URi trong một plugin

Để trỏ đến một plugin hoặc tệp chủ đề, sử dụng

plugins_url( "path/to/file", __FILE__ );

chỉ hoạt động trong plugin

Tham khảo URl / URi trong wp-adminthư mục

Luôn luôn chỉ cho họ admin_url( 'some/path' );. Có get_admin_url()như vậy.

Tham khảo URl / Uri trong wp-includesthư mục

Chỉ cho họ includes_url( 'some/path' );

Một URl / URi liên quan đến các trang web nhà

home_url( 'etc' );hoặc get_home_url()cho điều đó. Tương tự là get_site_url()site_url(). Sau đó là tốt network_home_url(). Và bạn đã cónetwork_admin_url()

wp-content hoặc thư mục được đổi tên

Bạn có thể xác định lại wp-contenttên thư mục. Do đó bạn sử dụng content_url()ở đó.

Làm thế nào để có được url thư mục plugin?

Nếu sử dụng WP_PLUGIN_DIR là sai, giải pháp thay thế được đề xuất là gì?

Đơn giản chỉ cần sử dụng plugins_url()mà không có bất kỳ tham số.

Nếu bạn sử dụng nó cho một plugin, nó cũng hoạt động cho các plugin MU.

EDIT # 1 Nếu bạn quan tâm đến đường dẫn đến plugin hiện tại, hãy sử dụng plugin_basename();.

EDIT # 2 Nếu bạn quan tâm đến tất cả các plugin hoạt động bên, hãy sử dụng wp_get_active_network_plugins();.

Nếu bạn không ở trên nhiều trang, hãy đi với wp_get_active_and_valid_plugins();. Điều này sẽ đưa multisite / mạng vào tài khoản. Hãy nhớ rằng điều này sẽ đưa họ vào tài khoản nếu bạn không ở trên nhiều trang, nhưng có một sunrise.phpdropin.

Bạn cũng có thể truy xuất chúng thông qua get_option( 'active_plugins' );, điều này không được khuyến khích vì nó không đưa các bộ lọc và xác thực plugin vào tài khoản, điều này xảy ra trong một số trường hợp.


đọc thêm

Danh sách này đi và về. Hãy xem kết quả tìm kiếm trên QueryPosts.com để biết thêm thông tin.

Bài viết này đi sâu về tất cả các con đường.


3
Cảm ơn vì điều này, nhưng câu trả lời của bạn dường như xử lý các URL chứ không phải đường dẫn máy chủ tuyệt đối, đó là điều tôi quan tâm. Ví dụ: plugins_url()trả lại URL cho thư mục plugin, chứ không phải đường dẫn đầy đủ đến thư mục trên máy chủ. Có các chức năng tương tự để xử lý các thư mục mà tôi không biết? Hoặc là lời khuyên không sử dụng WP_PLUGIN_DIRhằng đơn giản là sai?
Nick

(Tôi đặc biệt quan tâm đến việc tìm đường dẫn đầy đủ đến các plugin đã cài đặt ngoài plugin có chứa mã riêng của tôi, trong trường hợp giúp giải thích.)
Nick

@Nick Xem cập nhật.
kaiser

Bài viết "đi sâu về tất cả các plugin" không còn có sẵn. Và tôi vẫn không thể hiểu làm thế nào để có được đường dẫn tuyệt đối đến thư mục plugin mà không cần sử dụng WP_PLUGIN_DIR.
XedinUn Unknown

4
  1. Điều này trả về đường dẫn máy chủ của thư mục của plugin hiện tại:

    plugin_dir_path(__FILE__)
    
    // example: /home/myserver/public_html/wordpress_install/wp-content/plugins/exampleplugin/

    Tham chiếu: https://codex.wordpress.org/Function_Reference/plugin_dir_path

    Đừng nhầm lẫn với:

    plugins_dir_path(__FILE__)

    (Lưu ý "plugin s " số nhiều về điều đó.)

  2. Vì bạn không muốn trả lại tên thư mục plugin, chúng tôi phải loại bỏ nó. Đây là một hàm trả về thư mục plugin và tên tệp:

    plugin_basename(__FILE__)
    
    // example: exampleplugin/exampleplugin.php
  3. Nhưng tất nhiên, chúng tôi cũng không muốn tên tệp của plugin, vì vậy chúng tôi sẽ cần loại bỏ tên đó plugin_basename(__FILE__)trước. Để trả về tên tệp của plugin:

    basename(__FILE__)
    
    // example: exampleplugin.php
  4. Vì vậy, để sử dụng chúng để xây dựng một đường dẫn đến thư mục plugin , chúng ta có thể sử dụng str_replace()hàm như thế này:

    $myBnm = basename(__FILE__); // value: exampleplugin.php
    $myDir = plugin_basename(__FILE__); // value: exampleplugin/exampleplugin.php
    $myStr = str_replace($myBnm,"",$myDir); // value: exampleplugin/
    $myPth = plugin_dir_path(__FILE__); // value: /home/myserver/public_html/wordpress_install/wp-content/plugins/exampleplugin/
    return str_replace($myStr,"",$myPth); // returns: /home/myserver/public_html/wordpress_install/wp-content/plugins/
  5. Và nếu cần, dòng cuối cùng đó tất nhiên có thể được gán cho một biến, để sử dụng lặp lại.

    Thay vì:

    return str_replace($myStr,"",$myPth); // returns: /home/myserver/public_html/wordpress_install/wp-content/plugins/

    Sử dụng một cái gì đó như:

    $thePlgDir = str_replace($myStr,"",$myPth); // returns: /home/myserver/public_html/wordpress_install/wp-content/plugins/

    Và sau này, khi cần:

    return $thePlgDir;
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.