Я добавляю 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
эти сценарии и таблицы стилей отдельно, но было бы неплохо, если бы мне не пришлось это делать.
Я решил проблему с помощью $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;
}
Принятый ответ не сработал для каталогов с символическими ссылками (например, для тех, которые развертываются через 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/";
} }