Документация WordPress для определения плагинов и каталогов контента гласит:
WordPress использует следующие константы при определении пути к каталогам содержимого и плагинов. Они не должны использоваться непосредственно плагинами или темами , но перечислены здесь для полноты.
Далее следует перечислить WP_CONTENT_DIR
и WP_PLUGIN_DIR
среди констант, которые разработчики тем и плагинов не должны использовать, предположительно из-за этого:
WordPress позволяет пользователям размещать свои каталоги wp-контента в любом месте, поэтому они никогда не должны предполагать, что плагины будут в wp-content / plugins, или что загрузки будут в 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-content, которые я могу найти, что делает проблематичным обращение к потенциально блуждающим темам и корневым каталогам плагинов.
WP_PLUGIN_DIR
, следовательно, мой вопрос здесь.Ответы:
Ссылочный файл в текущем пути или более глубокий вложенный
Для ссылки на текущий путь
который работает в плагинах и темах .
Ссылка URl / URi в плагине
Чтобы указать плагин или файл темы, используйте
который работает только в плагинах
Ссылка 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 папки плагинов?
Просто используйте
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 для получения дополнительной информации.
Эта статья идет в абсолютных глубинах обо всех путях.
источник
plugins_url()
возвращает URL-адрес папки плагинов, а не полный путь к каталогу на сервере. Существуют ли похожие функции для работы с каталогами, о которых я не знаю? Или совет не использоватьWP_PLUGIN_DIR
константу просто неправильно?WP_PLUGIN_DIR
.Это возвращает путь к каталогу текущего каталога плагина:
Ссылка: https://codex.wordpress.org/Function_Reference/plugin_dir_path
Не путать с:
(Обратите внимание на множественное число «плагин s » на этом.)
Поскольку вы не хотите, чтобы имя каталога плагинов возвращалось, мы должны удалить его. Вот функция, которая возвращает каталог плагина и имя файла:
Но, конечно же, нам также не нужно имя файла плагина, поэтому нам нужно удалить его
plugin_basename(__FILE__)
сначала. Чтобы вернуть имя файла плагина:Таким образом, чтобы использовать их для создания пути к каталогу плагинов , мы можем использовать
str_replace()
функцию примерно так:И если необходимо, эту последнюю строку, конечно, можно присвоить переменной для повторного использования.
Вместо того:
Используйте что-то вроде:
И позже, когда это необходимо:
источник