it-swarm.com.de

Erkennung verschachtelter Kurzcodes

Wenn Sie mit diesem Code vertraut sind

<?php
  $pattern = get_shortcode_regex();
  preg_match('/'.$pattern.'/s', $posts[0]->post_content, $matches);
  if (is_array($matches) && $matches[2] == 'YOURSHORTCODE') {
    //shortcode is being used
  }
?>

von dieser Website, funktioniert aber nicht für verschachtelte Shortcodes.

Weiß jemand, wie man es für verschachtelte Shortcodes arbeiten lässt?

4
meosoft

Von: http://codex.wordpress.org/Shortcode_API#Limitations

Der Shortcode-Parser verarbeitet verschachtelte Shortcode-Makros korrekt, sofern ihre Handler-Funktionen dies unterstützen, indem sie rekursiv do_shortcode () aufrufen.

Sie können den gleichen Shortcode jedoch nicht in einem anderen verschachteln:

Der Parser schlägt jedoch fehl, wenn ein Shortcode-Makro verwendet wird, um ein anderes Makro mit demselben Namen einzuschließen

Angenommen, Sie tun dies nicht, finden Sie hier ein Beispiel dafür, was Sie in Ihrem Shortcode-Rückruf tun müssen:

function paragraph_wrap($atts, $content) {

     // if there are nested shortcodes - handle them
     $content = do_shortcode($content);

     // wrap content in a paragraph tag
     $paragraphed = '<p>' . $content . '</p>';

     return $paragraphed;
}
add_shortcode('wrap_p', 'paragraph_wrap');

Hoffe das hilft.

8
Jeff Stieler

Nur eine Vermutung. get_shortcode_regex () funktioniert nur für registrierte Shortcodes. Nur für den Fall, dass Sie "Ihren" Shortcode nicht registriert haben, funktioniert dies nicht einmal für einfache Shortcodes. Dies könnte also - falls Sie es nicht registriert haben - die Ursache für Ihr Problem sein.

Die Shortcode-Behandlung wird in der Shortcode-API angegeben. Beispiele zum Registrieren von Shortcodes finden Sie auf der Codex-Seite add_shortcode () auch.

function baztag_func($atts, $content=) {
    return "content = $content";
}
add_shortcode('baztag', 'baztag_func');

Für verschachtelte Codes hat Jeff bereits geantwortet, wie dies funktioniert. Das ist also im Grunde genommen ein kleineres Beispiel, das zeigt, wie man einen Shortcode hinzufügt. Nach der Verwendung von add_shortcode() gibt get_shortcode_regex() einen regulären Ausdruck zurück, der den registrierten Shortcode-Namen tatsächlich abdeckt. Sonst passt es einfach nicht zusammen.

3
hakre

Der Shortcode-Abgleich ist fehlerhaft implementiert ( shortcodes.php , ll174). Grundsätzlich werden reguläre Ausdrücke verwendet, um zu beschreiben, was eine nicht reguläre Sprache sein sollte (d. H. Shortcodes mit willkürlicher Verschachtelung).

In der Tat,

[a]
  [a]
  [/a]
[/a]

wird analysiert, so dass das öffnende Tag in Zeile 1 mit dem schließenden Tag in Zeile 3 übereinstimmt; das führt natürlich nicht zum gewünschten verhalten.

1
Raphael