Как ссылаться на изображения в моем плагине, независимо от имени папки плагина

Каков правильный метод обращения к изображениям внутри вашего кода плагина, чтобы независимо от того, какая папка названа, они правильно разрешены?

У меня была проблема, когда пользователь дважды загружал мой плагин, а затем использовал второй загруженный файл для его установки. Поскольку Windows автоматически назвала дубликаты файлов foldername (2) .zip, когда мой плагин был загружен на сайт, он был помещен в папку с именем «имя_папки (2)). Так как мои изображения были связаны с wp-content / plugins / foldername / img / foo.png, ни одно из изображений не появилось.

Я не уверен в этом конкретном примере, но в общем случае plugins_url() подходит для этого.

Пример из Codex:

 plugins_url('/images/wordpress.png', __FILE__); 

Как уже было сказано, используйте plugins_url($path, $plugin_file) .

Вы всегда должны избегать путей жесткого кодирования, насколько это возможно, поскольку пользователи могут не только переименовывать папку плагина, но и перемещать всю директорию wp-content !

Вот несколько функций и констант, которые я всегда использую;

  • WP_CONTENT_DIR
    Абсолютный путь к wp-content

  • WP_PLUGIN_DIR
    Абсолютный путь к wp-content/plugins

  • wp_upload_dir($time)
    Получите пути файловой системы и URL-адресов к каталогу загрузки, необязательно в течение определенного времени (при использовании папок year / month)

  • site_url($path)
    Абсолютный URL-адрес для установки WordPress

  • home_url($path)
    Абсолютный URL-адрес дома WordPress (первая страница как таковая)

  • plugins_url($path, $file)
    Использует plugin_basename($file) чтобы получить абсолютный URL-адрес каталога, в котором в настоящее время находится $file , и добавляет $path

  • plugin_basename($file)
    Получить относительный путь из папки плагинов в $file

Это должно сработать для вас.

http://codex.wordpress.org/Function_Reference/plugin_basename

Из примера:

Если ваш файл плагина находится по адресу /home/www/wp-content/plugins/myplugin/myplugin.php, и вы вызываете:

 $x = plugin_basename(__FILE__); 

$ x будет равно «myplugin / myplugin.php».

Если вы хотите узнать полный URL-адрес в каталоге вашего плагина, вы можете позвонить:

 $x = WP_PLUGIN_URL.'/'.str_replace(basename( __FILE__),"",plugin_basename(__FILE__)); 

$ x будет равно "http: // [url-path-to-plugins] / [myplugin] /"

Я думаю, что использование plugin_dir_url эффективно решает эту проблему:

 $url = plugin_dir_url(__FILE__); $imageurl = $url.'images/wordpress.png'l