Как разработчик WordPress, который создает специализированные продукты для своих клиентов, я снова и снова сталкивался с одной и той же проблемой, пытаясь создавать PHP-скрипты в рамках WordPress. Мне нравится использовать встроенную функциональность WordPress, но я продолжал сталкиваться с одними и теми же сообщениями об ошибках снова и снова: «вызов неопределенного метода…» или «не удалось открыть поток».
Затем вы отправляетесь на охоту, чтобы найти подходящие файлы, которые вам нужно включить, требовать, include_once или require_once, в зависимости от ваших потребностей. Как только вы найдете нужный файл, обычно какой-нибудь документ PHP в папке wp-includes, например, вы должны включить / потребовать его в начале вашего скрипта — часто только для того, чтобы найти другой «вызов неопределенного метода…»
Чтобы сэкономить время и позволить вам начать создавать код сейчас , а не после нескольких часов (или дней) поиска решения в Google, я создал простой скрипт, с помощью которого я запускаю все свои пользовательские файлы. Он обрабатывает все нужные мне файлы для 99% моей разработки.
Предостережение
Я рекомендую использовать это только во время разработки вашего плагина , тем или сценариев, а затем, перед тем, как приступить к работе, выяснить, какие файлы вам действительно нужны. Я не рекомендую держать этот скрипт постоянно включенным, так как он делает ненужные вызовы для файлов, которые вам, вероятно, не нужны.
Я проведу вас через этот сценарий, чтобы вы могли видеть, что я делаю и почему. Это также может работать как справочный инструмент для вас позже.
Забудьте ABSPATH — сделайте свой собственный путь
Мне нравится всегда определять ABSPATH, но его можно использовать с некоторыми скриптами и установками WordPress. Раньше я использовал простой if, чтобы проверить, определен ли ABSPATH, но это тоже не всегда получается:
[sourcecode language = ”php”]
/ * ПРИМЕЧАНИЕ: это то, чем я больше не занимаюсь * /
// Определим абспат
if (!fined (‘ABSPATH’))}}
define (‘ABSPATH’, dirname (___ FILE___). ‘/’);
}
[/исходный код]
Вместо этого я создаю свой собственный путь к моей установке WordPress, который намного более стабилен:
[sourcecode language = ”php”]
$ location = $ _SERVER [‘DOCUMENT_ROOT’];
include ($ location. ‘/wp-config.php’);
include ($ location. ‘/wp-load.php’);
include ($ location. ‘/wp-includes/pluggable.php’);
[/исходный код]
Это предполагает, что ваша установка WordPress находится в корне вашего сайта, т.е. www.yoursite.com
Если это не так, просто добавьте строку в переменную $ location так:
[sourcecode language = ”php”]
$ location = $ _SERVER [‘DOCUMENT_ROOT’]. ‘/ Ваш-сор-установки’;
[/исходный код]
Большая тройка
По моему опыту, есть три файла, которые вызывают все мои проблемы при настройке моих сценариев. Я называю их моей «большой тройкой», потому что, как только я включаю или требую их, большинство моих проблем исчезают, когда дело доходит до ошибок «вызова неопределенного метода». Они есть:
- WP-config.php
- pluggable.php
- сор-load.php
Как только вы их получите, вы обнаружите, что большинство ваших ошибок исчезают.
[sourcecode language = ”php”]
// Получить большую тройку
include (ABSPATH. ‘wp-config.php’);
include (ABSPATH. ‘wp-load.php’);
include (ABSPATH. ‘wp-includes / pluggable.php’);
[/исходный код]
Глобальный $ wpdb
Еще одна полезная вещь — убедиться, что ваш $ wpdb является глобальной переменной. Это позволяет любым созданным вами функциям иметь доступ к функциям запросов к базе данных WordPress. Это может сэкономить время.
Поскольку вы включили файлы wp-config.php и wp-db.php, у вас не должно возникнуть проблем с тем, чтобы $ wpdb работал правильно, но я все же хотел бы запустить тест if, чтобы проверить сначала:
[sourcecode language = ”php”]
// Получить большую четверку
глобальный $ wpdb;
if (! isset ($ wpdb))
{
include ($ location. ‘/wp-config.php’);
include ($ location. ‘wp-includes / wp-db.php’);
}
[/исходный код]
Проверьте скрипт
Если вы начинаете с новой установки WordPress, у вас есть только один пользователь-администратор. Таким образом, нет смысла пытаться подключиться к базе данных WordPress и опрашивать пользователей. Я построил этот простой тест, чтобы увидеть, правильно ли мы подключаемся. Если это так, вы увидите свое имя и адрес электронной почты, зарегистрированные в WordPress в виде таблицы:
[sourcecode language = ”php”]
/ *
Тест выше включает заявления работают
список всех администраторов и их адрес электронной почты
адреса в таблице.
* /
// Начать тест
$ args = array (// настроить запрос только для администраторов
‘role’ => ‘Administrator’,
‘fields’ => ‘all_with_meta’
);
$ query = get_users ($ args); // используем вызов get_users
// Настраиваем стол
echo ‘<table cellpadding = «0» cellspacing = «0» border = «1»> <tr> <thead> <th> Nice Name </ th> <th> Email </ th> </ thead> </ tr > ‘;
// Для каждого администратора создаем строку таблицы
foreach ($ query как $ query) {
echo ‘<td>’. $ query-> user_nicename. ‘</ td> <td> <a href=»mailto:’. $query-> user_email.’ «> ‘. $ query-> user_email. ‘</a> </ TD> </ TR>’;
} // Конец foreach
echo ‘</ table>’; // закрываем тег таблицы
// Завершение теста — закомментируйте или удалите отсюда вышеупомянутый «Начать тест»
[/исходный код]
Если тест работает, и вы видите свое имя и адрес электронной почты, просто удалите наш комментарий из сценария теста и начните писать код!
Вы можете удалить этот файл PHP в любом месте в папках WordPress, и он будет работать. Таким образом, для начального тестирования и программирования этот скрипт может сэкономить массу времени, в противном случае вы потратите на устранение основных технических проблем.
Опять же, вы можете захотеть сделать некоторые детали работы, как только ваши функции работают должным образом и включают только абсолютно необходимые файлы. Например, если вам не нужно включать файл wp-config.php, не делайте этого! Просто закомментируйте код, построчно, и посмотрите, работает ли он правильно. Оставь то, что тебе нужно, потерять остальное.
Надеюсь, это сэкономит вам кучу времени и позволит вам сосредоточиться на кодировании, а не на базовом отображении необходимых файлов для разработки WordPress.
Вот полный сценарий для удобства. Просто скопируйте, сохраните файл, где это необходимо, и получайте удовольствие от работы:
[sourcecode language = ”php”]
<? PHP
/ * Волшебный инклюдер Джастина
Предполагается, что вы используете корневую папку вашего сервера для
WordPress установить. Если нет, просто добавьте подпапку, где для
WordPress вы используете.
Например, добавьте подпапку в переменную $ location:
$ location = $ _SERVER [‘DOCUMENT_ROOT’]. ‘/ Ваш-подпапка’;
* /
$ location = $ _SERVER [‘DOCUMENT_ROOT’];
include ($ location. ‘/wp-config.php’);
include ($ location. ‘/wp-load.php’);
include ($ location. ‘/wp-includes/pluggable.php’);
глобальный $ wpdb;
if (! isset ($ wpdb))
{
include ($ location. ‘/wp-config.php’);
include ($ location. ‘/wp-includes/wp-db.php’);
}
/ *
Тест выше включает заявления работают
список всех администраторов и их адрес электронной почты
адреса в таблице.
* /
// Начать тест
$ args = array (// настроить запрос только для администраторов
‘role’ => ‘Administrator’,
‘fields’ => ‘all_with_meta’
);
$ query = get_users ($ args); // используем вызов get_users
// Настраиваем стол
echo ‘<table cellpadding = «0» cellspacing = «0» border = «1»> <tr> <thead> <th> Nice Name </ th> <th> Email </ th> </ thead> </ tr > ‘;
// Для каждого администратора создаем строку таблицы
foreach ($ query как $ query) {
echo ‘<td>’. $ query-> user_nicename. ‘</ td> <td> <a href=»mailto:’. $query-> user_email.’ «> ‘. $ query-> user_email. ‘</a> </ TD> </ TR>’;
} // Конец foreach
echo ‘</ table>’; // закрываем тег таблицы
// Завершение теста — закомментируйте или удалите отсюда вышеупомянутый «Начать тест»
?>
[/исходный код]
Хотите глубже вникнуть в PHP? Посетите наш партнерский сайт, PHPMaster.com .