通过_Content()实现小部件时出现问题

时间:2011-03-24 作者:mathiregister

嘿,伙计们,我真的需要你们帮忙。

我正在使用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\' ));

2 个回复
最合适的回答,由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 );

SO网友:hakre

我认为您的代码中有一个小错误,这将阻止它工作:

$content = apply_filters(\'the_content\', \'<!--subscribe2-->\');
$content = remove_filter(\'the_content\', \'page_route\');
echo $content;
第二行:

$content = remove_filter(\'the_content\', \'page_route\');
将放置TRUEFALSE 进入$content.

只需将其替换为

$result_remove_filter = remove_filter(\'the_content\', \'page_route\');
然后再试一次。

结束

相关推荐

如何在_loop上跟踪帖子编号

我需要从循环中自定义一些帖子<交易如下:我的网站设置为每页10篇帖子。在帖子#2、#5、#7(每页)上,我想显示特定的背景。这种问题的最佳解决方案是什么?