WordPress

Automatyzacja checklist za pomocą Site Health Check w WordPressie

Maciek Palmowski

Maciek PalmowskiMaciek Palmowski

email m.palmowski@freshpixels.pl

wordpress.org profiles.wordpress.org/palmiak

github github.com/palmiak

Timber Collaborator github.com/timber/timber

WordPress Developer OsomStudio

Do czego służy?

  • pozwala sprawdzić czy występują jakieś podstawowe błędy WP
  • wypisuje konfigurację serwera i WordPressa
  • pozwala dopisywać własne testy

Motywacja

  • Checklista jest długa i nudna
  • Robiąc to w kółko, spada nasza motywacja
  • Po co robić coś co może za nas zrobić automat?

Nasze testy

  • czy motyw zawiera pliki 404.php oraz search.php
  • czy główny mail jest poprawny
  • czy user admin jest usunięty
  • czy można edytować pliki
  • czy nie występuje nigdzie domena z serwera developerskiego
  • czy mamy włączone indexowanie
  • czy zablokowana jest rejestracja gości

Jak wygląda test?

add_filter( 'site_status_tests', 'palmiak_add_404_test' );

function palmiak_add_404_test( $tests ) {
    $tests['direct']['palmiak_404'] = array(
        'label' => 'Czy motyw zawiera plik 404.php',
        'test'  => 'palmiak_404_test',
    );
    return $tests;
}
function palmiak_404_test() {
    $result = []; // wartości domyślne
    
    if( jakis_test() ) {
        $result = []; // wartości kiedy występuje błąd
    }

    return $result;
}
$result = [
    'label'       => 'W motywie jest plik 404.php.',
    'status'      => 'good',
    'badge'       => [
        'label' => 'Palmiakowe testy',
        'color' => 'blue',
    ],
    'description' => '

Nasze motywy powinny zawierać plik 404.php.

', 'actions' => '', 'test' => 'palmiak_404', ]; if ( ! locate_template( '404.php' ) ) { $result['status'] = 'recommended'; $result['label'] = 'Brak pliku 404.php.'; $result['description'] = '

Motyw powinien zawierać plik 404.php - dodaj go.

'; } return $result;

Efekt

Collaboration

Efekt

Collaboration
label Tytuł testu.
status good | critical | recommended Stan testu.
badge label | color Labelka obok tytułu.
description Opis albo instrukcja co należy poprawić.
test Slug testu
action Link do akcji, którą możemy wykonać.

Test czy jest user "admin"

add_filter( 'site_status_tests', 'palmiak_add_admin_test' );

function palmiak_add_admin_test( $tests ) {
    $tests['direct']['palmiak_admin'] = array(
        'label' => 'Czy strona posiada usera "admin"',
        'test'  => 'palmiak_admin_test',
    );
    return $tests;
}
$result = [
    'label'       => 'Strona nie ma usera "admin"',
    'status'      => 'good',
    'badge'       => [
        'label' => 'Palmiakowe testy',
        'color' => 'red',
    ],
    'description' => '

Nasze strony nie powinny mieć usera "admin".

', 'test' => 'palmiak_admin', ]; if ( ! empty( get_user_by( 'login', 'admin' ) ) ) { $result['status'] = 'critical'; $result['label'] = 'Na stronie jest użytkownik "admin".'; $result['description'] = '

Powinniśmy go usunąć ze względów bezpieczeństwa.

'; $result['actions'] = '

Usuń użytkownika

'; } return $result;

Efekt

Collaboration

Test asynchroniczny

Kiedy używamy:

  • kiedy test trwa dłużej - np. jakaś dłuższa operacja na bazie danych
  • kiedy chcemy połączyć się z zewnętrzną usługą np. jakimś API

Test asynchroniczny

add_filter( 'site_status_tests', 'palmiak_add_secure_test' );

function palmiak_add_secure_test( $tests ) {
    $tests['async']['palmiak_secure'] = array(
        'label' => 'Czy działa wersja dla https://',
        'test'  => 'palmiak_secure_test',
    );
    return $tests;
}

add_action( 'wp_ajax_health-check-palmiak-secure_test', 'palmiak_secure_test' );

Test asynchroniczny

function redirect_test() {
    $ret = wp_remote_get( 'https://api.redirect.li/v1/http/?url=SOME_URL' );
    $body = json_decode( $ret['body'] );

    if( $body->status == 500 ) {
        return false;
    } else {
        return true;
    }
}
$result = [
    'label'       => 'Czy działa wersja https:// dla strony.',
    'status'      => 'good',
    'badge'       => [
        'label' => 'Palmiakowe testy',
        'color' => 'red',
    ],
    'description' => '

Nasze strony muszą działać pod https.

', 'test' => 'palmiak_secure_test', ]; if ( ! redirect_test() ) { $result['status'] = 'critical'; $result['label'] = 'Strona nie działa pod https://'; $result['description'] = '

Musimy to poprawić.

'; } wp_send_json_success( $result );

Wnioski

  • Testy w Site Health Check nie zastąpią nam testów jednostkowych czy funkcjonalnych
  • Pozwalają już na wczesnym etapie wyeliminować podstawowe błędy czy niedociągnięcia
  • Jeżeli testy są dobrze opisane, mogą pozwolić Project Managerom wprowadzić drobne poprawki

Pytania?

Zapraszamy na wordpressowka.pl