Wordpress 在特定页面/帖子上禁用插件
Posted
技术标签:
【中文标题】Wordpress 在特定页面/帖子上禁用插件【英文标题】:Wordpress Disable Plugin on Specific Pages/Posts 【发布时间】:2011-10-10 02:32:50 【问题描述】:有谁知道在特定页面上禁用插件(处于活动状态)的真正有效方法?有一些插件在网站的某些页面中并不真正需要,它们有很多 CSS 和 javascript 文件,这些文件会减慢网站的加载速度,有时可能会与其他文件冲突。
我知道我可以弄乱插件的代码等,但它并不是真的有效。
有什么想法吗?
提前致谢!
【问题讨论】:
【参考方案1】:试试 Jeff Sterup 的“Plugin Organizer”Wordpress 插件。您必须在其设置下启用“选择性插件加载”(确保按照他们的指示启用它)
然后在您的帖子/页面编辑器中,撰写窗口下方有一个带有复选框的框,用于禁用该页面的任何特定插件
我大概搜索了 20 多次 Google 和 Wordpress 插件存储库,最终找到了一个简单的解决方案。希望它也对你有用!
【讨论】:
这行得通!对我来说效果很好的方法是全局禁用插件,然后专门为需要它的页面/帖子启用。这减少了在不需要的页面/帖子上不必要地加载开销。谢谢杰西B! /点赞 这里是插件链接:wordpress.org/plugins/plugin-organizer——我也推荐使用 P3。只需在这里查看:wordpress.org/plugins/p3-profiler 但我希望将插件加载到管理页面中......而不是 wp-admin/admin-ajax.php 我该怎么做? @KevinWorthington 我喜欢插件管理器,但我不知道它是否允许为帖子存档选择性加载插件 - 有什么想法吗? @Mattypants - 您可以创建一个插件过滤器,并将您的存档 url 设置为永久链接。【参考方案2】:Here is the idea.
add_filter( 'option_active_plugins', 'lg_disable_cart66_plugin' );
function lg_disable_cart66_plugin($plugins)
if(strpos($_SERVER['REQUEST_URI'], '/store/') === FALSE && !is_admin() )
$key = array_search( 'cart66/cart66.php' , $plugins );
if ( false !== $key ) unset( $plugins[$key] );
return $plugins;
附言一些people say 你可能需要把它放在mu-plugins
文件夹中。
【讨论】:
很好,让您了解@Jesse B 提到的“Plugin Organizer”插件的工作原理。 这应该是公认的答案,非常干净,只需要一小段代码。与这个简洁的解决方案相比,IMO 安装像插件管理器这样的插件是多余的。非常感谢! 我也发现了这个解决方案here 但这并不能阻止插件将其所有脚本和样式排入队列。我尝试使用此方法停用 Divi Builder 插件,该插件会向页面添加大量脚本,但我只是在某些情况下需要它。也不适用于 Contact Form 7。有帮助吗? 再一次,请大家注意,这段代码应该放在mu-plugins
而不是主题的functions.php
。
感谢您在尝试了许多其他选项后对我有用。我尝试了插件管理器,但没有成功。这很简单。使用此代码创建一个新的 php 文件(将其命名为任何名称)并将其添加到您的 wp-content/mu-plugins 目录中。确保使用您尝试禁用的任何插件更新 cart66。【参考方案3】:
我知道它很旧,但这个帖子正是我所需要的。
对 numediaweb 答案的唯一警告是删除操作需要与添加操作相同的优先级
插件中的挂钩
add_action('wp_print_styles', 'easy_fancybox_enqueue_styles', 999);
add_action('wp_enqueue_scripts', 'easy_fancybox_enqueue_scripts', 999);
add_action('wp_head', 'easy_fancybox', 999);
移除挂钩的代码
function remove_easy_fancybox()
global $post;
$ids = array(12,34,55);
if(in_array($post->ID,$ids)):
remove_action('wp_print_styles', 'easy_fancybox_enqueue_styles', 999);
remove_action('wp_enqueue_scripts', 'easy_fancybox_enqueue_scripts',999);
remove_action('wp_head', 'easy_fancybox', 999);
wp_dequeue_script( 'jquery.fancybox' );
wp_dequeue_script( 'jquery.easing' );
wp_dequeue_script( 'jquery.mousewheel' );
wp_dequeue_script( 'jquery.metadata' );
endif;
add_action('wp_head', 'remove_easy_fancybox', 1);
来自http://codex.wordpress.org/Function_Reference/remove_action
重要提示:要删除挂钩,在添加挂钩时,$function_to_remove 和 $priority 参数必须匹配。这适用于两者 过滤器和操作。删除失败不会发出警告。
我已包含我的 if 语句以仅对特定帖子 ID 运行操作,我认为这可能会有所帮助。
【讨论】:
在我需要使用is_page()
从任何页面中删除插件功能的情况下,这对我来说非常有效。【参考方案4】:
首先检查,如果您要删除的插件没有您设置要排除的页面的选项菜单。
其次,寻找你的插件动作钩子:
add_action('wp_head', 'easy_fancybox', 999);
这是一个简单的 fancybox 插件示例,它与 wordpress 标题挂钩。为了删除它,我将此函数放在您的 functions.php
中,并且在调用 wp_head();
的任何实例之前:
function remove_easy_fancybox()
remove_action('wp_head', 'easy_fancybox_enqueue_styles');
remove_action('wp_head', 'easy_fancybox_enqueue_scripts');
remove_action('wp_head', 'easy_fancybox');
wp_dequeue_script( 'jquery.fancybox' );
wp_dequeue_script( 'jquery.easing' );
wp_dequeue_script( 'jquery.mousewheel' );
wp_dequeue_script( 'jquery.metadata' );
add_action('wp_head', 'remove_easy_fancybox', 1);
【讨论】:
发现add_action( 'plugins_loaded', array(&$this, 'plugins_loaded') );
之类的东西怎么办?我更喜欢使用 mainpart 的方法(见下文)。【参考方案5】:
您现在可以使用免费插件 Freesoul Deactivate Plugins 来停用特定页面、帖子、自定义帖子和存档上的特定插件,设置页面非常简单
【讨论】:
这是一个编码站点,而不是如何安装插件。请注意,大多数插件会带来比您最初想要的更多的额外代码。所以没有。 插件是由代码创建的,并不是所有的插件都会加载很多额外的代码。如果其他人已经解决了这个问题并写了一个插件,那么使用那个插件就不会那么愚蠢了。这里有 Freesoul 停用插件的官方 WordPress 烟雾测试:plugintests.com/plugins/freesoul-deactivate-plugins/latest。正如您将看到的,该插件在前端增加了 4.42kB 的内存使用量(没有)和额外的无法测量的加载时间(在测试中为负数)。创建该插件是为了在许多插件处于活动状态时提高性能,而不是降低性能。 谢谢,我最终使用了这个插件。对我来说,这是阻止插件加载到导致问题的页面上的完美解决方案。 不客气!我很高兴它对解决问题很有用。 @Jose 我在尝试了另外 2 个插件后才试用了您的插件。你的效果很好!!谢谢!!我正在尝试清理一个包含大量插件的网站,构建一个新的博客/帖子,而您的作品可以禁用每个页面/帖子的任何插件。以上是关于Wordpress 在特定页面/帖子上禁用插件的主要内容,如果未能解决你的问题,请参考以下文章
Wordpress 类别模板显示来自所有类别的帖子,而不是特定类别的帖子
在 Wordpress Datewise 中为特定类别创建存档
sql 用于禁用现有WordPress页面,帖子和自定义帖子类型的注释,引用和pingback的SQL命令。默认的WordPress