WordPress - игнорировать или временно отключить плагин в меню Сохранить - PullRequest
1 голос
/ 30 октября 2019

У меня есть сайт с огромным меню. Пожалуйста, поймите, это требования клиентов, чтобы меню было таким же большим, как оно есть, поэтому нет, это нельзя сделать другим способом.

Сайт работает через Cloudflare, поэтому у нас установлен плагин Cloudflare дляочистить кеш при обновлении.

Я обнаружил, что сохранение меню в admin вызывает ошибку 502 из-за тайм-аута сценария сохранения. Мы обнаружили, что виновником является плагин Cloudflare, выполняющий запросы Curl для очистки, очень много раз из-за размера меню.

То, что я пытаюсь сделать, это отключить плагин, когда меню сохраняется,поэтому я создал плагин Must Use с исходным кодом, чтобы выполнить это ... однако, он не работает, и процессы Curl по очистке плагина все еще запускаются.

ПРИМЕЧАНИЕ: php input max, время ожидания скрипта, ограничения памяти были сильно увеличены: 5000, 5 минут, 1024M соответственно. Cloudflare имеет строгий тайм-аут, так что на самом деле время ожидания истекает раньше, чем сценарий ... единственная причина, по которой я знаю, что происходит, это то, что он протестирован и зарегистрирован в промежуточной области.

<?php
/*
Plugin Name: Disable Plugins in Admin pages
Plugin URI: http://www.example.com
Description: Disable plugins in wordpress admin pages
Author: Kevin Pirnie
Version: 0.0.1
*/

// wait until the plugins are active
add_filter( 'option_active_plugins', function( $_opt, $_opt_name ) {

    // plugins to remove
    $_to_remove = array(
        'cloudflare/cloudflare.php',
    );

    // hold our new options
    $_new_opts = $_opt;

    // remove the plugin from the array
    foreach ( $_opt as $_k => $_v ) {
        if ( in_array( $_v, $_to_remove ) ) {
            unset( $_new_opts[$_k] );
        }
    }

    // we only need to do this on these pages
    if( $_SERVER['PHP_SELF'] == '/wp-admin/nav-menus.php' ) {
        $_opt = $_new_opts;
    }

    // return the array
    return $_opt;

}, 999, 2 );

Как я могу исправитьэто так плагин не запускается, когда меню сохраняет?

1 Ответ

1 голос
/ 01 ноября 2019

Я не могу на самом деле протестировать, так как у меня сейчас нет сайта за Cloudflare, но попробуйте это:

<?php

// Use the filter provided by Clodflare's plugin and return an empty array for the urls
// check wp-content/plugins/cloudflare/src/WordPress/Hooks.php line 155 to see what happens behind this
add_filter('cloudflare_purge_by_url', function($urls, $postId) {
    global $pagenow;

    //Act only if the current screen is the Admin Menu
    if ("nav-menus.php" === $pagenow) {
        $urls = [];
    }

    return $urls;
});

Плагин Cloudflare предоставляет этот фильтр для изменения массива URL перед очисткой. кеш.

Удачи!

...