Wordpress - 在菜单保存时忽略或暂时禁用插件
Wordpress - Ignore or Temporarily Disable Plugin on Menu Save
我有一个包含大量菜单的网站。请理解,客户要求菜单尽可能大,所以不行,不能这样做。
该站点 运行 通过 Cloudflare,因此我们安装了 Cloudflare 插件以在更新发生时清除缓存。
我发现,在管理员中保存菜单会导致 502 错误,因为保存脚本超时。我们发现罪魁祸首是 Cloudflare 插件执行清除的 Curl 请求,由于菜单的大小,执行了很多次。
我想做的是在菜单保存时禁用插件,所以我创建了一个必须使用的插件和后续代码来完成这个......但是,它似乎没有工作并且插件的清除 Curl 进程仍在启动。
注意: php 输入最大值、脚本超时、内存限制都已大幅增加:分别为 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 );
我该如何解决这个问题,以便插件在菜单保存时不会 运行?
我无法真正测试,因为我现在没有 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 的数组。
祝你好运!
我有一个包含大量菜单的网站。请理解,客户要求菜单尽可能大,所以不行,不能这样做。
该站点 运行 通过 Cloudflare,因此我们安装了 Cloudflare 插件以在更新发生时清除缓存。
我发现,在管理员中保存菜单会导致 502 错误,因为保存脚本超时。我们发现罪魁祸首是 Cloudflare 插件执行清除的 Curl 请求,由于菜单的大小,执行了很多次。
我想做的是在菜单保存时禁用插件,所以我创建了一个必须使用的插件和后续代码来完成这个......但是,它似乎没有工作并且插件的清除 Curl 进程仍在启动。
注意: php 输入最大值、脚本超时、内存限制都已大幅增加:分别为 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 );
我该如何解决这个问题,以便插件在菜单保存时不会 运行?
我无法真正测试,因为我现在没有 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 的数组。
祝你好运!