我试图在Wordpress首页上禁用插件,使其更轻一些。我只希望在显示首页时禁用它。
我得到了这个工作代码,我放入了wp-content / mu-plugins / 它禁用除指定/子页面/之外的所有页面上的一个插件 这很好,但这并不是我追求的目标。
如何在查看首页时更改此代码以禁用插件?
以下是代码:
add_filter( 'option_active_plugins', 'lg_disable_plugin' );
function lg_disable_plugin($plugins){
if(strpos($_SERVER['REQUEST_URI'], '/subpage/') === FALSE AND strpos($_SERVER['REQUEST_URI'], '/wp-admin/') === FALSE) {
$key = array_search( 'was-this-helpful-pro/was-this-helpful-pro.php' , $plugins );
if ( false !== $key ) {
unset( $plugins[$key] );
}
}
return $plugins;
}
我还发现了另一个适用于其他页面的代码.... 但是同样的故事,我无法弄清楚如何使它适用于首页,只适用于子页面**
$listener_term = '/subpage/';
$current_url = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . '';
// listener for the thin load
if ( strstr( $current_url, $listener_term ) ) {
add_filter( 'option_active_plugins', 'api_request_disable_plugin' );
}
function api_request_disable_plugin( $plugins ) {
$plugins_not_needed = array(
'backupwordpress/backupwordpress.php',
'wordfence/wordfence.php',
'contact-form-7-to-database-extension/contact-form-7-db.php',
'contact-form-7/wp-contact-form-7.php',
'wp-piwik/wp-piwik.php',
'simple-responsive-slider/simple-responsive-slider.php',
'google-sitemap-plugin/google-sitemap-plugin.php',
'category-page-icons/menu-compouser.php',
'easy-fancybox/easy-fancybox.php',
'business-owner-switch/business-owner-switch.php',
'wordpress-seo/wp-seo.php'
);
foreach ( $plugins_not_needed as $plugin ) {
$key = array_search( $plugin, $plugins );
if ( false !== $key ) {
unset( $plugins[ $key ] );
}
}
return $plugins;
}
有什么想法吗?
我想我应该提一下:
无论我尝试什么,它们都不适用于首页/主页。
答案 0 :(得分:4)
我没有意识到你仅希望它发生在首页上 - 代码段建议你也想要它在其他页面上。
我之前建议您可以使用is_home或is_front_page,但是在我们这样做的阶段,它们尚未加载 - 所以这里的替代方法是加载REQUEST_URI并查看它是否为空。如果它是空白的,我们将假设我们在主页上 - 为了满足可能不在根目录的安装,我们将URL与网站的相对主页位置进行比较 - 为了增加安全性,我们将其封装在htmlspecialcharacters中(可能没有必要) )。
也许尝试这样的事情(看起来,这可能不是最好的方法,但它确实对我有用):
add_filter( 'option_active_plugins', 'lg_disable_plugin' );
function lg_disable_plugin($plugins){
if (htmlspecialchars(trim(wp_make_link_relative(get_site_url()),'/')) == htmlspecialchars(trim($_SERVER['REQUEST_URI'],'/'))) {
$key = array_search( 'was-this-helpful-pro/was-this-helpful-pro.php' , $plugins );
if ( false !== $key ) {
unset( $plugins[$key] );
}
}
return $plugins;
}
如果您想为多个插件执行此操作,可以将代码更改为以下内容:
add_filter( 'option_active_plugins', 'lg_disable_plugin' );
function lg_disable_plugin($plugins){
if (htmlspecialchars(trim(wp_make_link_relative(get_site_url()),'/')) == htmlspecialchars(trim($_SERVER['REQUEST_URI'],'/'))) {
$plugins_not_needed = array ('was-this-helpful-pro/was-this-helpful-pro.php',
'pluginfolder/plugin-name.php');
foreach ( $plugins_not_needed as $plugin ) {
$key = array_search( $plugin, $plugins );
if ( false !== $key ) {
unset( $plugins[ $key ] );
}
}
}
return $plugins;
}
答案 1 :(得分:0)
您可以编写一个mu插件,如果没有,请在“ wp-content”文件夹中创建一个名为“ mu-plugins”的文件夹,然后创建一个PHP文件,您可以在其中编写并尝试以下代码:
if( !is_admin() && empty( $_POST ) ){
$uri = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$uriArr = explode( '?',$uri );
$uri = $uriArr[0];
$home_uri = str_replace( 'https://','',str_replace( 'http://','',home_url( '/' ) ) );
if ( $uri === $home_uri ) {
$paths = array(
'plugin_folder1/plugin1.php'
'plugin_folder2/plugin2.php'
);
global $paths;
add_filter( 'option_active_plugins', 'my_option_active_plugins' );
}
}
function my_option_active_plugins( $plugins ){
global $paths;
foreach( $paths as $path ){
$k = array_search( $path, $plugins );
if( false !== $k ){
unset( $plugins[$k] );
}
}
return $plugins;
}
只需将“ plugin_folder1 / plugin1.php”替换为您要停用的插件
另一种选择是安装免费的插件Freesoul停用插件,您将能够轻松地停用每个页面,帖子,自定义帖子和存档所需的插件。
答案 2 :(得分:0)
这是我写的一个抽象,它允许您指定路由并将其传递给插件列表。将插件打印到日志或屏幕上以获取它们的名称,然后将它们添加到阵列中即可对其进行过滤。
要考虑的另一种方法是用白名单替换目标,因此您必须为每个路由定义更少的内容(如果要使用的插件很多)。
sameProp
可以将其扩展为使用针(路线)阵列,该阵列具有要删除的插件阵列,以进行更多控制。
类似的东西:
not