2016-03-18 13 views
0

Ich schreibe ein Wordpress-Plugin, das das Verhalten eines vorhandenen Plugins erweitert.Ein vorhandenes shortcode mit einem neuen einbinden

Das vorhandene Plugin definiert einen Shortcode mit dem Namen [original] und ich definiere einen Shortcode mit dem Namen [wrapper], der einige Funktionen hinzufügt, aber grundsätzlich das gleiche Verhalten.

Dies ist der Code, den ich schrieb:

function wrapper_shortcode($atts,$content) 
{ 
    //Do something... 
    return do_shortcode("[original]$content[/original]"); 
} 
add_shortcode('wrapper', 'wrapper_shortcode'); 

Meine Frage ist, wie gehe ich die Attribute ($atts) neben den [original] Shortcode, und gibt es einen besseren Weg, dies zu tun, als das zu nennen do_shortcode() funktionieren?

+1

Der beste Weg ist, den ursprünglichen Kurzwahlcode zu ändern und sicherzustellen, dass die Ausgabe mit der '' 'do_shortcode''' Funktion umbrochen wird. es ist am besten, wenn der ursprüngliche Shortcode einen Filter oder Haken hat – silver

+0

Ändern des Ursprungs Ein Shortcode ist keine Option, da alle Änderungen am Plugin-Code überschrieben werden, wenn das Original-Plugin aktualisiert wird –

+1

Sie können den ursprünglichen Shortcode ändern, indem Sie '' 'shortcode''' entfernen und mit demselben Shortcode erneut hinzufügen Tag, aber verschiedene Funktion ausgeführt, aber dann müssen Sie Ihre benutzerdefinierte Funktion aktualisieren, sobald die ursprüngliche Funktion geändert wird, Wenn das immer noch nicht funktioniert, dann müssen Sie Regex verwenden, um auch nach dem ursprünglichen Shortcode suchen, extrahieren Sie sein Attribut und re - Führe es in deiner Funktion mit einigen Modifikationen aus, es ist nicht so schwer, aber ich bin nicht gut in Regex, also kann ich dir kein Beispiel geben. – silver

Antwort

1

Wenn ich richtig verstanden habe, möchten Sie alle Shortcode-Parameter erfassen und sie blind von wrapper an Ihren original Shortcode übergeben.

Ich würde nicht empfehlen, Parameter ohne ordnungsgemäße Validierung übergeben.

Sie haben ein paar Optionen:

  1. Als Silber vermuten lässt, entfernen original und ersetzen Sie es mit Ihrem eigenen modifizierte Version (da Sie das Plugin nicht aktualisieren können). Aktualisieren Sie es nach jeder Veröffentlichung des Plugins.

  2. Fügen Sie die Parameter hinzu, die Sie validieren und übergeben möchten. und poste es zurück in der Rückkehr.


NICHT EMPFOHLEN - Nur weil Sie können; bedeutet nicht, dass Sie sollten.

Es klingt wie Sie das so etwas wie folgendes tun wollen - Wenn Sie dies tun, könnten Sie wirklich Ärger bringen, es sei denn Sie jedes Attribut bestätigen, wie es kommt durch:

function wrapper_shortcode($atts, $content) { 
    $o_shortcode_atts = " "; 
    foreach ($atts as $key_att => $val_att) { 

     // Validate $key_att and $val_att here - FOR SECURITY!!! 

     $o_shortcode_atts = $o_shortcode_atts . " ".$key_att."=\"".$val_att."\" "; 
    } 
    trim($o_shortcode_atts," "); 

    // Do something... 

    return do_shortcode("[original".$o_shortcode_atts."]".$content."[/original]"); 
} 

WARNUNG - DIES KÖNNTE STÖRUNG BEGRÜNDEN, WENN SIE NICHT VALIDIEREN

+0

Warum passieren die Attribute blind um Ärger? Der Benutzer könnte '' original a = 1] 'oder' [wrapper a = 1] 'trotzdem verwenden. Warum muss ich also die Eingabe validieren? es soll bereits in der '[original]' shortcode code –

+0

behandelt werden, das ist wahr ...aber Sie wissen nicht 100% - [Original] kann die unbekannten Parameter bestätigen (daher das Wort blind - wenn Sie wüssten, was geparst wurde, wäre es nicht unbekannt und quantifiziert) .. Für alles, was wir wissen, [ Original] kann einen Parameter nehmen und direkt in eine DB-Abfrage stecken - wir wissen es einfach nicht. In diesem Beispiel ziehen Sie willkürliche Benutzereingaben ein und "zeigen" sie dann erneut an, damit ein anderer Shortcode verarbeitet werden kann. Sie könnten möglicherweise eine Art von Injektionsvektor oder Cross-Site-Scripting-Problem einführen. Ich habe nur gelernt, alle Eingaben zu überprüfen: – Damien

+0

https://xkcd.com/327/ https://www.smashingmagazine.com/2011/01/keeping-web-users-safe-by-saniticing-input- Daten/ – Damien

Verwandte Themen