嘿,伙计们,我真的需要你们帮忙。
我正在使用subscribe2插件(用于电子邮件订阅)。我想将注册表单显示为一个小部件。插件作者建议按以下方式执行。
$content = apply_filters(\'the_content\', \'<!--subscribe2-->\');
$content = remove_filter(\'the_content\', \'page_route\');
echo $content;
这很好,除了我另外使用了mingle插件(一种社交网络插件)。
每当我在mingle插件的页面上(比如/login、/register、/activity等等),带有订阅表单的小部件会突然显示与页面本身完全相同的内容?真奇怪!
知道为什么会这样吗?或者我怎么能阻止它!我真的需要一个解决方案!
编辑:所有过滤器混合应用。。。
add_filter(\'get_avatar\', array($this,\'override_avatar\'), 10, 4);
add_filter(\'get_comment_author_url\', array($this,\'override_author_url\'));
add_filter(\'mngl-show-powered-by\', array(&$this, \'show_powered_by\'));
add_filter(\'the_content\', array( &$this, \'page_route\' ), 100);
add_action(\'wp_enqueue_scripts\', array(&$this, \'load_scripts\'), 1);
add_action(\'admin_enqueue_scripts\', array(&$this,\'load_admin_scripts\'));
register_activation_hook(MNGL_PATH."/mingle.php", array( &$this, \'install\' ));
// Used to process standalone requests (make sure mingle_init comes before parse_standalone_request)
add_action(\'init\', array(&$this,\'mingle_init\'));
add_action(\'init\', array(&$this,\'parse_standalone_request\'));
add_filter(\'request\', array(&$this,\'parse_pretty_profile_url\'));
add_action(\'phpmailer_init\', array(&$this, \'set_wp_mail_return_path\'));
add_action(\'phpmailer_init\', array(&$this, \'set_wp_mailer\'));
add_action(\'admin_init\', array(&$this, \'prevent_admin_access\'));
add_filter(\'mngl-activity-types\', array( &$this, \'add_activity_types\' ));
add_filter(\'mngl-notification-types\', array( &$this, \'add_notification_types\' ));
add_filter(\'mngl-notification-types\', array( $this, \'add_notification_types\' ));
add_filter(\'mngl-activity-types\', array( &$this, \'add_activity_types\' ));
add_action(\'user_register\', array(&$this, \'add_default_friends\') );
add_filter(\'mngl-activity-types\', array( &$this, \'add_activity_types\' ));
最合适的回答,由SO网友:goldenapples 整理而成
移除作为对象一部分添加的过滤器非常困难。您已经获得了对原始对象的引用,并将其作为要删除的函数的一部分传递。
幸运的是,过滤器的优先级非常高,因此您可以安全地删除优先级为100的所有过滤器:
remove_all_filters( \'the_content\', 100 );
$content = apply_filters(\'the_content\', \'<!--subscribe2-->\');
echo $content;
只要确保你没有任何其他必要的东西被添加到优先级100。。。
如果你必须只找到这个特定的过滤器来删除,那么我就没有深度了。还有其他人吗删除>
编辑:
我必须弄清楚这一点,因为我实际上想知道如何删除通过引用传递的过滤器。在这种情况下,添加过滤器的MnglAppController类作为变量启动:
$mngl_app_controller = new MnglAppController();
因此,要删除它,必须将该变量全球化,并将其作为remove\\u filter调用的一部分传递:
global $mngl_app_controller;
remove_filter( \'the_content\', array($mngl_app_controller, \'page_route\'), 100 );
$content = apply_filters(\'the_content\', \'<!--subscribe2-->\');
echo $content;
add_filter( \'the_content\', array($mngl_app_controller, \'page_route\'), 100 );