Я для себя использую комбинацию из:
- один файл, посвященный одноразовому сценарию
- использование переходного процесса, чтобы остановить сценарий от случайного запуска более одного раза
- используя управление возможностями или пользовательский контроль, чтобы скрипт был запущен мной.
Состав
Я использую файл ( onetime.php
) в моей include-папке inc
, которая включена в functions.php
и удалена оттуда после использования.
include( 'inc/onetime.php' );
Файл для самого скрипта
По моему onetime.php
моя функция f711_my_onetime_function()
размещена. Как это может быть любая функция. Я предполагаю, что ваш скрипт протестирован и работает правильно.
Чтобы добиться контроля над выполнением скрипта, я использую оба
Контроль возможностей
Чтобы другие пользователи не могли случайно выполнить мой скрипт:
if ( current_user_can( 'manage_options' ) ) // check for administrator rights
или
if ( get_current_user_id() == 711 ) // check if it is me - I prefer restricting the execution to me, not to all admins.
переходный процесс
чтобы я не мог случайно выполнить сценарий более одного раза.
$transient = 'f711_my_onetime_check';
if ( !get_transient( $transient ) ) // check if the function was not executed.
Файл для выполнения скрипта в моей функции f711_my_onetime_function()
будет выглядеть так:
$transient = 'f711_my_onetime_check';
if ( get_current_user_id() == 711 && !get_transient( $transient ) ) {
set_transient( $transient, 'locked', 600 ); // lock function for 10 Minutes
add_action( 'wp_footer', 'f711_my_onetime_function' ); // execute my function on the desired hook.
}
function f711_my_onetime_function() {
// all my glorious one-time-magic.
}
Причина, по которой я установил переходный процесс сразу после проверки, существует ли он, заключается в том, что я хочу, чтобы функция выполнялась после того, как скрипт был заблокирован от повторного использования.
Если мне нужен какой-либо вывод из моей функции, я либо распечатываю его как комментарий в нижнем колонтитуле, либо иногда я даже фильтрую содержимое.
Время блокировки установлено на 10 минут, но может быть скорректировано в соответствии с вашими потребностями.
уборка
После успешного выполнения моего сценария я удаляю include
с functions.php
и удаляю onetime.php
с сервера. Поскольку я использовал время ожидания для переходного процесса, мне не нужно очищать базу данных, но, конечно, вы также можете удалить переходный процесс после удаления файла.