plugin_basename()WP 1.5.0

Получает относительный путь до главного файла плагина (от каталога плагинов или MU плагинов) по переданному пути на файл.

Отрезает путь до папки плагинов из указанного пути до папки/файла плагина. Оставляет путь от папки плагина до указанного файла плагина включительно.

Путь получается без начального слэша: my-plugin/my-plugin.php.

Плагин из одного PHP файла

Для плагина, состоящего из одного PHP файла и лежит непосредственно в папке:

  • plugins, например: wp-content/plugins/plugin.php
  • mu-plugins, например: wp-content/mu-plugins/plugin.php

То plugin_basename( __FILE__ ) вернет plugin.php.

Использует константы: WP_PLUGIN_DIR и WPMU_PLUGIN_DIR. Использовать эти константы напрямую не рекомендуется.

1 раз — 0.0000212 сек (очень быстро) | 50000 раз — 0.17 сек (очень быстро) | PHP 7.4.33, WP 6.2.2

Хуков нет.

Возвращает

Строку. Путь от папки плагина до файла плагина без слэшей на концах.

Использование

plugin_basename( $file );
$file(строка) (обязательный)
Абсолютный путь до файла или папки плагина.

Примеры

0

#1 Предположим что файл плагина находится по такому пути:

/home/www/wp-content/plugins/my-plugin/my-plugin.php
тогда вызвав plugin_basename мы получим следующее:

$x = plugin_basename(__FILE__); // my-plugin/my-plugin.php
0

#2 Что если указать произвольные параметры

Обыно в параметр $file указывается путь к файлу плагина, а что если указать строки несвязанные с плагином:

echo plugin_basename( 'foobar' );      // foobar
echo plugin_basename( 'foo/bar' );     // foo/bar
echo plugin_basename( 'dir/foo.bar' ); // dir/foo.bar
echo plugin_basename( '' );            // ''

В эту функцию так например передается $_GET['page'] при определении $plugin_page в файле wp-admin/admin.php.

Заметки

  • Global. Массив. $wp_plugin_paths

Список изменений

С версии 1.5.0 Введена.

Код plugin_basename() WP 6.8.3

function plugin_basename( $file ) {
	global $wp_plugin_paths;

	// $wp_plugin_paths contains normalized paths.
	$file = wp_normalize_path( $file );

	arsort( $wp_plugin_paths );

	foreach ( $wp_plugin_paths as $dir => $realdir ) {
		if ( str_starts_with( $file, $realdir ) ) {
			$file = $dir . substr( $file, strlen( $realdir ) );
		}
	}

	$plugin_dir    = wp_normalize_path( WP_PLUGIN_DIR );
	$mu_plugin_dir = wp_normalize_path( WPMU_PLUGIN_DIR );

	// Get relative path from plugins directory.
	$file = preg_replace( '#^' . preg_quote( $plugin_dir, '#' ) . '/|^' . preg_quote( $mu_plugin_dir, '#' ) . '/#', '', $file );
	$file = trim( $file, '/' );
	return $file;
}