Dla siebie używam kombinacji:
- jeden plik poświęcony jednorazowemu skryptowi
- za pomocą przejściowego, aby zatrzymać przypadkowe uruchomienie skryptu więcej niż jeden raz
- za pomocą zarządzania możliwościami lub kontroli użytkownika, aby skrypt był uruchamiany przeze mnie.
Struktura
Korzystam z pliku ( onetime.php) w moim folderze incdołączania, który jest zawarty functions.phpi usunięty stamtąd po użyciu.
include( 'inc/onetime.php' );
Plik dla samego skryptu
W mojej onetime.phpfunkcji f711_my_onetime_function()jest umieszczona. Jak może to być dowolna funkcja. Zakładam, że twój skrypt jest przetestowany i działa poprawnie.
Aby uzyskać kontrolę nad wykonywaniem skryptu, używam obu
Kontrola zdolności
Aby powstrzymać innych użytkowników przed przypadkowym uruchomieniem mojego skryptu:
if ( current_user_can( 'manage_options' ) ) // check for administrator rights
lub
if ( get_current_user_id() == 711 ) // check if it is me - I prefer restricting the execution to me, not to all admins.
przemijający
aby powstrzymać się od przypadkowego wykonania skryptu więcej niż raz.
$transient = 'f711_my_onetime_check';
if ( !get_transient( $transient ) ) // check if the function was not executed.
Plik do wykonania skryptu w mojej funkcji f711_my_onetime_function()wyglądałby tak:
$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.
}
Powodem, dla którego ustawiam stan przejściowy natychmiast po sprawdzeniu, czy istnieje, jest to, że chcę, aby funkcja była wykonywana po dwukrotnym użyciu skryptu przed zablokowaniem.
Jeśli potrzebuję danych wyjściowych z mojej funkcji, albo drukuję to jako komentarz w stopce, albo czasami filtruję zawartość.
Czas blokady jest ustawiony na 10 minut, ale można go dostosować do własnych potrzeb.
Sprzątać
Po pomyślnym wykonaniu mojego skryptu usunę includez functions.php, i usunąć onetime.phpz serwera. Ponieważ użyłem limitu czasu dla stanu przejściowego, nie muszę czyścić bazy danych, ale oczywiście można również usunąć stan przejściowy po usunięciu pliku.