проблемы включая файл из сменного каталога

У меня есть processForm.php в каталоге темы, который делает то, что он говорит. Я пытаюсь включать файл (в котором я нуждаюсь для выполнения определенной функции в processform.php) из сменного каталога, и не могли сделать так. Как предложено в первом решении в этом потоке я попробовал:

include( plugin_dir_path( __FILE__ ) . 'test-plugin/needed_file.php'); 

Я был вполне уверен, это будет работать, но к сожалению это бросает предупреждение как так:

Warning: include(/home2/xxx/public_html/wp-content/themes/xxx/test-plugin/needed_file.php) [function.include]: failed to open stream: No such file or directory 

Как сказано ранее processForm.php находится в каталоге темы, и у меня нет проблем больше нигде, называя файлы в рамках шаблонного каталога. Если это может помочь, существует alos константа, определенная для пути этого конкретного плагина, который идет как это:

define('WPFP_PATH', plugins_url() . '/test-plugin'); 

Таким образом в соответствии с решением, предложенным здесь, я пытался использовать код ниже:

include(WPFP_PATH . '/needed_file.php');

К сожалению, это бросает три типа предупреждения:

Сначала предупреждение:

http:// wrapper is disabled in the server configuration by allow_url_include=0 

Второе предупреждение:

failed to open stream: no suitable wrapper could be found in....

Третье предупреждение:

Failed opening 'http://awesomeness.com/wp-content/plugins/test-plugin/needed_file.php' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php') in.....

Таким образом, концевая строка - То, как я включаю этот файл в свой processForm.php (который находится в корне каталога темы).

2
13.04.2017, 15:37
1 ответ

Функция plugin_dir_path имеет вводящее в заблуждение имя, оно не включает файл из сменного каталога, оно просто включает файл из того же каталога файла, переданного как аргумент.

Когда Вы звоните

include( plugin_dir_path( __FILE__ ) . 'test-plugin/needed_file.php');

из файла в каталоге темы Вы просто пытаетесь включать файл из каталога темы также, потому что __FILE__ постоянный всегда содержат путь файла, в котором оператор, записал.

Вторым путем Вы пробуете, правильный, но когда Вы определяете WPFP_PATH необходимо использовать путь файла, не URL, потому что много систем из соображений безопасности имеет включение отключенных URL.

Таким образом, сначала необходимо вставить основной сменный файл (тот, которые содержат сменные заголовки),

define( 'WPFP_PATH', plugin_dir_path( __FILE__ ) ); 

и ваш в теме

include( WPFP_PATH . 'needed_file.php' );

будет работать.

Обратите внимание, что файл, записал, не ведя наклонную черту, потому что plugin_dir_path возвратите путь с запаздывающей наклонной чертой.

Однако однажды WPFP_PATH находится в глобальном пространстве имен, которое необходимо проверить если defined и/или, возможно, используйте функцию для возврата пути, чего-то как

function wpfp_get_path() {
  return plugin_dir_path( __FILE__ );
}

и затем в теме include( wpfp_get_path() . 'needed_file.php' );

5
19.02.2020, 22:25
  • 1
    , "при определении WPFP_PATH, необходимо использовать путь файла, не URL" это предложение, работал. Хотя к моему удивлению у меня был он работающий с чем-то как простой как include ('wp-content/plugins/test-plugin/needed_file.php'); –  gurung 25.10.2013, 19:48
  • 2
    Вы - желанный @gurung включение, Вы записали в комментариях, может работать, но относительного пути нужно всегда избегать, они не очень надежный –  gmazzap♦ 25.10.2013, 22:12

Теги

Похожие вопросы