Zablokowanie działania wybranych wtyczek podczas edycji produktu w WooCommerce

Odpowiedz Nowy wątek
2019-08-22 15:25
0

Cześć,

mam następujący problem: staram się napisać skrypt, który będzie wyłączał wybrane wtyczki, jeśli użytkownik będzie akurat edytował stronę lub produkt w Wordpressie.
Do postawienia strony/sklepu został użyty Divi Builder. Problem w tym, że jeżeli chcemy edytować produkt i zapisać zmiany, czasami trzeba na to czekać.... 20 sekund. W Google Dev Tools, gdy wejdziemy w zakładkę Network, pokazuje, że strona pobiera blisko 50 mb zasobów... Gdy wyłączymy wszystkie wtyki na stronie i zostawimy samo Divi + WooCommerce, zasysa już "tylko" 24mb i zapisuje zmiany w około 6 sekund.
Stąd pomysł automatycznego wyłączania niepotrzebnych wtyczek, podczas gdy admin edytuje produkt. Użyłem do tego następującego kodu, znalezionego w sieci (wrzucony do mu-plugins):

<?php
add_filter( 'option_active_plugins', 'disable_plugins_per_page' );
function disable_plugins_per_page( $plugin_list ) {

// Quit immediately if not post edit area.
global $pagenow;
if (( $pagenow == 'post.php' || $pagenow == 'edit.php' )) {
    $disable_plugins = array (
        // Plugin Name
        'query-monitor/query-monitor.php'
    );
    $plugins_to_disable = array();
    foreach ( $plugin_list as $plugin ) {
        if ( true == in_array( $plugin, $disable_plugins ) ) {
            //error_log( "Found $plugin in list of active plugins." );
            $plugins_to_disable[] = $plugin;
        }
    }
    // If there are plugins to disable then remove them from the list,
    // otherwise return the original list.
    if ( count( $plugins_to_disable ) ) {
        $new_list = array_diff( $plugin_list, $plugins_to_disable );
        return $new_list;
    }   
}
return $plugin_list;

}

ale niestety dalej widzę, że ładuje CSSy i JS: https://monosnap.com/file/jjLr8iDjMDQOcyvb2nyR3eKjtGTh2r

Prosiłbym bardzo o pomoc w modyfikacji kodu, żeby w końcu zaczął poprawnie działać:(

Pozostało 580 znaków

2019-08-22 18:27
0

Divi+woo = bardzo duże obciążenie i nie powinno być stosowane dla sklepów

co do tematu, możesz spróbować pluginem: https://wordpress.org/plugins/plugin-organizer/

jeśli nie to dla userów nie adminów:

add_filter( 'option_active_plugins', 'disable_logged_in_plugin' );

function disable_logged_in_plugin( $plugins ) {

    require (ABSPATH . WPINC . '/pluggable.php');

    if ( is_user_logged_in() & !is_admin() ) {

        $key = array_search( 'folderPlugina/plikIndex.php' , $plugins );

        if ( false !== $key ) {
            unset( $plugins[ $key ] );
        }

    }
    return $plugins;
}

Ponadto zaznajom się, wygooglaj z funkcją mu-plugins - folder z pluginami, którego nie widać w admin panelu, to w nim musisz umieścić ten kod (czyli wp-content/mu-plugins/disable-logged-in-plugin.php).
Powodzenia.


Pozostało 580 znaków

2019-08-22 18:35
0

Dzięki za odpowiedź.
No przez to, że jest to oparte na Divi backend dość mocno zamula, ale gdy wyłączysz wszystkie inne wtyki, to chodzi całkiem sprawnie... Więc SAMO Divi + WooCommerce nie jest aż takie super złe, aczkolwiek demonem szybkości nie jest... Swoją drogą: czy np. Elementor jest lżejszy dla rozwiązań sklepowych, czy tylko i wyłącznie jakieś proste skórki?

Wtyczki już próbowałem, niestety bez powodzenia:-S

Czyli ten kod zadziała tylko dla kont, które nie są adminami, np. Shop Manager?

Tak, wiem, że trzeba to wrzucać do katalogu wp-content/mu-plugins

Pozostało 580 znaków

2019-08-24 21:55
0

Dzięki, dla jednej wtyczki działa super, ale jak wrzucam więcej niż jedną, przestaje działać:-S Czy mógłbyś pokazać jak powinien wyglądać kod dla dwóch i więcej wtyczek do zablokowania? Byłbym bardzo wdzięczny:)

Pozostało 580 znaków

2019-08-25 11:11
0

No trochę byś sam pokombinował to też by się nic nie stało ;)

add_filter( 'option_active_plugins', 'disable_logged_in_plugin' );

function disable_logged_in_plugin( $plugins ) {

    require (ABSPATH . WPINC . '/pluggable.php');

    if ( is_user_logged_in() & !is_admin() ) {

        $plugins_all = array ('folderPlugina/plikIndex1.php',
           'folderPlugina/plikIndex2.php','folderPlugina/plikIndex3.php' );

        foreach ( $plugins_all as $plugin ) {    
            $key = array_search( $plugin, $plugins );
            if ( false !== $key ) {
                unset( $plugins[ $key ] );
            }
        }
    }
    return $plugins;
}

Pozostało 580 znaków

2019-08-25 13:02
0

Dzięki:) Niestety z php jestem ciemny i dopiero zaczynam się go uczyć...

Hmm niestety z kodem jest pewien problem, bo wyłącza on wtyki w całym wp-adminie dla zalogowanych userów... a chodzi o to, żeby blokował ich ładowanie wyłącznie w przypadku edytowania/dodawania produktu (żeby nieco przyspieszyć ładowanie strony edycji produktu i zapisywanie zmian). Czy Twój kod można zmodyfikować w ten sposób??

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0