Расширенные настраиваемые поля: dirname (__FILE__) возвращает неправильный URL на общем сервере для CSS, а JS включает

Я добавляю Advanced Custom Fields Pro (v5) в простой плагин, который я создаю.

Я использую учебник на сайте ACF: Распространение ACF в плагине / теме. Учебник призывает к использованию get_stylesheet_directory(), но это для темы. Я заменил это на dirname(__FILE__),

На шаге 3 include_once отлично работает с dirname(__FILE__), Шаги 1 и 2 также работают для включения файлов, но я сталкиваюсь с проблемой, когда файлы Javascript и CSS включены ACF. Он возвращает URL, как показано ниже:

http://example.com/templates/wp-starter/nfs/c05/h03/mnt/70376/domains/example.com/html/templates/wp-starter/wp-content/plugins/simple/acf/css/global.css?ver=5.0.0

Вот что я хотел бы получить:

http://example.com/templates/wp-starter/wp-content/plugins/simple/acf/css/global.css?ver=5.0.0.

Я использую сетевой сервер Media Temple (виртуальный хостинг).

Вот соответствующий код из plugins/simple/simple.php:

// 1. Customize ACF path
add_filter('acf/settings/path', 'my_acf_settings_path');

function my_acf_settings_path( $path ) {
// update path
$path = dirname( __FILE__ ) . '/acf/';

// return
return $path;
}

// 2. Customize ACF dir
add_filter('acf/settings/dir', 'my_acf_settings_dir');

function my_acf_settings_dir( $dir ) {
// update path
$dir = dirname( __FILE__ ) . '/acf/';

// return
return $dir;
}

// 3. Include ACF
include_once( dirname( __FILE__ ) . '/acf/acf.php' );

Как я могу получить правильный URL для скриптов и таблиц стилей?

Я попытался использовать следующее в config.php, но это тоже не сработало:

define('WP_CONTENT_DIR', 'http://example.com/templates/wp-starter/wp-content');
define('WP_PLUGIN_DIR', 'http://example.com/templates/wp-starter/wp-content/plugins');

Я мог бы enqueue эти сценарии и таблицы стилей отдельно, но было бы неплохо, если бы мне не пришлось это делать.

1

Решение

Я решил проблему с помощью $dir = plugins_url() . '/simple/acf/'; в шаге 2. я оставил все остальное таким же.

// 2. Customize ACF dir
add_filter('acf/settings/dir', 'my_acf_settings_dir');

function my_acf_settings_dir( $dir ) {
// update path
$dir = plugins_url() . '/simple/acf/';

// return
return $dir;
}
1

Другие решения

Принятый ответ не сработал для каталогов с символическими ссылками (например, для тех, которые развертываются через capistrano), для которых этот ответ был тщательно сформулирован (вот почему он продолжает появляться при поиске в Google).

Исправление, которое будет работать для символических ссылок, можно найти Вот.

Я просто хотел опубликовать рабочее решение, основанное на @elliotcondon
ранее предложение № 124 (комментарий)

Поместите это в ваш файл functions.php темы.

add_action('init', "initHook", 0);  // We use the 0 to bypass priority

function initHook() {
if(function_exists('acf')) {
acf()->settings["dir"] = WP_CONTENT_URL."/plugins/advanced-custom-fields/";
}     }
0