Wordpress - 嵌套的短码 - 修复必需

问题描述 投票:0回答:1
[shortcode1 category="[shortcode2 tag='foo']"]

WordPress使用正则表达式运行短代码。但是,这些Regexes不允许在其他短码的属性中使用短代码。问题似乎是与属性相对应的第三个匹配组(M [3])切断了属性字符串的最后一部分(即'])。 我试图在frhcodes.php中修改正则零件,但找不到使其正常工作的方法(而不打破其他任何内容)。

我猜一个与Regex一起工作的人很容易解决这个问题。我在函数“ get_shortcode_regex”中指的是此部分:

return '\\[' // Opening bracket . '(\\[?)' // 1: Optional second opening bracket for escaping shortcodes: [[tag]] . "($tagregexp)" // 2: Shortcode name . '(?![\\w-])' // Not followed by word character or hyphen . '(' // 3: Unroll the loop: Inside the opening shortcode tag . ' (?:\\w+=".+?").*?| (?:\\w+=\'.+?\').*?' // phibab: deleted and changed lines around here completely (to support nested shortcodes) . ')?' // phibab: added "?" (to support nested shortcodes) . '(?:' . '(\\/)' // 4: Self closing tag ... . '\\]' // ... and closing bracket . '|' . '\\]' // Closing bracket . '(?:' . '(' // 5: Unroll the loop: Optionally, anything between the opening and closing shortcode tags . '[^\\[]*+' // Not an opening bracket . '(?:' . '\\[(?!\\/\\2\\])' // An opening bracket not followed by the closing shortcode tag . '[^\\[]*+' // Not an opening bracket . ')*+' . ')' . '\\[\\/\\2\\]' // Closing shortcode tag . ')?' . ')' . '(\\]?)'; // 6: Optional second closing brocket for escaping shortcodes: [[tag]]
我需要让此运行的原因是我使用主题中的短代码,并想动态设置此快捷代码的属性(使用自定义快捷代码的返回值)。我想将主题的原始短代码保持完整/不变,以允许更新。

感谢您的帮助!

在生成短代码的情况下,您无需更改定义短代码的文件。您可以创建一个新的插件,然后将新的短代码定义放入其中。

add_shortcode("PLUGIN_NAME__other_shortcode", function ($atts, $content, $tag) { if (!isset($atts["category_tag"])) { return "shortcode $tag : the argument category_tag is missing."; } // execute shortcode2 $shortcode_category = "[shortcode2 tag='$atts[category_tag]']"; $category = do_shortcode($shortcode_category); // generate shortcode1 $shortcode_1 = "[shortcode1 category='$category']"; // execute shortcode1 and return result return do_shortcode($shortcode_1); });
然后您使用此新快捷代码:

[PLUGIN_NAME__other_shortcode category_tag='floo']

wordpress
1个回答
0
投票
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.