Що я повинен використовувати замість WP_CONTENT_DIR та WP_PLUGIN_DIR?


15

Документація WordPress для визначення каталогів плагінів і вмісту зазначає, що:

WordPress використовує наступні константи при визначенні шляху до вмісту та каталогів плагінів. Вони не повинні використовуватися безпосередньо плагінами чи темами , але перераховані тут для повноти.

Він продовжує перераховувати WP_CONTENT_DIRта WP_PLUGIN_DIRсеред констант розробники теми та плагінів не повинні використовувати, мабуть, через це:

WordPress дозволяє користувачам розміщувати свій каталог wp-вмісту куди завгодно, тому ви ніколи не повинні припускати, що плагіни будуть у wp-контенті / плагінах, або що завантаження будуть у wp-content / uploads, або що теми будуть у wp- зміст / теми.

Марк Джакіт також коментує, що ці константи не слід використовувати:

Не використовуйте WP_PLUGIN_URL або WP_PLUGIN_DIR - плагінів може не бути в каталозі плагінів.

Отже, який прийнятий спосіб посилання на повний шлях до папок плагінів, wp-вмісту та тем без використання цих констант?

Як простий приклад, щоб вивести повний шлях усіх встановлених плагінів, я можу це зробити:

<?php
$plugins = get_plugins();

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

Що створює такий список:

/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

(Я, можливо, захочу це зробити, якби я писав плагін, щоб дозволити користувачеві вибірково архівувати плагіни як частина резервної копії сайту.)

Якщо використання WP_PLUGIN_DIRнеправильно, що пропонується? Існує не еквівалент wp_upload_dir()для плагінів, тем і папки вмісту wp, який я можу знайти, що робить посилання на потенційно блукаючі теми та кореневі каталоги плагінів проблематичними.



2
@CharlesClarkson Я згадую цю сторінку в першому реченні мого питання. Він говорить, що не використовувати вищезазначені константи, але не пропонує альтернативи таким речам WP_PLUGIN_DIR, звідси тут моє запитання.
Нік

Відповіді:


17

Довідковий файл у поточному шляху чи глибше вкладений

Для посилання на поточний шлях

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

яка працює в плагінах і темах .

Посилання URl / URi у плагіні

Щоб вказати на плагін або файл теми, використовуйте

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

який працює лише в плагінах

Посилання URl / URi в wp-admin папці

Завжди вказуйте на них admin_url( 'some/path' );. існуєget_admin_url() також.

Посилання URl / Uri в wp-includesпапці

Вкажіть на них includes_url( 'some/path' );

URl / URi щодо будинку сайтів

Є home_url( 'etc' );чи get_home_url()для того. Схожий є get_site_url()і site_url(). Тоді і там є network_home_url(). І ти отримавnetwork_admin_url()

wp-content або перейменований каталог

Ви можете змінити назву wp-contentпапки. Тому ви використовуєте content_url()там.

Як отримати URL-адресу папки плагінів?

Якщо використання WP_PLUGIN_DIR неправильно, що пропонується?

Просто використовуйте plugins_url()без будь-яких параметрів.

Якщо ви використовуєте його для плагіна, він також працює для MU плагінів.

РЕДАКТИКА №1 Якщо вас цікавить шлях до поточного плагіна, використовуйте plugin_basename();.

РЕДАКТИКА №2. Якщо вас цікавлять усі активні плагіни, використовуйте їх wp_get_active_network_plugins();.

Якщо ви не на багатосайтовому сайті, займіться wp_get_active_and_valid_plugins();. Це враховує багатосайтове / мережеве. Майте на увазі, що це врахує їх, якщо ви не перебуваєте на багатосайтовій платформі, але у вас є sunrise.phpкраплі.

Ви також можете отримати їх через get_option( 'active_plugins' );, що не рекомендується, оскільки воно не враховує фільтри та перевірку плагінів, що відбувається в декілька випадків.


Подальше читання

Цей список продовжується і продовжується. Подивіться результати пошуку на QueryPosts.com для отримання додаткової інформації.

Ця стаття іде в абсолютній глибині про всі шляхи.


3
Дякую за це, але ваша відповідь, здається, стосується URL-адрес, а не абсолютних шляхів до сервера, що мене цікавило. Наприклад, plugins_url()повертає URL-адресу в папку плагінів, а не повний шлях до каталогу на сервері. Чи існують подібні функції для обробки каталогів, про які я не знаю? Або порада не використовувати WP_PLUGIN_DIRконстант просто неправильна?
Нік

(Мені спеціально цікаво знайти повний шлях до встановлених плагінів, окрім плагіна, який містить власний код, на випадок, який це допомагає пояснити.)
Нік

@Nick Дивіться оновлення.
кайзер

Стаття, яка "іде в абсолютній глибині щодо всіх плагінів", вже недоступна. І я досі не можу зрозуміти, як отримати абсолютний шлях до каталогу плагінів без використання WP_PLUGIN_DIR.
XedinНевідомий

4
  1. Це повертає шлях до сервера каталогу поточного плагіна:

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

    Посилання: https://codex.wordpress.org/Function_Reference/plugin_dir_path

    Не плутати з:

    plugins_dir_path(__FILE__)

    (Зверніть увагу на множину "плагін s " на цьому.)

  2. Оскільки ви не хочете, щоб ім'я каталогів плагінів поверталося, ми повинні його викреслити. Ось функція, яка повертає каталог плагінів та ім'я файлу:

    plugin_basename(__FILE__)
    
    // example: exampleplugin/exampleplugin.php
  3. Але ми, звичайно, не хочемо імені файлу плагіна, тому нам потрібно буде викреслити його plugin_basename(__FILE__)спочатку. Щоб повернути ім'я файлу плагіна:

    basename(__FILE__)
    
    // example: exampleplugin.php
  4. Отже, щоб використовувати їх для побудови шляху до каталогу плагінів , ми можемо використовувати str_replace()функцію приблизно так:

    $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. І, якщо потрібно, цей заключний рядок, звичайно, може бути призначений змінній для повторного використання.

    Замість:

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

    Використовуйте щось на кшталт:

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

    І пізніше, коли потрібно:

    return $thePlgDir;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.