Tovább a tartalomhoz

Lassú Frissítések oldalak nagy hálózatoknál

Opcionális lapozó kódrészlet a Custom Dashboard kiegészítővel, ha több száz Child-webhelynél lelassulnak a Frissítések oldalai.

Ez a fejezet olyan rendszergazdáknak szól, akik több száz Child-webhelyet kezelnek, és náluk már lassúak vagy nem reagálnak a Frissítések oldalak. Ha az oldalak normálisan töltenek be és reagálnak, maradj az alapértelmezett működésnél: a nagy webhelyszám önmagában nem ok a kódrészlet használatára.

A frissítési listák sok bővítmény-, sablon- és webhelysort tartalmazhatnak, az összecsukott szakaszokban lévőket is. Ezek megjelenítése jelentős terhelést ró a böngészőre. A kerülőmegoldás korlátozza az egy listába betöltött webhelyek számát, és lapozóvezérlőket ad, így kisebb csomagokban dolgozhatod végig a hálózatot.

A beépített lapozás a Frissítések oldalakhoz tervben van, határidő nélkül. Az alábbi kódrészlet ideiglenes, opcionális megoldás.

Előfeltétel: több száz csatlakoztatott Child-webhely, tapasztalható lassúság vagy a böngésző akadozása a Frissítések oldalakon, rendszergazdai jog és engedély egyedi PHP szerkesztésére a vezérlőpulton, valamint a Custom Dashboard kiegészítő telepítve és bekapcsolva a vezérlőpulton.

Akkor érdemes használni, ha egy Frissítések oldal sokáig tölt, nehezen kezelhetővé válik, vagy nagy frissítési lista megjelenítésekor magas a böngésző processzorhasználata. A megoldás azt csökkenti, hány webhely ad sort az aktuális listához. Nem diagnosztizálja a lassú vezérlőpult minden okát, és nem garantál konkrét betöltési időt. A szerverhibák, a kapcsolati problémák és más kiegészítők adatbetöltése külön hibaelhárítást igényel.

Az oldalméret webhelyeket számol, nem bővítményeket, sablonokat vagy frissítési sorokat. 100 webhelyes oldalnál is lehet egy oldalon több száz frissítés. Azok a webhelyek is beleszámítanak a csomagba, amelyeknél nincs elérhető frissítés.

  1. Nyisd meg a Kiegészítők → Custom Dashboard oldalon a PHP fület. Közvetlen cím: /wp-admin/admin.php?page=Extensions-Mainwp-Custom-Dashboard-Extension&tab=php. Szerkesztés előtt őrizz meg egy másolatot a már ott lévő PHP-kódról.

  2. Másold be a teljes alábbi kódblokkot a PHP-szerkesztőbe. Nyitó vagy záró PHP-címke nélkül kell beilleszteni. A szerkesztőben már meglévő, nem kapcsolódó kódrészleteket hagyd meg. A lapozó kódrészletet csak egyszer add hozzá: ha már van korábbi változata, cseréld le, ne vegyél fel másodikat. A megvalósításhoz a teljes kód kell, a navigációs vezérlőkkel együtt.

    // MainWP Updates: load sites in pages. Paste WITHOUT an opening PHP tag.
    // Start with 100 sites/page; reduce to 50 if needed. Use a positive whole number.
    ( static function () {
    $per_page = 100;
    if ( ! is_admin() || wp_doing_ajax() ||
    'updatesmanage' !== ( isset( $_GET['page'] ) ? sanitize_key( wp_unslash( $_GET['page'] ) ) : '' ) ) {
    return;
    }
    $tab = isset( $_GET['tab'] ) ? sanitize_key( wp_unslash( $_GET['tab'] ) ) : 'plugins-updates';
    if ( ! in_array( $tab, array( 'plugins-updates', 'themes-updates', 'wordpress-updates', 'translations-updates' ), true ) ) {
    return;
    }
    $state = null;
    $get_state = static function () use ( &$state, $per_page ) {
    if ( null !== $state ) {
    return $state;
    }
    $db = \MainWP\Dashboard\MainWP_DB::instance();
    $is_staging = 'no';
    if ( ( is_plugin_active( 'mainwp-staging-extension/mainwp-staging-extension.php' ) ||
    is_plugin_active( 'mainwp-timecapsule-extension/mainwp-timecapsule-extension.php' ) ) &&
    'staging' === \MainWP\Dashboard\MainWP_System_Utility::get_select_staging_view_sites() ) {
    $is_staging = 'yes';
    }
    // Count the connected, accessible sites without fetching update JSON.
    $params = array( 'connected' => 'yes', 'is_staging' => $is_staging, 'count_sql' => true, 'others_fields' => array() );
    if ( \MainWP\Dashboard\MainWP_System::instance()->is_multi_user() ) {
    $params['where'] = 'wp.userid = ' . (int) get_current_user_id();
    }
    $total = (int) $db->get_var_field( $db->get_sql_websites_for_current_user_by_params( $params ) );
    $pages = max( 1, (int) ceil( $total / $per_page ) );
    $current = 1;
    if ( isset( $_GET['current_page'], $_GET['_opennonce'] ) &&
    wp_verify_nonce( sanitize_key( wp_unslash( $_GET['_opennonce'] ) ), 'mainwp-admin-nonce' ) ) {
    $current = max( 1, (int) $_GET['current_page'] );
    }
    $state = array( 'total' => $total, 'pages' => $pages, 'current' => min( $current, $pages ) );
    return $state;
    };
    add_filter( 'mainwp_manage_updates_limit_loading', static function ( $limit, $context ) use ( $per_page ) {
    return 'updates' === $context ? $per_page : $limit;
    }, 10, 2 );
    // Keep this request's page stable even if another admin opens a different page.
    add_filter( 'mainwp_get_sql_websites', static function ( $params ) use ( $per_page, $get_state ) {
    if ( ! empty( $params['limit_sites'] ) && isset( $params['connected'] ) && 'yes' === $params['connected'] ) {
    $state = $get_state();
    $params['per_page'] = $per_page;
    $params['page'] = $state['current'];
    }
    return $params;
    }, 100 );
    add_action( 'mainwp_updates_after_nav_tabs', static function () use ( $per_page, $get_state, $tab ) {
    $state = $get_state();
    $first = $state['total'] ? ( $state['current'] - 1 ) * $per_page + 1 : 0;
    $last = min( $state['total'], $state['current'] * $per_page );
    echo '<div id="bk-updates-site-pages" class="ui segment" style="margin:1em 0">';
    echo '<strong>' . esc_html( sprintf( 'Sites %d-%d of %d | Page %d of %d', $first, $last, $state['total'], $state['current'], $state['pages'] ) ) . '</strong>';
    if ( $state['pages'] > 1 ) {
    $base = add_query_arg( array(
    'page' => 'UpdatesManage', 'tab' => $tab,
    'current_page' => 999999999, '_opennonce' => wp_create_nonce( 'mainwp-admin-nonce' ),
    ), admin_url( 'admin.php' ) );
    $links = paginate_links( array(
    'base' => str_replace( '999999999', '%#%', $base ), 'format' => '',
    'current' => $state['current'], 'total' => $state['pages'],
    'type' => 'array', 'prev_text' => 'Previous', 'next_text' => 'Next',
    'add_args' => false,
    ) );
    echo '<nav aria-label="Updates site pages" style="display:flex;flex-wrap:wrap;gap:.5em">';
    foreach ( $links as $link ) {
    echo '<span class="ui small basic label">' . wp_kses_post( $link ) . '</span>';
    }
    echo '</nav>';
    }
    echo '</div>';
    } );
    } )();
  3. Kattints a Save Changes gombra. Ha a szerkesztő szintaktikai hibát jelez, ellenőrizd, hogy a teljes blokkot másoltad-e be, PHP-címke és Markdown-kódkerítés nélkül.

  4. Nyisd meg a Frissítések → Bővítmények oldalt (közvetlen cím: /wp-admin/admin.php?page=UpdatesManage&tab=plugins-updates). A lista fölött megjelenik a webhelytartomány és az oldalszám. A számozott oldalakkal, a Previous és a Next hivatkozással léphetsz a csomagok között. A kódrészlet a Sablonok, a WordPress és a Fordítások frissítési oldalakra is érvényes, amikor azok elérhetők.

A kódrészlet alapból 100 webhelyet tölt be oldalanként.

A webhelyek számának megválasztása oldalanként

Szekció neve “A webhelyek számának megválasztása oldalanként”

A kódrészlet tetején lévő alapértelmezett sor:

$per_page = 100;

Ha a lista még így is nehéz, módosítsd erre:

$per_page = 50;

Mentsd a kódrészletet, és nyisd meg újra a Frissítések → Bővítmények oldalt, így az első oldalról indulsz. Pozitív egész számot használj. A kisebb csomagok kevesebb sort töltenek be egyszerre, de több oldalváltást kívánnak. A legjobb érték attól függ, hány frissítés van egy-egy webhelyen, és mennyire érzed gyorsnak a listát.

Elem Viselkedés a kódrészlettel
A frissítési lista és a darabszámai Az aktuális oldalon lévő webhelyek frissítéseit tartalmazzák.
A listában lévő tömeges frissítési műveletek A betöltött webhelyoldalra vonatkoznak. A teljes hálózathoz oldalanként végig kell menned.
Az oldalsáv frissítési összesítői Továbbra is a teljes hálózatot mutatják, ezért magasabbak lehetnek, mint az aktuális lista darabszámai.
Globális figyelmen kívül hagyás Továbbra is globálisan érvényes, a lapozás nem szűkíti.
Elem-, webhely- és címkenézet Az éppen betöltött csomag frissítéseit csoportosítják. A csoportosítás váltása nem tölti be a hálózat többi részét.
Automatikus frissítések és szinkronizálási ütemezések A kódrészlet nem állítja be és nem módosítja őket.
Más vezérlőpult-oldalak és kiegészítők Nem kapnak lapozást a kódrészlettől. A Lighthouse-jelentések adatbetöltését sem érinti.

A kódrészlet egyedi PHP-t ad a meglévő MainWP-hookokhoz, a MainWP bővítményfájljait nem módosítja. A hookok és az oldalak viselkedése a későbbi kiadásokban változhat: távolítsd el a kerülőmegoldást, amikor áttérsz a beépített lapozásra.

A vezérlők csak akkor jelennek meg, ha a jogosult csatlakoztatott webhelyek több oldalra oszlanak. Ha az összes belefér a beállított korlátba, a webhelytartomány megjelenik, de nincs második oldal.

Egy oldalon nincs elérhető frissítés

Szekció neve “Egy oldalon nincs elérhető frissítés”

Egy csomagban lehetnek olyan webhelyek, amelyeknél a kiválasztott kategóriában nincs frissítés. A lapozóvezérlőkkel lépj tovább. Az üres csomag nem jelenti, hogy az egész hálózat naprakész.

Egy régi oldalhivatkozás az első oldalra visz

Szekció neve “Egy régi oldalhivatkozás az első oldalra visz”

A lapozási hivatkozások időkorlátos WordPress-nonce-t tartalmaznak. Nyisd meg újra a Frissítések → Bővítmények oldalt, és a friss vezérlőket használd, ne mentett lapozási címet.

Csökkentsd az oldalankénti webhelyek számát, és hasonlítsd össze a reakcióidőt. Ha alig javul, távolítsd el a kódrészletet az alábbiak szerint, és fordulj a MainWP támogatásához: add meg az érintett frissítési fület, a webhelyek hozzávetőleges számát, és hogy a késés az oldal betöltésekor vagy a lista használatakor jelentkezik.

  1. Nyisd meg a Kiegészítők → Custom Dashboard → PHP oldalt (/wp-admin/admin.php?page=Extensions-Mainwp-Custom-Dashboard-Extension&tab=php).
  2. Csak a lapozó kódrészletet töröld, és kattints a Save Changes gombra. A nem kapcsolódó PHP-kódot hagyd meg.
  3. Töltsd újra a Frissítések → Bővítmények oldalt: a MainWP visszatér a normál, teljes listás betöltéshez.

Készült:

Tiszteletben tartjuk a magánszférádat

Sütiket használunk a böngészési élmény javítására és a forgalom elemzésére. Az analitika csak akkor indul, ha engeded. Adatvédelmi irányelvek, Sütitájékoztató.

Sütibeállítások