Вопрос или проблема
Мне нужна помощь с моим первым плагином WP. У меня есть приложение на php/mysql, разбитое на 10 php файлов (в основном это формы), и у меня есть проблема с ассоциацией между formscript.php и скриптом сервиса (service.php). Мне определенно нужен результат от service.php в интерфейсе WP (плагина).
Упрощенные скрипты:
myfirst.php
<?php /*
Имя плагина: myfirst
...*/
function myfirst_admin() {
include('formcript.php');}
function myfirst_admin_actions() {
add_options_page("myfirst", "myfirst", 1, "myfirst", "myfirst_admin");
}
add_action('admin_menu', 'myfirst_admin_actions');?>
formscript.php:
echo '<form method="post" action="service.php">
<input type="text" name="something" />
<input type="submit" value="отправить" />
</form>';
service.php:
<?php echo $_POST["neco"];?>
Есть какие-либо предложения?
В большинстве случаев не следует непосредственно обращаться к файлам вашего плагина PHP. Сам по себе файл — это просто файл, он не имеет способа узнать, что является частью установки WordPress. Даже намеренно загружать ядро WP из произвольного файла очень сложно сделать универсально и надежно.
Вам следует указать вашей форме один из конечных пунктов WordPress и использовать хуки для соединения вашего кода с ним.
Для простой отправки формы вам, вероятно, следует начать с изучения wp-admin/admin-post.php
конечной точки и попытаться ее использовать.
Ответ или решение
Создание плагина на WordPress с использованием нескольких PHP файлов
Создание плагина для WordPress — это увлекательный, но иногда сложный процесс, особенно когда дело касается интеграции нескольких PHP файлов и взаимодействия между ними. В данной статье мы рассмотрим, как правильно организовать структуру вашего плагина, исключая прямые обращения к PHP файлам, что является важным аспектом безопасной и корректной работы в рамках WordPress.
Основы структуры плагина
Сначала создадим файл вашего плагина myfirst.php
. Самый первый шаг — это объявление плагина, что мы уже сделали в вашем примере. Ваша функция myfirst_admin()
будет отвечать за отображение административного интерфейса плагина:
<?php
/*
Plugin Name: My First Plugin
Description: Пример плагина для WordPress.
Version: 1.0
Author: Ваше Имя
*/
function myfirst_admin() {
// Подключаем свой файл формы
include(plugin_dir_path(__FILE__) . 'formscript.php');
}
function myfirst_admin_actions() {
add_options_page("My First Plugin", "My First Plugin", 'manage_options', "myfirst", "myfirst_admin");
}
add_action('admin_menu', 'myfirst_admin_actions');
?>
Создание формы
Теперь создадим файл formscript.php
, в котором будет ваша форма. Вместо того, чтобы отправлять данные формы на service.php
, мы будем использовать специальный процесс обработки WordPress:
<?php
echo '<form method="post" action="' . esc_url(admin_url('admin-post.php')) . '">
<input type="text" name="something" required />
<input type="hidden" name="action" value="my_first_plugin_action" />
<input type="submit" value="Отправить" />
</form>';
?>
Обратите внимание на использование функции esc_url()
для безопасного формирования URL. Здесь также добавлен скрытый элемент input
, который задает действие, которое мы будем обрабатывать позже.
Обработка данных формы
Теперь необходимо добавить логику для обработки отправленных данных. Это можно сделать, используя хук admin_post_<action>
. Для этого добавьте следующий код в ваш файл плагина myfirst.php
:
function handle_my_first_plugin_action() {
if (!empty($_POST['something'])) {
// Здесь можете обработать данные из формы, например, сохранить в базу данных или обработать по-другому
$something = sanitize_text_field($_POST['something']);
// Выводим результат, либо перенаправляем пользователя
echo 'Вы отправили: ' . esc_html($something);
exit;
}
}
add_action('admin_post_my_first_plugin_action', 'handle_my_first_plugin_action');
Эта функция будет вызываться при отправке формы. Мы используем sanitize_text_field()
для очистки данных перед их использованием.
Итоги
Таким образом, используя правильные методы WordPress, вы можете разработать плагин, который безопасно и эффективно обрабатывает данные, не обращаясь к PHP-файлам напрямую. Такой подход обеспечивает большую гибкость и безопасность вашего кода.
Следует помнить, что корректная работа с функциями WordPress и использование их API не только упрощает вашу разработку, но и улучшает взаимодействие вашего плагина с другими компонентами WordPress. В результате ваш плагин будет более устойчивым и совместимым с будущими версиями платформы.
Если у вас есть дополнительные вопросы или потребуется дальнейшая помощь, не стесняйтесь обращаться за поддержкой.