Ich muss benutzerdefinierte Daten an einen Filter übergeben, der von einem Plugin eines Drittanbieters bereitgestellt wird. Alle Möglichkeiten, die ich gesehen habe, sind wirklich kompliziert und schwer, meinen Kopf herumzuwickeln.
Nehmen Sie dieses Beispiel:
$score = 42; //Some crazy calculation I don't want to repeat.
function add_score_to_title($title) {
return 'Quiz Results (' . $score . '/') - ' . $title;
}
add_filter( 'aioseop_title_single', 'add_score_to_title');
Wie kann ich die $score
Variable übergeben add_score_to_title()
?
Am Ende habe ich meine Variable zum globalen $wp
Objekt hinzugefügt . Am Ende haben Sie also Folgendes:
global $wp;
$score = 42; //Some crazy calculation I don't want to repeat.
$wp->some_random_name_for_score = $score;
function add_score_to_title($title) {
global $wp;
$score = $wp->some_random_name_for_score;
return 'Quiz Results (' . $score . '/') - ' . $title;
}
add_filter( 'aioseop_title_single', 'add_score_to_title');
Schmutzig? Könnte sein. Einfach? Jep! Irgendwelche Nachteile dieser Technik? Bitte diskutiere.
UPDATE Hier ist der vollständige Code -> http://pastebin.com/fkSXY04m
$score
wird berechnet, indem ein Array von Dingen durchlaufen und eine Variable inkrementiert wird. pastebin.com/fkSXY04mAntworten:
Sie haben mindestens zwei Möglichkeiten:
Globalisieren Sie die Variable
Wickeln Sie die Score-Berechnung ein
Wenn Sie die Score-Berechnung nur innerhalb des Filters benötigen , ziehen Sie die Logik in den Rückruf selbst:
Besser noch, Sie könnten Ihre Punkteberechnung in eine eigene Funktion einschließen und diese Funktion dann in Ihrem Rückruf aufrufen:
Wenn Sie Probleme beim Verweisen auf das
$_POST
Objekt haben, können Sie auch Ihre Abfragevariable registrieren und dannget_query_var()
intern verwenden, um Daten abzurufen:Wenn dies vorhanden ist,
$_POST['Q']
kann es durch ersetzt werdenget_query_var('Q')
.quelle
$score
zuerst berechnet und dann globalisiert. Kein Wunder, dass es nicht funktionierte. Vielen Dank!Rufen Sie die Funktion an einer beliebigen Stelle in Ihrem Skript auf, um die Punktzahl zu erhalten. Sie wird nur einmal berechnet.
Eine andere Möglichkeit, anonyme Funktionen zu verwenden :
quelle
add_filter()
oderadd_action()
Aufrufen verwendet werden. Sie können nicht über entfernt werdenremove_function()
.remove_filter()
undremove_action()
. Und es gibt keinen Grund, warum Plugin / Theme-Filter nicht vernünftigerweise entfernt werden können: Überschreiben Sie Plugin-Stylesheet-Warteschlangen, untergeordnete Themes usw.Im folgenden Beispiel wird die Variable
$my_calculation
im globalen Bereich angezeigt. Innerhalb unserer lokalen Funktion müssen wir jedoch deklarieren,global $my_calculation
um auf die Variable im globalen Bereich zugreifen zu können.Dies ist nur ein Weg, und es scheint ordentlich zu sein. Würde das für dich funktionieren?
quelle
print
oderecho
Ihr Ergebnis sicherstellen, dass Ihre Funktion tatsächlich funktioniert, bevor Sie sie an den Filter übergeben?$score
funktioniert tatsächlich. Ich habe$score
zuerst gepatzt und gesetzt, dann globalisiert, was eindeutig nicht funktioniert. Wenn Sie es richtig machen, indem Sie$score
zuerst globalisieren und ihm dann einen Wert geben, funktioniert dies wie erwartet. Vielen Dank an alle.