it-swarm.com.de

problem bei der Implementierung des Widgets über the_content ()

hey Leute, ich brauche wirklich deine Hilfe.

Ich benutze das subscribe2-Plugin (für E-Mail-Abonnements). Ich möchte das Anmeldeformular als Widget anzeigen. Der Autor des Plugins empfiehlt folgende Vorgehensweise.

$content = apply_filters('the_content', '<!--subscribe2-->');
$content = remove_filter('the_content', 'page_route');
echo $content;

dies funktioniert einwandfrei, außer dass ich zusätzlich das Mingle-Plugin (eine Art Plugin für soziale Netzwerke) verwende.

Wann immer ich mich auf einer Seite des Mingle-Plugins befinde (wie/login,/register,/activity, etc.), zeigt das Widget mit dem Anmeldeformular plötzlich genau den gleichen Inhalt wie die Seiten selbst an? Einfach nur komisch!

Irgendeine Idee, warum das passieren könnte? Oder wie ich das verhindern könnte! Ich brauche wirklich eine Lösung dafür!

edit: alle filter mischen trifft zu ...

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' ));
1
mathiregister

Es ist äußerst schwierig, einen Filter zu entfernen, der als Teil eines Objekts hinzugefügt wurde. Sie haben den Verweis auf das ursprüngliche Objekt erhalten und übergeben diesen als Teil der zu entfernenden Funktion.

Glücklicherweise wurde der Filter mit einer ungewöhnlichen Priorität hinzugefügt, sodass Sie wahrscheinlich alle Filter mit Priorität 100 sicher entfernen können:

remove_all_filters( 'the_content', 100 );
$content = apply_filters('the_content', '<!--subscribe2-->');
echo $content;

Stellen Sie nur sicher, dass in Priorität 100 nichts Wesentliches hinzugefügt wird ...

Wenn Sie nur diesen spezifischen Filter finden müssen, um ihn zu entfernen, bin ich überfordert. Irgendjemand anderes?

Bearbeiten:

Ich musste dies herausfinden, da ich mich tatsächlich eine Weile gefragt habe, wie man einen Filter entfernt, der als Referenz übergeben wurde. In diesem Fall wird die Klasse MnglAppController, die den Filter hinzufügt, als Variable initiiert:

$mngl_app_controller           = new MnglAppController();

Um es zu entfernen, müssen Sie diese Variable globalisieren und als Teil des remove_filter-Aufrufs übergeben:

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 );
2
goldenapples

Ich denke, Sie haben einen kleinen Fehler in Ihrem Code, der ihn daran hindert, zu funktionieren:

$content = apply_filters('the_content', '<!--subscribe2-->');
$content = remove_filter('the_content', 'page_route');
echo $content;

Die zweite Zeile:

$content = remove_filter('the_content', 'page_route');

setzt TRUE oder FALSE in $content.

Ersetzen Sie es einfach durch

$result_remove_filter = remove_filter('the_content', 'page_route');

und versuche es noch mal.

1
hakre