Hauptmenü

Werkzeuge

Kategorien

Archiv

Problem zwischen wpShopGermany und dem awake Theme

Erstellt in Wordpress am 12. August 2014 vom Daschmi

Es gibt bis Version 3.4.2 ein Problem beim Einsatz von wpShopGermany mit dem WordPress awake Theme. Das awake Theme versucht die Namen der Input Felder als Shortcodes zu interpretieren, was zum einen zu einer merkwürdigen Darstellung der Shop Templates führt und zum anderen die Formularfelder nicht korrekt gespeichert werden.

Im awake Theme gibt es eine nicht dokumentierte Funktion, um das parsen der Shortcodes zu verhindern. Alles was zwischen [raw] und [/raw] steht wird nicht als Shortcode interpretiert. Eine Möglichkeit wäre nun alle phtml Templates in [raw] und [/raw] einzuschließen, was aber einen erheblichen Aufwand bedeutet. Ab der wpShopGermany Version 3.4.3 gibt es unter wpShopGermany -> Konfiguration -> Erweitert eine neue Funktion, die automatisch alle Frontendtemplates in [raw] und [/raw] einschließt ohne die Templates zu modifizieren.

Leider gibt es im awake Theme noch eine weitere Funktion, die offenbar den Inhalt für die Verarbeitung der Shortcodes vorbereiten soll:

function mysite_texturize_shortcode_before($content) {
$content = preg_replace(‚/\]\[/im‘, "]\n[", $content);
return $content;

Diese Funktion ersetzt aber zum Beispiel:

<input type="text" id="email" name="wpsg[checkout][email]" value="" />

durch

<input type="text" id="email" name="wpsg[checkout]
[email]" value="" />

Dies führt dann dazu, dass die Variablen nicht korrekt übergeben und gespeichert werden.

Abhilfe schafft die Änderung der mysite_texturize_shortcode_before function durch:

function mysite_texturize_shortcode_before($content) {

$pattern_full = ‚{(\[raw\].*?\[/raw\])}is‘;
$pattern_contents = ‚{\[raw\](.*?)\[/raw\]}is‘;

$pieces = preg_split($pattern_full, $content, -1, PREG_SPLIT_DELIM_CAPTURE);
$new_content = “;

foreach ($pieces as $piece)
{

if (preg_match($pattern_contents, $piece, $matches))
{

// [raw](.*)[/raw]
$new_content .= $piece;

}
else
{

$new_content .= preg_replace(‚/\]\[/im‘, "]\n[", $piece);

}

}

return $new_content;

}

so wird die Ersetzung zwischen den [raw] und [/raw] Tags nicht mehr durchgeführt.