[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']