Абсолютный путь (ABSPATH) в WordPress не работает

14 февр. 2014 г., 07:25:17
Просмотры: 40.9K
Голосов: 3

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

Вот строка, которая подключает файл:

require_once(ABSPATH . 'wp-admin/includes/upgrade.php');

но при выполнении кода я получаю следующую ошибку:

Предупреждение: require_once(ABSPATHwp-admin/includes/upgrade.php): не удалось открыть поток: Файл или каталог не существует в /home/najam/dev/project1/wordpress/wp-admin/admin-insert.php на строке 18

Я много искал, но не смог найти ничего полезного или helpful.

РЕДАКТИРОВАНИЕ

Вот мой код:

global $wpdb;

$table_name = $wpdb->prefix . 'table_form';

$sql = "CREATE TABLE $table_name (
  id int(11) NOT NULL AUTO_INCREMENT,
  rows int(11) DEFAULT NULL,
  cols int(11) DEFAULT NULL,
  UNIQUE KEY id (id)
);";

require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta( $sql );
9
Комментарии

Где находится этот код?

s_ha_dum s_ha_dum
14 февр. 2014 г. 07:32:15

ABSPATH, похоже, не определен. Где вы его используете?

Seamus Leahy Seamus Leahy
14 февр. 2014 г. 07:34:00

Возможно, вы пропустили завершающий слеш после ABSPATH и перед wp-admin/. Попробуйте так: ABSPATH . '/wp-admin/. Также обратите внимание на этот вопрос о WordPress на StackOverflow.

Mayeenul Islam Mayeenul Islam
14 февр. 2014 г. 07:36:00

без успеха.. :( из-за слеша в конце... @mayeenul

Najam-us-Saqib Najam-us-Saqib
14 февр. 2014 г. 07:37:17

Что за файл /wp-admin/admin-insert.php? Его нет в ядре. Вы изменяете ядро WordPress?

Seamus Leahy Seamus Leahy
14 февр. 2014 г. 08:07:22

insert.php — это файл, который я создал сам. На самом деле, я новичок в WordPress, и я хочу понять, делаю ли я что-то неправильно. Я пытаюсь сохранить данные из формы плагина в базе данных.

Najam-us-Saqib Najam-us-Saqib
14 февр. 2014 г. 08:10:19

@Mayeenul Islam нет, завершающий слеш после ABSPATH не требуется. Переменная ABSPATH уже содержит завершающий слеш...

Shail Shail
14 июн. 2014 г. 14:10:54

Просто выведите переменную ABSPATH и убедитесь, что она возвращает.

Shail Shail
14 июн. 2014 г. 14:12:10

Вам не следует вносить изменения и дополнения в папку wp-admin, если вы не участвуете в разработке ядра WordPress. Вам следует создать плагин (это просто — PHP-файл с комментарием в начале в папке плагинов), поместить туда свой код и использовать AJAX API и систему хуков.

Tom J Nowell Tom J Nowell
15 авг. 2014 г. 04:05:49
Показать остальные 4 комментариев
Все ответы на вопрос 5
1

Файл insert.php, который я создал самостоятельно. На самом деле я новичок в WordPress, хочу узнать, есть ли ошибки, которые я допускаю? Мне нужно сохранять данные из формы плагина в базе данных.

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

Недостаток деталей в вашем вопросе — почти полное отсутствие контекста для кода — делает невозможным дать точный ответ, но я склоняюсь к тому, чтобы предложить вам запускать ваш код через AJAX API (даже если это не совсем AJAX). Например, как здесь: https://wordpress.stackexchange.com/a/108145/21376

Если вы хотите получить более точный ответ, вы должны задать более подробный вопрос. Пожалуйста, нажмите кнопку "редактировать" под вашим вопросом и добавьте как можно больше деталей, но сохраните структуру.

14 февр. 2014 г. 16:58:24
Комментарии

Я бы очень беспокоился, что таблица базы данных создаётся внутри AJAX-запроса, точка.

Tom J Nowell Tom J Nowell
15 авг. 2014 г. 04:04:08
0

В WordPress есть удобная функция, которая помогает, когда вы не хотите проверять наличие отсутствующего "/" в вашем пути.

trailingslashit

Ваш пример должен быть написан рекомендуемым способом:

require_once( trailingslashit( ABSPATH ) . 'wp-admin/includes/upgrade.php' );

Используя эту функцию, вам больше не нужно добавлять "/" перед вашим "относительным" путем, так как эта функция гарантирует, что "/" будет добавлен, если он отсутствует.

Именно для этого мы создали эту функцию в WordPress.

14 февр. 2014 г. 17:06:38
0

ABSPATH будет работать, вам нужно подключить файл wp-load. include '../../../wp-load.php';

25 авг. 2016 г. 14:03:34
0

Вам не должно понадобиться /, но попробуйте добавить слеш в начале /wp-admin

require_once( ABSPATH . '/wp-admin/includes/upgrade.php' );

Но вы проверили, существует ли файл /wp-admin/admin-insert.php?

Определена ли константа ABSPATH? Добавьте следующий код для проверки:

// Определена ли ABSPATH?
if ( !defined('ABSPATH') )
die('-1');

Также, вы пытаетесь запустить это без загрузки WordPress? Кроме того, можно попробовать использовать site_url() и работать с ней.

14 февр. 2014 г. 08:26:40
0

ABSPATH уже должен содержать завершающий слеш. Необходимо подключить файл обновления из главного файла плагина. Возможно, нужно использовать хуки 'plugins_loaded' или 'init', а затем вызвать метод обновления.

23 окт. 2017 г. 17:27:42