Я для себе використовую комбінацію:
- один файл, присвячений одноразовому сценарію
- використання перехідного періоду, щоб запобігти випадковому запуску сценарію не один раз
- використовуючи управління можливостями або управління користувачем, щоб гарантувати, що сценарій просто виконується мною.
Будова
Я використовую файл ( 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
з сервера. Оскільки я використав тайм-аут для перехідного періоду, мені не потрібно очищати базу даних, але, звичайно, ви також можете видалити перехідний процес після видалення файлу.