Мой плагин использует следующий код для ссылки на файл, но я прочитал WP_PLUGIN_DIR
, не будет работать, если пользователь переименует папку плагина по умолчанию. Я также хотел бы заменить /location-specific-menu-items/
ссылку на текущую папку плагина.
$gi = geoip_open(WP_PLUGIN_DIR ."/location-specific-menu-items/GeoIP.dat", GEOIP_STANDARD);
Как я могу переписать это, чтобы оно работало независимо от имен каталога плагинов WP и конкретной папки плагинов?
РЕДАКТИРОВАТЬ:
Вот мое окончательное рабочее решение после каждого. Большое спасибо!
$GeoIPv4_file = plugin_dir_path( __FILE__ ) . 'data/GeoIPv4.dat';
$GeoIPv6_file = plugin_dir_path( __FILE__ ) . 'data/GeoIPv6.dat';
if (!filter_var($ip_address, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) === FALSE) {
if ( is_readable ( $GeoIPv4_file ) ) {
$gi = geoip_open( $GeoIPv4_file, GEOIP_STANDARD );
$user_country = geoip_country_code_by_addr($gi, $ip_address);
geoip_close($gi);
}
} elseif (!filter_var($ip_address, FILTER_VALIDATE_IP,FILTER_FLAG_IPV6) === FALSE) {
if ( is_readable ( $GeoIPv6_file ) ) {
$gi = geoip_open( $GeoIPv6_file, GEOIP_STANDARD );
$user_country = geoip_country_code_by_addr($gi, $ip_address);
geoip_close($gi);
}
} else {
$user_country = "Can't locate IP: " . $ip_address;
}
Ответы:
Если структура плагина:
тогда для PHP 5.3.0+, вы можете попробовать магическую константу
__DIR__
в
some-plugin.php
файле:Для более широкой поддержки PHP вы можете использовать
dirname( __FILE__ )
, где__FILE__
был добавлен в PHP 4.0.2.источник
plugin_dir_path( __FILE__ )
, то это обертка,trailingslashit( dirname( __FILE__ ) )
которая добавляет косую черту к dirname.$file = plugin_dir_path( __FILE__ ) . 'data/GeoIP.dat';
будет ли работать хорошо?Ты можешь использовать:
Который в любом случае является просто функцией-оберткой для:
источник
Вы также можете взглянуть на функции, которые есть в WordPress: например
plugin_dir_path()
,plugins_url()
илиplugin_dir_url()
Они помогут вам определить, где находится ваш плагин на сервере. Эти функции также рекомендованы Кодексом при написании плагина: имена, файлы и расположение.
Кроме того, очевидно, что вы можете использовать магические константы из PHP и фильтровать их выходные данные, чтобы определить, где находятся ваши файлы.
источник
plugin_dir_url()
, он возвращает папку для файла, который вы передали, да. Это то, что ему нужно.plugin_dir_path
возвращает каталог,plugin_dir_url
выдаст вам URL к файлу, который просто не то же самое и НЕ то, что ему нужно. это полезно для других вещей - таких как источники изображений или добавление таблиц стилей в очередь.